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 *part1Pos = part1.data(), *part2Pos = part2.data();
|
||||||
const char *part1End = part1.data() + part1.size(), *part2End = part2.data() + part2.size();
|
const char *part1End = part1.data() + part1.size(), *part2End = part2.data() + part2.size();
|
||||||
for (;;) {
|
for (int i = 0;; ++i) {
|
||||||
// determine current segments
|
// determine current segments
|
||||||
part1End = firstNonAlphanumericCharacter(part1Pos, part1End);
|
part1End = firstNonAlphanumericCharacter(part1Pos, part1End);
|
||||||
part2End = firstNonAlphanumericCharacter(part2Pos, part2End);
|
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
|
// compare segments
|
||||||
const auto segmentComparsion = compareSegments(part1Pos, part1End, part2Pos, part2End);
|
const auto segmentComparsion = compareSegments(part1Pos, part1End, part2Pos, part2End);
|
||||||
if (segmentComparsion != PackageVersionPartComparison::Equal) {
|
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")));
|
CPPUNIT_ASSERT_MESSAGE("real-world ffmpeg example (1)", pkg3.providesDependency(Dependency::fromString("ffmpeg<1:4.3")));
|
||||||
pkg3.version = "1:4.1-2";
|
pkg3.version = "1:4.1-2";
|
||||||
CPPUNIT_ASSERT_MESSAGE("real-world ffmpeg example (2)", !pkg3.providesDependency(Dependency::fromString("ffmpeg>=1:4.1-3")));
|
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()
|
void DataTests::testPackageSearch()
|
||||||
|
|
Loading…
Reference in New Issue