diff options
author | David Kalnischkies <kalnischkies@gmail.com> | 2013-04-01 15:41:02 +0200 |
---|---|---|
committer | David Kalnischkies <kalnischkies@gmail.com> | 2013-04-01 15:41:02 +0200 |
commit | b8a884c0c7d5f670179a82984289140a9f432729 (patch) | |
tree | b13a8ede63005d5bbd7be6e45a9a734c4c6a2403 | |
parent | 40befb065d110c7b3a7b3d37759b6888522817b2 (diff) | |
download | apt-b8a884c0c7d5f670179a82984289140a9f432729.tar.gz |
equal comparisions are used mostly in same-source relations,
so use this to try to reuse some version strings
-rw-r--r-- | apt-pkg/pkgcachegen.cc | 20 | ||||
-rw-r--r-- | debian/changelog | 2 |
2 files changed, 16 insertions, 6 deletions
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index 01aaf616..b11ddcf9 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -864,12 +864,20 @@ bool pkgCacheGenerator::NewDepends(pkgCache::PkgIterator &Pkg, map_ptrloc index = 0; if (Version.empty() == false) { - void const * const oldMap = Map.Data(); - index = WriteStringInMap(Version); - if (unlikely(index == 0)) - return false; - if (oldMap != Map.Data()) - OldDepLast += (map_ptrloc*) Map.Data() - (map_ptrloc*) oldMap; + int const CmpOp = Op & 0x0F; + // =-deps are used (79:1) for lockstep on same-source packages (e.g. data-packages) + if (CmpOp == pkgCache::Dep::Equals && strcmp(Version.c_str(), Ver.VerStr()) == 0) + index = Ver->VerStr; + + if (index == 0) + { + void const * const oldMap = Map.Data(); + index = WriteStringInMap(Version); + if (unlikely(index == 0)) + return false; + if (oldMap != Map.Data()) + OldDepLast += (map_ptrloc*) Map.Data() - (map_ptrloc*) oldMap; + } } return NewDepends(Pkg, Ver, index, Op, Type, OldDepLast); } diff --git a/debian/changelog b/debian/changelog index b0e66912..d9183db9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,8 @@ apt (0.9.7.8~exp2+nmu1) UNRELEASED; urgency=low - handle language tags for descriptions are unique strings to be shared - factor version string creation out of NewDepends, so we can easily reuse version strings e.g. for implicit multi-arch dependencies + - equal comparisions are used mostly in same-source relations, + so use this to try to reuse some version strings * apt-pkg/deb/debversion.cc: - add a string-equal shortcut for equal version comparisions |