Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-dev] Fw: [cross-project-issues-dev] Specifying version requirements -- let's see a show of hands ...

Something else we should maybe think about doing... right now we are not
specifying any version constraints.

===========================

Chris Recoskie
Team Lead, IBM CDT Team
IBM Toronto
http://www.eclipse.org/cdt

----- Forwarded by Chris Recoskie/Toronto/IBM on 14/06/2006 08:15 AM -----
                                                                           
             David M Williams                                              
             <david_williams@u                                             
             s.ibm.com>                                                 To 
             Sent by:                  Cross project issues                
             cross-project-iss         <cross-project-issues-dev@eclipse.o 
             ues-dev-bounces@e         rg>                                 
             clipse.org                                                 cc 
                                                                           
                                                                   Subject 
             13/06/2006 06:19          Re: [cross-project-issues-dev]      
             PM                        Specifying version requirements --  
                                       let's see a show of hands ...       
                                                                           
             Please respond to                                             
               Cross project                                               
                  issues                                                   
             <cross-project-is                                             
             sues-dev@eclipse.                                             
                   org>                                                    
                                                                           
                                                                           





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@xxxxxx.                                                 
 com>                                                                   To 
 Sent by:                           cross-project-issues-dev@xxxxxxxxxxx   
 cross-project-issues-dev-                                              cc 
 bounces@xxxxxxxxxxx                Cross project issues                   
                                    <cross-project-issues-dev@xxxxxxxxxxx> 
                                    ,                                      
 06/12/2006 02:07 PM                cross-project-issues-dev-bounces@eclip 
                                    se.org                                 
                                                                   Subject 
     Please respond to              Re: [cross-project-issues-dev]         
    Cross project issues            Specifying version requirements        
  <cross-project-issues-de                                                 
       v@xxxxxxxxxxx>                                                      
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           






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@e                                     To 
 clipse.org                                     Cross project issues       
                                                <cross-project-issues-dev@ 
                                                eclipse.org>               
 06/12/2006 01:11 PM                                                    cc 
                                                                           
                                                                   Subject 
          Please respond to                     Re:                        
        Cross project issues                    [cross-project-issues-dev] 
  <cross-project-issues-dev@eclipse             Specifying version         
                .org>                           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@e                                     To 
 clipse.org                                     Cross project issues       
                                                <cross-project-issues-dev@ 
                                                eclipse.org>               
 05/31/2006 03:25 PM                                                    cc 
                                                                           
                                                                   Subject 
          Please respond to                     Re:                        
        Cross project issues                    [cross-project-issues-dev] 
  <cross-project-issues-dev@eclipse             Specifying version         
                .org>                           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@ec                                    To 
 lipse.org                                        cross-project-issues-dev 
                                                  @eclipse.org             
                                                                        cc 
 05/29/2006 02:32 PM                                                       
                                                                   Subject 
                                                  [cross-project-issues-de 
          Please respond to                       v] Specifying version    
         Cross project issues                     requirements             
  <cross-project-issues-dev@eclipse.                                       
                 org>                                                      
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           









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
_______________________________________________
cross-project-issues-dev mailing list
cross-project-issues-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev



Back to the top