Fix version comparison when epoch is only present in one version
This commit is contained in:
parent
987db81b69
commit
4fc3bf0928
|
@ -211,10 +211,21 @@ PackageVersionPartComparison PackageVersion::compareParts(const string &part1, c
|
|||
{
|
||||
const char *part1Pos = part1.data(), *part2Pos = part2.data();
|
||||
const char *part1End = part1.data() + part1.size(), *part2End = part2.data() + part2.size();
|
||||
for (;;) {
|
||||
for (int i = 0;; ++i) {
|
||||
// determine current segments
|
||||
part1End = firstNonAlphanumericCharacter(part1Pos, part1End);
|
||||
part2End = firstNonAlphanumericCharacter(part2Pos, part2End);
|
||||
// check whether one of the segments is the epoch
|
||||
if (!i) {
|
||||
const auto part1IsEpoch = *part1End == ':';
|
||||
const auto part2IsEpoch = *part2End == ':';
|
||||
// if one one has an epoch, consider the one with epoch newer
|
||||
if (part1IsEpoch && !part2IsEpoch) {
|
||||
return PackageVersionPartComparison::Newer;
|
||||
} else if (part2IsEpoch && !part1IsEpoch) {
|
||||
return PackageVersionPartComparison::Older;
|
||||
}
|
||||
}
|
||||
// compare segments
|
||||
const auto segmentComparsion = compareSegments(part1Pos, part1End, part2Pos, part2End);
|
||||
if (segmentComparsion != PackageVersionPartComparison::Equal) {
|
||||
|
|
|
@ -206,6 +206,16 @@ void DataTests::testDependencyMatching()
|
|||
CPPUNIT_ASSERT_MESSAGE("real-world ffmpeg example (1)", pkg3.providesDependency(Dependency::fromString("ffmpeg<1:4.3")));
|
||||
pkg3.version = "1:4.1-2";
|
||||
CPPUNIT_ASSERT_MESSAGE("real-world ffmpeg example (2)", !pkg3.providesDependency(Dependency::fromString("ffmpeg>=1:4.1-3")));
|
||||
|
||||
pkg3.name = "python-jinja";
|
||||
pkg3.version = "1:3.0.3-1";
|
||||
CPPUNIT_ASSERT_MESSAGE("real-world python-jinja example (epoch equal)", pkg3.providesDependency(Dependency::fromString("python-jinja>=1:2.10.3")));
|
||||
CPPUNIT_ASSERT_MESSAGE("real-world python-jinja example (epoch absend)", pkg3.providesDependency(Dependency::fromString("python-jinja>=2.10.3")));
|
||||
CPPUNIT_ASSERT_MESSAGE("real-world python-jinja example (epoch higher)", !pkg3.providesDependency(Dependency::fromString("python-jinja>=2:2.10.3")));
|
||||
pkg3.version = "3.0.3-1";
|
||||
CPPUNIT_ASSERT_MESSAGE("real-world python-jinja example (epoch absend in package)", !pkg3.providesDependency(Dependency::fromString("python-jinja>=1:2.10.3")));
|
||||
pkg3.version = "3:3.0.3-1";
|
||||
CPPUNIT_ASSERT_MESSAGE("real-world python-jinja example (epoch higher in package)", pkg3.providesDependency(Dependency::fromString("python-jinja>=2:2.10.3")));
|
||||
}
|
||||
|
||||
void DataTests::testPackageSearch()
|
||||
|
|
Loading…
Reference in New Issue