ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alex Radeski" <a...@radeski.net>
Subject OSGi friendly LatestRevisionStrategy patch
Date Sun, 31 Aug 2008 16:16:30 GMT
Hi,

While working on the Bushel project (http://code.google.com/p/bushel/)
to add OSGi bundle support to Ivy, I stumbled across a limitation in
the LatestRevisionStrategy. The current implementation sorts OSGi
major.minor.micro[.qualifier] in what I think is the wrong order.

For example, from the LatestRevisionStrategyTest.testComparator()
test, the natural order of both OSGi and non-OSGi versions is:
    0.2a, 0.2_b, 0.2rc1, 0.2-final, 1.0-dev1, 1.0-dev2, 1.0-alpha1,
1.0-alpha2, 1.0-beta1, 1.0-beta2, 1.0-gamma, 1.0-rc1, 1.0-rc2, 1.0,
1.0.1, 2.0, 2.0.0, 2.0.0.b006, 2.0.0.b012, 2.0.0.xyz

However, the current implementation produces the following, where the
last four elements are in the wrong order:
    0.2a, 0.2_b, 0.2rc1, 0.2-final, 1.0-dev1, 1.0-dev2, 1.0-alpha1,
1.0-alpha2, 1.0-beta1, 1.0-beta2, 1.0-gamma, 1.0-rc1, 1.0-rc2, 1.0,
1.0.1, 2.0, 2.0.0.b006, 2.0.0.b012, 2.0.0.xyz, 2.0.0

This is because it currently gives equal weighting to the [._-+]
characters, instead of giving the '.' character precedence. I have
attached a patch the fixes this limitation, as well as updating the
unit test. I have also fixed a minor bug in the test where it assumed
the versions were shuffled, but they weren't.

The current way to work around this is to override all the
latest-strategies in the ivysettings.xml, which I'd like to avoid if
possible. For example:

<ivysettings>
    <classpath file="${basedir}/lib/bushel-0.6.1.jar" />

    <typedef name="osgi-parser"
classname="com.googlecode.bushel.ivy.OsgiManifestParser" />
    <typedef name="osgi-file"
classname="com.googlecode.bushel.ivy.OsgiFileResolver" />
    <typedef name="osgi-latest"
classname="com.googlecode.bushel.ivy.OsgiLatestStrategy" />

    <settings defaultLatestStrategy="osgi-latest-revision" />
    ...
    <resolvers>
        <osgi-file name="local-rcp-repo" latest="osgi-latest-revision">
        ...
        </osgi-file>
    </resolvers>

    <latest-strategies>
        <osgi-latest name="osgi-latest-revision" />
    </latest-strategies>
</ivysettings>

I hope you can use this patch.

Cheers,
Alex

Mime
View raw message