On 7/6/2018 12:28 PM, Jon Turney wrote:
On 23/06/2018 16:09, Ken Brown wrote:
I'll try again to reproduce this, but it might be a few days until I
can get to it.
Here's a recipe for reproducing the problem:
1. Create a repository with two packages, A and B, and two versions
1-1 and 2-1 of each. Make A-1-1 require B>=1, and make A-2-1 require
B>=2. The attached script does all this.
2. Run setup on this repo and install A-1-1 and B-1-1.
3. Run setup again. It will offer to update both A and B. Choose to
keep B and press 'Next'.
setup built from the current HEAD correctly reports the dependency
problem. But if I apply my patch, then setup doesn't report the
problem and lets me proceed to update A without updating B.
Thanks very much for this testcase, it helped a lot.
This looks like completely my fault: SolvableVersion::deplist()'s
handling of dependencies with a version relation was completely bogus.
Great. I'm glad the problem turned out to have an easy fix.
So provides() on B was always returning unversioned B, rather than
B-1-1, so the installed B ended up with that as provides, which appears
to be enough to satisfy a depends of B-2-1.
(previously we'd just have the correct, implicit provide made at
libsolv.cpp:472)
Attached patch seems to make it work.
I can confirm that it fixes my testcase.
Ken