1) The revison range translation from a manifest's
bundle-version="[2.0,3.0)" means Revision 2.0 inclusive up to Revision
3.0 exclusive. In contrast, the Ivy documentation
<http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html>
shows an example saying: "[1.0,2.0[" matches all versions greater or
equal to 1.0 and lower than 2.0.
So I expect bushel to translate a revision range "[2.0,3.0)" to
"[2.0,3.0[" (notice the trailng ')' and '['), which is not the case.
2) Revision constraints on dependencies.
Some of the Eclipse bundles have a Require-Bundle-header without a
bundle-version directive. These are converted to Ivy dependency
elements which have an empty rev-attribute, for example <dependency
org="jayasoft" name="swtbinding" rev=""/>. (Why does Ivy require the
attribute, but allows it to be empty?).
These empty rev-attributes lead to failures (due to cache evictions)
on an ivy:resolve as explained below.
Lets say
Module A depends on C and specifies an empty revision attribute.
Module B depends on C and specifies a non-empty revision attribute,
lets say 1.4.
The module that is going to be resolved depends an A and B.
Upon resolve, you get an error because ivy's conflict manager does not
know how to handle the conflict between 'C;<no revision>' and 'C;1.4'.
The solution is to change method
OsgiManifestParser.InternalParser.addRequiredBundles(DefaultModuleDescriptor,
Set<RequireBundle>, Set<ModuleRevisionId>) in a way that replaces
epmty revisions (from the Require-Bundle-header) with "latest.[any
status]".
Regards,
Martin