I've found a somewhat common situation that Ivy deals with very
poorly.  I have a fix in mind, but it involves extending the ivy.xml
syntax.

The problem occurs when a required revision of a module is deleted,
such as when a developer decides to get rid of his/her local version
of a module and go back to using a shared version.  The problem arises
because I've decided (through painful experience) that local
publications should use different revision numbers from shared
publications.

Suppose there are 3 modules, A, B, and C, and each has a 1.0-local
version in the local repository and a 1.0 version in the shared
repository.  Also, C depends on B with rev=1+, and B depends on A with
rev=1+.  Now, suppose I decide I'm done working on module A, so I
delete the local revision.  Now when I try to resolve module C, it
fails because the published ivy.xml of B depends on rev 1.0-local of
A, which no longer exists.

Ideally, I'd like Ivy to use rev 1.0 of A, which would be allowed by
the ivy.xml file for B, but the *published* ivy.xml for B has the
revision of A changed from 1+ to 1.0-local, so Ivy has no way of
knowing that 1.0 is an acceptable revision.  The change I want to make
in the ivy.xml files is that each dependency in a published ivy.xml
should have *two* revisions--one containing the actual revision in use
at the time of publication, and one copied verbatim from the
hand-written ivy.xml.  During resolution, the actual revision would
always be preferred, and the original pattern would be used as a
backup when the original revision is not available.

--jw

Reply via email to