[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [cross-project-issues-dev] Specifying version requirements -- let's see a show of hands ...
|
Thanks, Pascal. Very helpful.
Projects,
who has not yet implemented version
constraints on plugin pre-reqs for RC5? who has no plans to for the Callisto
release?
Raising your hand for the second question
is no good, but .. if you raised your hand for the first one, here is some
additional help for you (possibly).
I "beefed up" Pascal's original
tool, so it gives more "manfest-like" ouput. And it allows a
"conservative" range to be produced, if anyone prefers that.
I sincerely hope none of you have 130
plugins to fix up like I did,
but, as I did them, I _promised_ my
PMC that _everyone_ was doing this ... so,
don't make a liar out of me, please.
Still need help via a tool?
I've put the source for my could-almost-be-a-PDE
patch :) in /cvsroot/callisto, see
org.eclipse.callisto.tools.versionchecker
And, for me, it was much more helpful
to actually re-write the manifest.mf files .. or, if you only have 20-40
plugins, at least this version gives you a
"paste-able" version of what
should be in your manifest.mf files. Plus, my version maintains any
"optional" or "visibility" attributes you may have
set, so makes the changes a little less
traumatic.
So, if you like tools, try it out, if
not, please fix up by RC5 anyway, or let us all know here on this list
you will not be able to (and why, etc.).
I know for some this may seem like a
"new requirement", but its not really ... it just may have been
lost in our
"four-field version number"
discussions we had in the beginning (and everyone agreed to).
So, really, is anyone planning on NOT
providing range constraints for Callisto release? Raise you hands
higher please ... since I don't see any, I'll assume eveyone is :)
Thanks all,
= = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = =
For your reading pleasure .. I've actually
provided some javadoc for the tool .. and even spell checked it. If you
have improvements to make, please contribute them back .. and, who knows
... maybe someone will provide a PDE patch for the "clean up manifests"
function!
= = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = =
A simple, unsupported, little-tested utility to help convert
from using unconstrained pre-req'd bundles, to ones constrained to be within
a certain range. For example, if a plugin's manifest.mf file specifies
Require-Bundle: org.eclipse.core.runtime
this utility will write
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)"
or
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,3.3.0)"
if -conservative is specified. In all case the lower
bound is determined by the version found as this utility actually runs.
Directives:
-filter "some regx _expression_"
Will write/check manifest only for those plugins matching
regx _expression_.
-conservative
Will increment 'minor' code, instead of 'major' code in
upper bound of the range. This is required for those using another plugin's
internal (non-API) methods, and recommended if you do not know for sure
you are using API-only. The default is not-conservative, which increments
the major field.
-workspaceRoot "absolute file system path name to
workspace"
If specified, the manifest.mf files found in the workspace
will be re-written with the results of this tool (maintaining as-is the
lines not in the "Requires-Bundle" section. Note. The workspace
must "match" the runtime the tool is running in, for this operation
to make any sense. The default behavior is to only write the recommended
"Require-Bundle:" section to the the console log, which you can
check, fix up, and paste into your manifest.mf file as you like.
Note: re-export visibility and optional resolution are
maintained "as is" in output, but other pre-req settings (e.g.
vendor?) may be lost. The intent is to provide "ready for pasting"
content for the often used cases.
Example invocation:
java -jar startup.jar -clean -application org.eclipse.callisto.tools.versionchecker.dependencyChecker
Example output:
bundle org.eclipse.wst.xml.core
Require-Bundle:
org.eclipse.core.runtime;bundle-version="[3.2.0,3.3.0)",
org.eclipse.core.resources;bundle-version="[3.2.0,3.3.0)",
org.eclipse.wst.common.uriresolver;bundle-version="[1.1.0,1.2.0)",
org.eclipse.wst.sse.core;bundle-version="[1.1.0,1.2.0)",
org.eclipse.text;bundle-version="[3.2.0,3.3.0)",
org.eclipse.jem.util;resolution:=optional;bundle-version="[1.2.0,1.3.0)",
org.eclipse.wst.validation;bundle-version="[1.1.0,1.2.0)",
org.eclipse.emf.ecore.edit;resolution:=optional;bundle-version="[2.2.0,2.3.0)",
org.eclipse.wst.common.emf;resolution:=optional;bundle-version="[1.1.0,1.2.0)",
org.eclipse.emf.ecore.xmi;resolution:=optional;bundle-version="[2.2.0,2.3.0)",
org.eclipse.wst.common.emfworkbench.integration;resolution:=optional;bundle-version="[1.1.0,1.2.0)",
org.eclipse.wst.common.core;bundle-version="[1.1.0,1.2.0)",
com.ibm.icu;bundle-version="[3.4.4,3.5.0)",
org.apache.xerces;visibility:=reexport;bundle-version="[2.8.0,2.9.0)"
Pascal Rapicault <Pascal_Rapicault@xxxxxxxxxx>
Sent by: cross-project-issues-dev-bounces@xxxxxxxxxxx
06/12/2006 02:07 PM
Please respond to
Cross project issues <cross-project-issues-dev@xxxxxxxxxxx> |
|
To
| cross-project-issues-dev@xxxxxxxxxxx
|
cc
| Cross project issues <cross-project-issues-dev@xxxxxxxxxxx>,
cross-project-issues-dev-bounces@xxxxxxxxxxx
|
Subject
| Re: [cross-project-issues-dev] Specifying
version requirements |
|
When no constraints are specified, it means that the plug-in can work against
any version of the required plug-ins (for example, EMF 2.2 should be able
to run against eclipse 1.0 state that it will run against all the version
of eclipse that will come in the future :-)) which of course is not true
because of API changes, usage of internals, etc.... For the end user it
means that he/she can install a plug-in run it and get random exceptions
(NoClassDefFound, NoSuchMethod, etc,) or unexpected behavior when
the plug-in was just simply not meant to run and shoud have not resolved
is the first place.
Of course one might say: "this won't happen for callisto since we
are all shipping on the same date". This is true but callisto
is only one instant in time and as projects starts shipping point releases
on their own schedule, then the user problem I was outlining previously
will occur and the remedy to this will be another synchronize release which
will be somehow acknowledging that our APIs are not real, and we can't
do components.
So the benefits are (in random order): being able to detect incompatibilities
sooner than later, increase modularity by making it easier for people to
compose individual pieces, not longer require one big sync'ed release,
show that we understand components, force API to be stable and push the
creation of new APIs,etc...
So how to do it:
- run the tool I sent earlier this month
- for each unsatisfied constraint review the range given and adjust the
proposed value depending on the following cases:
- if you use only api from the required plug-in,
then specify a range from the current version up to the next major (for
example [3.2.0, 4.0.0)). This will guarantee that this constraint will
be satisfied as long as the required plug-in does not make a breaking api
change.
- if you rely on a particular bug fix, then
specify a range from the specific version containing the fix up to the
next major (for example [3.1.3, 4.0.0)).
- if you use some internals, then specify a
range from the specific version number up to the next minor excluded (for
example [3.2.0, 3.3.0)). Basically here we are trying to be as conservative
as possible while still leaving space for the required plug-in to do bug
fix. Of course here there can be cases where the internal has been changed
in the point release, but restricting ourselves to just one precise version
would just be too cumbersome. Also note that when specifying such a range
you need to enter a bug report requesting for new API so that
this situation does not occur again in the future.
HTH,
PaScaL
David M Williams <david_williams@xxxxxxxxxx>
Sent by: cross-project-issues-dev-bounces@xxxxxxxxxxx
06/12/2006 01:11 PM
Please respond to
Cross project issues <cross-project-issues-dev@xxxxxxxxxxx> |
|
To
| Cross project issues <cross-project-issues-dev@xxxxxxxxxxx>
|
cc
|
|
Subject
| Re: [cross-project-issues-dev] Specifying
version requirements |
|
Pascal, or others who might know ....
What is the effect of not specifying these constraints? Does it default
to "any" .... so, the danger is its just defined too broadly?
Picking the highest available at runtime? Leading to a danger of hard to
maintain install bases? Or, is it something even worse? (such as. "randomly
picks all from possibilities each time its ran"?)
Thanks,
David M Williams/Raleigh/IBM@IBMUS
Sent by: cross-project-issues-dev-bounces@xxxxxxxxxxx
05/31/2006 03:25 PM
Please respond to
Cross project issues <cross-project-issues-dev@xxxxxxxxxxx> |
|
To
| Cross project issues <cross-project-issues-dev@xxxxxxxxxxx>
|
cc
|
|
Subject
| Re: [cross-project-issues-dev] Specifying
version requirements |
|
Pascal. This looks like a very helpful tool and I plan to use it soon myself.
Might I request .. can it and the source be attached to a bugzilla? Or
... is it already in CVS somewhere? You know I trust you :) but
as a matter of policy I hate to execute "class" files from a
mailing list, especially without source.
Another advantage of a bugzilla is then people could suggest, or
contribute back, feature enhancements. For example, I'd possibly like a
version that gives the "conservative" range instead of the "api
range".
And, will even suggest the reasons for it here ... for public scrutiny.
In WTP at least, I think we use enough non-API (mostly within ourselves,
not too much from base or pre-reqs) that I'd like to do a "mass update"
that used the conservative range. Then component owners (those with more
knowledge of the code) could "open it up" if they know for sure
they do not use any non-API, or otherwise untrustworthy code.
I think the conservative approach is safest, as we get used to this new
versioning, since, as I see it, the cost of making an error is worse if
give to wide a range.
Cost if too wide: clients could end up "broken"
and have to wait for fixed version, get the fixed version, might even have
to uninstall and re-install everything, with fixed version, to get working
again.
Cost of too narrow: an update might have to be provided
that was not technically really necessary, just to bump up a version number
range.
Any comments/suggestions?
Pascal Rapicault <Pascal_Rapicault@xxxxxxxxxx>
Sent by: cross-project-issues-dev-bounces@xxxxxxxxxxx
05/29/2006 02:32 PM
Please respond to
Cross project issues <cross-project-issues-dev@xxxxxxxxxxx> |
|
To
| cross-project-issues-dev@xxxxxxxxxxx
|
cc
|
|
Subject
| [cross-project-issues-dev] Specifying
version requirements |
|
Hi all,
Earlier this year, the eclipse team put together guidelines on how to version
plug-ins: http://www.eclipse.org/equinox/documents/plugin-versioning.html.
These guidelines have been adopted by a lot of the callisto teams, however
most of them (including the SDK team) missed the fact that specifying properly
its version was only part of the problem and that it was equivalently important
to specify ranges when requiring plug-ins.
Therefore, in order to help all of you specify the ranges on all the required
plug-ins on time for callisto, I have written a little plug-in that will
propose values for all the missing ranges. The generated values assume
that you are only using APIs however if you know otherwise you should specify
a tighter range by lowering the value for the upper bound.
Example of an output:
bundle org.eclipse.cdt.ui
<---------
plug-in name which has the problem
org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)"
<--------- proposed value
org.eclipse.ui.views;bundle-version="[3.2.0,4.0.0)"
org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)"
org.eclipse.ui.workbench.texteditor;bundle-version="[3.2.0,4.0.0)"
org.eclipse.ui.editors;bundle-version="[3.2.0,4.0.0)"
org.eclipse.ui;bundle-version="[3.2.0,4.0.0)"
org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)"
org.eclipse.search;bundle-version="[3.2.0,4.0.0)"
org.eclipse.compare;bundle-version="[3.2.0,4.0.0)"
org.eclipse.cdt.core;bundle-version="[3.1.0,4.0.0)"
org.eclipse.ui.console;bundle-version="[3.1.100,4.0.0)"
org.eclipse.core.filebuffers;bundle-version="[3.2.0,4.0.0)"
org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)"
org.eclipse.help;bundle-version="[3.2.0,4.0.0)"
How to use the tool:
- copy the attached jar in your plugins folder
- run the following command
java -jar startup.jar -clean -application org.eclipse.core.runtime.versionchecker.dependencyChecker
If you want to only check the dependency for a limited set of plugins,
you can specify the -filter option and specify a regexp matching the bundle
names. For example "-filter .*cdt.*" will only match the CDT
plug-ins.
Regards,
PaScaL
[attachment "org.eclipse.core.runtime.versionchecker_1.0.0.jar"
deleted by David M Williams/Raleigh/IBM] _______________________________________________
cross-project-issues-dev mailing list
cross-project-issues-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev
_______________________________________________
cross-project-issues-dev mailing list
cross-project-issues-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev
_______________________________________________
cross-project-issues-dev mailing list
cross-project-issues-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev
_______________________________________________
cross-project-issues-dev mailing list
cross-project-issues-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev