diff options
author | David Kalnischkies <kalnischkies@gmail.com> | 2010-03-17 14:47:05 +0100 |
---|---|---|
committer | David Kalnischkies <kalnischkies@gmail.com> | 2010-03-17 14:47:05 +0100 |
commit | 7e2b56a39618589e77ea8c73611ab0aae39aae7f (patch) | |
tree | 7be6ba77b32b56a72558aa21ea61f42aae9df4a2 | |
parent | b45fb8db8c586fa837a9d1ad0c2247a7e003e51f (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.cc | 28 | ||||
-rw-r--r-- | debian/changelog | 4 |
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: |