summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2010-03-17 14:47:05 +0100
committerDavid Kalnischkies <kalnischkies@gmail.com>2010-03-17 14:47:05 +0100
commit7e2b56a39618589e77ea8c73611ab0aae39aae7f (patch)
tree7be6ba77b32b56a72558aa21ea61f42aae9df4a2
parentb45fb8db8c586fa837a9d1ad0c2247a7e003e51f (diff)
* apt-pkg/pkgcachegen.cc:
- merge versions correctly even if multiple different versions with the same version number are available. Thanks to Magnus Holmgren for the patch! (Closes: #351056)
-rw-r--r--apt-pkg/pkgcachegen.cc28
-rw-r--r--debian/changelog4
2 files changed, 15 insertions, 17 deletions
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc
index 3eeb18cae..75a0e34f0 100644
--- a/apt-pkg/pkgcachegen.cc
+++ b/apt-pkg/pkgcachegen.cc
@@ -175,17 +175,22 @@ bool pkgCacheGenerator::MergeList(ListParser &List,
pkgCache::VerIterator Ver = Pkg.VersionList();
map_ptrloc *LastVer = &Pkg->VersionList;
int Res = 1;
+ unsigned long const Hash = List.VersionHash();
for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++)
{
Res = Cache.VS->CmpVersion(Version,Ver.VerStr());
- if (Res >= 0)
+ // Version is higher as current version - insert here
+ if (Res > 0)
break;
+ // Versionstrings are equal - is hash also equal?
+ if (Res == 0 && Ver->Hash == Hash)
+ break;
+ // proceed with the next till we have either the right
+ // or we found another version (which will be lower)
}
-
- /* We already have a version for this item, record that we
- saw it */
- unsigned long Hash = List.VersionHash();
- if (Res == 0 && Ver->Hash == Hash)
+
+ /* We already have a version for this item, record that we saw it */
+ if (Res == 0)
{
if (List.UsePackage(Pkg,Ver) == false)
return _error->Error(_("Error occurred while processing %s (UsePackage2)"),
@@ -204,17 +209,6 @@ bool pkgCacheGenerator::MergeList(ListParser &List,
}
continue;
- }
-
- // Skip to the end of the same version set.
- if (Res == 0)
- {
- for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++)
- {
- Res = Cache.VS->CmpVersion(Version,Ver.VerStr());
- if (Res != 0)
- break;
- }
}
// Add a new version
diff --git a/debian/changelog b/debian/changelog
index ddbf19214..bdafa70e8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -35,6 +35,10 @@ apt (0.7.26) UNRELEASED; urgency=low
* doc/makefile, doc/*:
- generate subdirectories for building the manpages in on the fly
depending on the po files we have.
+ * apt-pkg/pkgcachegen.cc:
+ - merge versions correctly even if multiple different versions
+ with the same version number are available.
+ Thanks to Magnus Holmgren for the patch! (Closes: #351056)
[ Julian Andres Klode ]
* cmdline/apt-mark: