Ok, I see what you are talking about. Resolving X on its own should yield a Y rev 2.0, however if you do a resolve on A Y rev 1.0 should be pulled instead (because A is 1.0 explicitly).
Yes, I agree with the confusion point on that. Additionally if there were non-backwards compatible changes from Y 1.0 to 2.0, then the build would break at this point. James Davis * QA Engineer II/Software Engineer Applied Technical Systems, Inc. * Information Engineering web: www.atsid.com * e-mail: [email protected] (p) 360.698.7100 x241 * (f) 360.698.7200 -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Archie Cobbs Sent: Thursday, September 23, 2010 8:57 AM To: [email protected] Subject: Re: Please vote: changing the default conflict manager You're right that the dependency from X -> Y says rev="[1.0,)" butt he dependency from A -> Y says rev="1.0". Since we're talking about resolving A, I would expect "1.0" to be the right choice since it satisfies A's constraint, not "2.0", which does not. -Archie On Thu, Sep 23, 2010 at 10:32 AM, James Davis <[email protected]> wrote: > To me, the current default behavior makes sense. The dependency for X is > listed as 1.0 (inclusive) or newer, not 1.0 explicitly. I myself would find > it confusing and surprising if it resolved to 1.0 if 2.0 was available. > > James Davis * QA Engineer II/Software Engineer > Applied Technical Systems, Inc. * Information Engineering > web: www.atsid.com * e-mail: [email protected] > (p) 360.698.7100 x241 * (f) 360.698.7200 > > -----Original Message----- > From: [email protected] [mailto:[email protected]] On Behalf Of > Archie Cobbs > Sent: Thursday, September 23, 2010 8:04 AM > To: Ivy Users > Subject: Please vote: changing the default conflict manager > > In my opinion, the default behavior of ivy is very non-intuitive and > violates POLA < > http://en.wikipedia.org/wiki/Principle_of_least_astonishment> > . > > I'm referring specifically to the default conflict manager being > "latest-revision" instead of "latest-compatible". > > For a concrete example of what this means, suppose we have modules A, X and > Y with these dependencies: > > A: > > <dependency name="X" rev="3.0"/> > <dependency name="Y" rev="1.0"/> > > X: > > <dependency name="Y" rev="[1.0,)"/> > > Y: > > No dependencies > > Now suppose we resolve A. If only version 1.0 of Y exists, then ivy will > choose Y=1.0 and everything is fine. Now suppose a few months later version > 2.0 of Y is released and added to the repository. The next time A is > resolved, ivy will choose version Y=2.0... even though the dependency in > module A specifically states rev="1.0" for Y. > > To me this seems completely insane... at least for being the > *default*behavior of ivy. > > However, this is just my opinion... and fixing it would mean changing ivy's > default behavior in a backward-incompatible manner, by changing the default > conflict manager from "latest-revision" to "latest-compatible". > > So the question is: would you support this change, or would it be too > disruptive (or you just don't like it, etc.)? > > Thanks, > -Archie > > -- > Archie L. Cobbs > -- Archie L. Cobbs
