From eddc9dd092138fee6e71f92ba41dc21918a03f73 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 6 Apr 2011 13:27:52 +0200 Subject: document the pkg:any specialcasing in FindPkg as well to make it clear that it is a needed "hack" to support multi-arch in the least breaking way --- apt-pkg/pkgcache.cc | 3 +++ 1 file changed, 3 insertions(+) (limited to 'apt-pkg') diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index c6326abf1..c16005e38 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -217,6 +217,9 @@ pkgCache::PkgIterator pkgCache::FindPkg(const string &Name) { if (found == string::npos) return FindPkg(Name, "native"); string const Arch = Name.substr(found+1); + /* Beware: This is specialcased to handle pkg:any in dependencies as + these are linked to virtual pkg:any named packages with all archs. + If you want any arch from a given pkg, use FindPkg(pkg,arch) */ if (Arch == "any") return FindPkg(Name, "any"); return FindPkg(Name.substr(0, found), Arch); -- cgit v1.2.3-70-g09d2 From 959470da73e7dc325321bb5024f1fd6d24bd9e9b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 6 Apr 2011 16:47:58 +0200 Subject: * apt-pkg/pkgcache.cc: - use the native Architecture stored in the cache header instead of loading it from configuration as suggested by Julian Andres Klode --- apt-pkg/pkgcache.cc | 11 ++++++----- apt-pkg/pkgcache.h | 6 ++++++ apt-pkg/pkgcachegen.cc | 5 +++-- debian/changelog | 8 ++++++++ 4 files changed, 23 insertions(+), 7 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index c16005e38..b63900adb 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -231,7 +231,7 @@ pkgCache::PkgIterator pkgCache::FindPkg(const string &Name) { pkgCache::PkgIterator pkgCache::FindPkg(const string &Name, string const &Arch) { if (MultiArchCache() == false) { if (Arch == "native" || Arch == "all" || Arch == "any" || - Arch == _config->Find("APT::Architecture")) + Arch == NativeArch()) return SingleArchFindPkg(Name); else return PkgIterator(*this,0); @@ -325,15 +325,15 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const { if (Arch == "any") return PkgIterator(*Owner, Owner->PkgP + S->FirstPackage); - static string const myArch = _config->Find("APT::Architecture"); + char const* const myArch = Owner->NativeArch(); /* Most of the time the package for our native architecture is the one we add at first to the cache, but this would be the last one we check, so we do it now. */ if (Arch == "native" || Arch == myArch || Arch == "all") { - Arch = myArch; pkgCache::Package *Pkg = Owner->PkgP + S->LastPackage; - if (stringcasecmp(Arch, Owner->StrP + Pkg->Arch) == 0) + if (strcasecmp(myArch, Owner->StrP + Pkg->Arch) == 0) return PkgIterator(*Owner, Pkg); + Arch = myArch; } /* Iterate over the list to find the matching arch @@ -506,7 +506,8 @@ std::string pkgCache::PkgIterator::FullName(bool const &Pretty) const { string fullname = Name(); if (Pretty == false || - (strcmp(Arch(), "all") != 0 && _config->Find("APT::Architecture") != Arch())) + (strcmp(Arch(), "all") != 0 && + strcmp(Owner->NativeArch(), Arch()) != 0)) return fullname.append(":").append(Arch()); return fullname; } diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index d654a2976..1b1743724 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -215,6 +215,7 @@ class pkgCache /*{{{*/ private: bool MultiArchEnabled; PkgIterator SingleArchFindPkg(const string &Name); + inline char const * const NativeArch() const; }; /*}}}*/ // Header structure /*{{{*/ @@ -649,6 +650,11 @@ struct pkgCache::StringItem map_ptrloc NextItem; // StringItem }; /*}}}*/ + + +inline char const * const pkgCache::NativeArch() const + { return StrP + HeaderP->Architecture; }; + #include inline pkgCache::GrpIterator pkgCache::GrpBegin() diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index b0ee04554..9820fde81 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -479,7 +479,8 @@ bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,const string &Name // Set the name, arch and the ID Pkg->Name = Grp->Name; Pkg->Group = Grp.Index(); - map_ptrloc const idxArch = WriteUniqString((Arch == "all") ? _config->Find("APT::Architecture") : Arch.c_str()); + // all is mapped to the native architecture + map_ptrloc const idxArch = (Arch == "all") ? Cache.HeaderP->Architecture : WriteUniqString(Arch.c_str()); if (unlikely(idxArch == 0)) return false; Pkg->Arch = idxArch; @@ -783,7 +784,7 @@ bool pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator &Ver, // We do not add self referencing provides if (Ver.ParentPkg().Name() == PkgName && (PkgArch == Ver.ParentPkg().Arch() || - (PkgArch == "all" && _config->Find("APT::Architecture") == Ver.ParentPkg().Arch()))) + (PkgArch == "all" && strcmp((Cache.StrP + Cache.HeaderP->Architecture), Ver.ParentPkg().Arch()) == 0))) return true; // Get a structure diff --git a/debian/changelog b/debian/changelog index 03bbe86d4..f3a867a9e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +apt (0.8.13.3) unstable; urgency=low + + * apt-pkg/pkgcache.cc: + - use the native Architecture stored in the cache header instead of + loading it from configuration as suggested by Julian Andres Klode + + -- David Kalnischkies Wed, 06 Apr 2011 16:43:08 +0200 + apt (0.8.13.2) unstable; urgency=low [ David Kalnischkies ] -- cgit v1.2.3-70-g09d2 From 8220213e48857172d8ebbf3d4914667e372a8930 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Thu, 7 Apr 2011 11:52:23 +0200 Subject: * apt-pkg/indexcopy.cc: - Use RealFileExists() instead of FileExists(), allows amongst other things a directory named Sources to exist on a CD-ROM (LP: #750694). --- apt-pkg/indexcopy.cc | 10 +++++----- debian/changelog | 8 ++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc index c2ee1c347..064fb007c 100644 --- a/apt-pkg/indexcopy.cc +++ b/apt-pkg/indexcopy.cc @@ -75,7 +75,7 @@ bool IndexCopy::CopyPackages(string CDROM,string Name,vector &List, // Open the package file FileFd Pkg; - if (FileExists(*I + GetFileName()) == true) + if (RealFileExists(*I + GetFileName()) == true) { Pkg.Open(*I + GetFileName(),FileFd::ReadOnly); FileSize = Pkg.Size(); @@ -532,7 +532,7 @@ bool SigVerify::Verify(string prefix, string file, indexRecords *MetaIndex) // we skip non-existing files in the verifcation to support a cdrom // with no Packages file (just a Package.gz), see LP: #255545 // (non-existing files are not considered a error) - if(!FileExists(prefix+file)) + if(!RealFileExists(prefix+file)) { _error->Warning(_("Skipping nonexistent file %s"), string(prefix+file).c_str()); return true; @@ -601,7 +601,7 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector &SigList, string const release = *I+"Release"; // a Release.gpg without a Release should never happen - if(FileExists(release) == false) + if(RealFileExists(release) == false) { delete MetaIndex; continue; @@ -681,7 +681,7 @@ bool SigVerify::RunGPGV(std::string const &File, std::string const &FileGPG, std::vector keyrings; if (DirectoryExists(trustedPath)) keyrings = GetListOfFilesInDir(trustedPath, "gpg", false, true); - if (FileExists(trustedFile) == true) + if (RealFileExists(trustedFile) == true) keyrings.push_back(trustedFile); std::vector Args; @@ -788,7 +788,7 @@ bool TranslationsCopy::CopyTranslations(string CDROM,string Name, /*{{{*/ // Open the package file FileFd Pkg; - if (FileExists(*I) == true) + if (RealFileExists(*I) == true) { Pkg.Open(*I,FileFd::ReadOnly); FileSize = Pkg.Size(); diff --git a/debian/changelog b/debian/changelog index 03bbe86d4..34e34c3a6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +apt (0.8.13.3) UNRELEASED; urgency=low + + * apt-pkg/indexcopy.cc: + - Use RealFileExists() instead of FileExists(), allows amongst other + things a directory named Sources to exist on a CD-ROM (LP: #750694). + + -- Julian Andres Klode Thu, 07 Apr 2011 11:48:46 +0200 + apt (0.8.13.2) unstable; urgency=low [ David Kalnischkies ] -- cgit v1.2.3-70-g09d2 From 7ea7ac9efa88b73fc6ff30483a928ef49b95c015 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Fri, 8 Apr 2011 13:57:04 +0200 Subject: * apt-pkg/acquire-item.cc: - Use Release files even if they cannot be verified (LP: #704595) --- apt-pkg/acquire-item.cc | 20 ++++++++++++++++++++ debian/changelog | 2 ++ 2 files changed, 22 insertions(+) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 39b9feff2..1d651ba69 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -1502,6 +1502,26 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) ReportMirrorFailure("GPGFailure"); } + /* Always move the meta index, even if gpgv failed. This ensures + * that PackageFile objects are correctly filled in */ + { + string FinalFile = _config->FindDir("Dir::State::lists"); + FinalFile += URItoFileName(RealURI); + /* InRelease files become Release files, otherwise + * they would be considered as trusted later on */ + if (SigFile == DestFile) { + RealURI = RealURI.replace(RealURI.rfind("InRelease"), 9, + "Release"); + FinalFile = FinalFile.replace(FinalFile.rfind("InRelease"), 9, + "Release"); + SigFile = FinalFile; + } + Rename(DestFile,FinalFile); + chmod(FinalFile.c_str(),0644); + + DestFile = FinalFile; + } + // No Release file was present, or verification failed, so fall // back to queueing Packages files without verification QueueIndexes(false); diff --git a/debian/changelog b/debian/changelog index 34e34c3a6..486a4de8c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,8 @@ apt (0.8.13.3) UNRELEASED; urgency=low * apt-pkg/indexcopy.cc: - Use RealFileExists() instead of FileExists(), allows amongst other things a directory named Sources to exist on a CD-ROM (LP: #750694). + * apt-pkg/acquire-item.cc: + - Use Release files even if they cannot be verified (LP: #704595) -- Julian Andres Klode Thu, 07 Apr 2011 11:48:46 +0200 -- cgit v1.2.3-70-g09d2 From 90cf90b254e5dbe8194dc93fa8f57f891b3ea518 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Thu, 14 Apr 2011 12:28:00 +0200 Subject: * apt-pkg/deb/deblistparser.cc: - Handle no space before "[" in build-dependencies (LP: #72344) --- apt-pkg/deb/deblistparser.cc | 2 +- debian/changelog | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index 4be626741..b59ae8896 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -487,7 +487,7 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop, // Parse off the package name const char *I = Start; for (;I != Stop && isspace(*I) == 0 && *I != '(' && *I != ')' && - *I != ',' && *I != '|'; I++); + *I != ',' && *I != '|' && *I != '[' && *I != ']'; I++); // Malformed, no '(' if (I != Stop && *I == ')') diff --git a/debian/changelog b/debian/changelog index d5bbc20ed..15dd0c648 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,8 @@ apt (0.8.13.3) UNRELEASED; urgency=low - Use Release files even if they cannot be verified (LP: #704595) * cmdline/apt-get.cc: - Do not install recommends for build-dep (Closes: #454479) (LP: #245273) + * apt-pkg/deb/deblistparser.cc: + - Handle no space before "[" in build-dependencies (LP: #72344) [ Michael Vogt ] * mirror method: -- cgit v1.2.3-70-g09d2 From 1a4c9766e0b31795b5d9869c6a98c1bba8380faa Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Fri, 15 Apr 2011 12:52:45 +0200 Subject: * apt-pkg/policy.cc: - Allow pinning by glob() expressions, and regular expressions surrounded by slashes (the "/" character). --- apt-pkg/policy.cc | 15 +++++++++++++++ debian/changelog | 5 ++++- doc/apt_preferences.5.xml | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index 94c7fd4af..3d6ec1cdc 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -216,6 +216,21 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name, P->Data = Data; return; } + + // Allow pinning by wildcards + // TODO: Maybe we should always prefer specific pins over non- + // specific ones. + if (Name.find("*") != string::npos || Name.find("[") != string::npos + || Name.find("?") != string::npos || Name[0] == '/') { + pkgVersionMatch match(Data, Type); + for (pkgCache::PkgIterator P = Cache->PkgBegin(); + P != Cache->PkgEnd(); P++) { + if (match.ExpressionMatches(Name, P.Name())) { + CreatePin(Type, P.Name(), Data, Priority); + } + } + return; + } // Get a spot to put the pin pkgCache::GrpIterator Grp = Cache->FindGrp(Name); diff --git a/debian/changelog b/debian/changelog index 15dd0c648..79bc4dea5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -apt (0.8.13.3) UNRELEASED; urgency=low +apt (0.8.14) UNRELEASED; urgency=low [ Julian Andres Klode ] * apt-pkg/indexcopy.cc: @@ -10,6 +10,9 @@ apt (0.8.13.3) UNRELEASED; urgency=low - Do not install recommends for build-dep (Closes: #454479) (LP: #245273) * apt-pkg/deb/deblistparser.cc: - Handle no space before "[" in build-dependencies (LP: #72344) + * apt-pkg/policy.cc: + - Allow pinning by glob() expressions, and regular expressions + surrounded by slashes (the "/" character). [ Michael Vogt ] * mirror method: diff --git a/doc/apt_preferences.5.xml b/doc/apt_preferences.5.xml index 219da7cd1..55504f3e5 100644 --- a/doc/apt_preferences.5.xml +++ b/doc/apt_preferences.5.xml @@ -259,6 +259,49 @@ Pin-Priority: 500 +Regular expressions and glob() syntax + +APT also supports pinning by glob() expressions and regular +expressions surrounded by /. For example, the following +example assigns the priority 500 to all packages from +experimental where the name starts with gnome (as a glob()-like +expression or contains the word kde (as a POSIX extended regular +expression surrounded by slashes). + + + +Package: gnome* /kde/ +Pin: release n=experimental +Pin-Priority: 500 + + + +The rule for those expressions is that they can occur anywhere +where a string can occur. Those, the following pin assigns the +priority 990 to all packages from a release starting with karmic. + + + +Package: * +Pin: release n=karmic* +Pin-Priority: 990 + + +If a regular expression occurs in a Package field, +the behavior is the same as if this regular expression were replaced +with a list of all package names it matches. It is undecided whether +this will change in the future, thus you should always list wild-card +pins first, so later specific pins override it. + +The pattern "*" in a Package field is not considered +a glob() expression in itself. + + + + + + + How APT Interprets Priorities -- cgit v1.2.3-70-g09d2 From 949e033cb7c741b9eed459c0e93a89a92acb168d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 16 Apr 2011 00:06:34 +0200 Subject: * apt-pkg/depcache.cc: - really include 'rc' packages in the delete count by fixing a typo which exists since 1999 in the source… (LP: #761175) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apt-pkg/depcache.cc | 4 +-- debian/changelog | 9 +++++ .../test-ubuntu-bug-761175-remove-purge | 38 ++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100755 test/integration/test-ubuntu-bug-761175-remove-purge (limited to 'apt-pkg') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 07803d7bf..dc4a65bc1 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -549,8 +549,8 @@ void pkgDepCache::AddStates(const PkgIterator &Pkg,int Add) // Not installed if (Pkg->CurrentVer == 0) { - if (State.Mode == ModeDelete && - (State.iFlags | Purge) == Purge && Pkg.Purge() == false) + if (State.Mode == ModeDelete && + (State.iFlags & Purge) == Purge && Pkg.Purge() == false) iDelCount += Add; if (State.Mode == ModeInstall) diff --git a/debian/changelog b/debian/changelog index c2e2dc70d..216b44d30 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +apt (0.8.14.1) unstable; urgency=low + + [ David Kalnischkies ] + * apt-pkg/depcache.cc: + - really include 'rc' packages in the delete count by fixing a + typo which exists since 1999 in the source… (LP: #761175) + + -- David Kalnischkies Fri, 15 Apr 2011 23:59:36 +0200 + apt (0.8.14) unstable; urgency=low [ Julian Andres Klode ] diff --git a/test/integration/test-ubuntu-bug-761175-remove-purge b/test/integration/test-ubuntu-bug-761175-remove-purge new file mode 100755 index 000000000..93b67fc02 --- /dev/null +++ b/test/integration/test-ubuntu-bug-761175-remove-purge @@ -0,0 +1,38 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' + +setupsimplenativepackage 'compiz-core' 'i386' '1.0' 'unstable' +BUILDDIR='incoming/compiz-core-1.0' +mkdir -p ${BUILDDIR}/debian/compiz-core/etc +echo 'foo=bar;' > ${BUILDDIR}/compiz.conf +echo 'compiz.conf /etc/compiz.conf' >> ${BUILDDIR}/debian/install +buildpackage "$BUILDDIR" 'unstable' 'main' +rm -rf "$BUILDDIR" + +setupaptarchive + + +testdpkgnotinstalled compiz-core +msgtest 'Install package' 'compiz-core' +aptget install compiz-core -qq 2>&1 >/dev/null && msgpass || msgfail +testdpkginstalled compiz-core + +msgtest 'Remove package' 'compiz-core' +aptget remove compiz-core -y -qq 2>&1 >/dev/null && msgpass || msgfail +testdpkgnotinstalled compiz-core + +msgtest 'Check that conffiles are still around for' 'compiz-core' +dpkg -l compiz-core | grep '^rc' 2>&1 >/dev/null && msgpass || msgfail + +testequal 'Reading package lists... +Building dependency tree... +Reading state information... +The following packages will be REMOVED: + compiz-core* +0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. +Purg compiz-core' aptget purge compiz-core -s -- cgit v1.2.3-70-g09d2 From 6070a3461841d4398d731fcb33792d55779111f1 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 16 Apr 2011 01:10:09 +0200 Subject: fix a bunch of cppcheck warnings/errors based on a patch by Niels Thykier, thanks! (Closes: #622805) --- apt-inst/dirstream.cc | 14 +++++--- apt-pkg/cdrom.cc | 88 +++++++++++++++++++++++++++------------------ apt-pkg/contrib/cdromutl.cc | 16 +++++---- apt-pkg/contrib/error.cc | 2 ++ cmdline/apt-cache.cc | 3 ++ cmdline/apt-get.cc | 23 +++++++++--- debian/changelog | 4 ++- test/testextract.cc | 7 ++-- 8 files changed, 105 insertions(+), 52 deletions(-) (limited to 'apt-pkg') diff --git a/apt-inst/dirstream.cc b/apt-inst/dirstream.cc index 586bbf739..9b6a56848 100644 --- a/apt-inst/dirstream.cc +++ b/apt-inst/dirstream.cc @@ -43,11 +43,17 @@ bool pkgDirStream::DoItem(Item &Itm,int &Fd) // fchmod deals with umask and fchown sets the ownership if (fchmod(iFd,Itm.Mode) != 0) - return _error->Errno("fchmod",_("Failed to write file %s"), - Itm.Name); + { + _error->Errno("fchmod",_("Failed to write file %s"), Itm.Name); + close(iFd); + return false; + } if (fchown(iFd,Itm.UID,Itm.GID) != 0 && errno != EPERM) - return _error->Errno("fchown",_("Failed to write file %s"), - Itm.Name); + { + return _error->Errno("fchown",_("Failed to write file %s"), Itm.Name); + close(iFd); + return false; + } Fd = iFd; return true; } diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index 36a1d7f12..2a914c665 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -155,7 +155,11 @@ bool pkgCdrom::FindPackages(string CD, break; if (chdir(CD.c_str()) != 0) - return _error->Errno("chdir","Unable to change to %s",CD.c_str()); + { + _error->Errno("chdir","Unable to change to %s", CD.c_str()); + closedir(D); + return false; + } }; closedir(D); @@ -257,8 +261,10 @@ bool pkgCdrom::DropRepeats(vector &List,const char *Name) Inodes[I] = Buf.st_ino; } - if (_error->PendingError() == true) + if (_error->PendingError() == true) { + delete[] Inodes; return false; + } // Look for dups for (unsigned int I = 0; I != List.size(); I++) @@ -513,7 +519,8 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log) /*{{{*/ if (CDROM[0] == '.') CDROM= SafeGetCWD() + '/' + CDROM; - if(log) { + if (log != NULL) + { msg.str(""); ioprintf(msg, _("Using CD-ROM mount point %s\nMounting CD-ROM\n"), CDROM.c_str()); @@ -523,7 +530,7 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log) /*{{{*/ return _error->Error("Failed to mount the cdrom."); // Hash the CD to get an ID - if(log) + if (log != NULL) log->Update(_("Identifying.. ")); @@ -533,10 +540,12 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log) /*{{{*/ return false; } - msg.str(""); - ioprintf(msg, "[%s]\n",ident.c_str()); - log->Update(msg.str()); - + if (log != NULL) + { + msg.str(""); + ioprintf(msg, "[%s]\n",ident.c_str()); + log->Update(msg.str()); + } // Read the database Configuration Database; @@ -547,7 +556,8 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log) /*{{{*/ return _error->Error("Unable to read the cdrom database %s", DFile.c_str()); } - if(log) { + if (log != NULL) + { msg.str(""); ioprintf(msg, _("Stored label: %s\n"), Database.Find("CD::"+ident).c_str()); @@ -555,8 +565,10 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log) /*{{{*/ } // Unmount and finish - if (_config->FindB("APT::CDROM::NoMount",false) == false) { - log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST); + if (_config->FindB("APT::CDROM::NoMount",false) == false) + { + if (log != NULL) + log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST); UnmountCdrom(CDROM); } @@ -572,7 +584,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ if (CDROM[0] == '.') CDROM= SafeGetCWD() + '/' + CDROM; - if(log) { + if(log != NULL) + { log->SetTotal(STEP_LAST); msg.str(""); ioprintf(msg, _("Using CD-ROM mount point %s\n"), CDROM.c_str()); @@ -592,11 +605,12 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ // Unmount the CD and get the user to put in the one they want if (_config->FindB("APT::CDROM::NoMount",false) == false) { - if(log) + if(log != NULL) log->Update(_("Unmounting CD-ROM\n"), STEP_UNMOUNT); UnmountCdrom(CDROM); - if(log) { + if(log != NULL) + { log->Update(_("Waiting for disc...\n"), STEP_WAIT); if(!log->ChangeCdrom()) { // user aborted @@ -605,26 +619,29 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ } // Mount the new CDROM - log->Update(_("Mounting CD-ROM...\n"), STEP_MOUNT); + if(log != NULL) + log->Update(_("Mounting CD-ROM...\n"), STEP_MOUNT); + if (MountCdrom(CDROM) == false) return _error->Error("Failed to mount the cdrom."); } // Hash the CD to get an ID - if(log) + if(log != NULL) log->Update(_("Identifying.. "), STEP_IDENT); string ID; if (IdentCdrom(CDROM,ID) == false) { - log->Update("\n"); + if (log != NULL) + log->Update("\n"); return false; } - if(log) + if(log != NULL) + { log->Update("["+ID+"]\n"); - - if(log) log->Update(_("Scanning disc for index files..\n"),STEP_SCAN); - + } + // Get the CD structure vector List; vector SourceList; @@ -634,7 +651,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ string InfoDir; if (FindPackages(CDROM,List,SourceList, SigList,TransList,InfoDir,log) == false) { - log->Update("\n"); + if (log != NULL) + log->Update("\n"); return false; } @@ -661,7 +679,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ DropRepeats(SourceList,"Sources"); DropRepeats(SigList,"Release.gpg"); DropRepeats(TransList,""); - if(log) { + if(log != NULL) { msg.str(""); ioprintf(msg, _("Found %zu package indexes, %zu source indexes, " "%zu translation indexes and %zu signatures\n"), @@ -698,7 +716,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ if (*J == '"' || *J == ']' || *J == '[') *J = '_'; - if(log) { + if(log != NULL) + { msg.str(""); ioprintf(msg, _("Found label '%s'\n"), Name.c_str()); log->Update(msg.str()); @@ -710,7 +729,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ if (_config->FindB("APT::CDROM::Rename",false) == true || Name.empty() == true) { - if(!log) + if(log == NULL) { if (_config->FindB("APT::CDROM::NoMount",false) == false) UnmountCdrom(CDROM); @@ -743,13 +762,13 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ *J = '_'; Database.Set("CD::" + ID,Name); - if(log) { + if(log != NULL) + { msg.str(""); ioprintf(msg, _("This disc is called: \n'%s'\n"), Name.c_str()); log->Update(msg.str()); + log->Update(_("Copying package lists..."), STEP_COPY); } - - log->Update(_("Copying package lists..."), STEP_COPY); // take care of the signatures and copy them if they are ok // (we do this before PackageCopy as it modifies "List" and "SourceList") SigVerify SignVerify; @@ -774,16 +793,15 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ if (WriteDatabase(Database) == false) return false; - if(log) { + if(log != NULL) log->Update(_("Writing new source list\n"), STEP_WRITE); - } if (WriteSourceList(Name,List,false) == false || WriteSourceList(Name,SourceList,true) == false) return false; } // Print the sourcelist entries - if(log) + if(log != NULL) log->Update(_("Source list entries for this disc are:\n")); for (vector::iterator I = List.begin(); I != List.end(); I++) @@ -796,7 +814,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ return _error->Error("Internal error"); } - if(log) { + if(log != NULL) + { msg.str(""); msg << "deb cdrom:[" << Name << "]/" << string(*I,0,Space) << " " << string(*I,Space+1) << endl; @@ -814,7 +833,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ return _error->Error("Internal error"); } - if(log) { + if(log != NULL) { msg.str(""); msg << "deb-src cdrom:[" << Name << "]/" << string(*I,0,Space) << " " << string(*I,Space+1) << endl; @@ -824,7 +843,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ // Unmount and finish if (_config->FindB("APT::CDROM::NoMount",false) == false) { - log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST); + if (log != NULL) + log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST); UnmountCdrom(CDROM); } diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc index 83c324f54..821e6d688 100644 --- a/apt-pkg/contrib/cdromutl.cc +++ b/apt-pkg/contrib/cdromutl.cc @@ -20,7 +20,6 @@ #include #include -#include #include #include #include @@ -206,8 +205,11 @@ bool IdentCdrom(string CD,string &Res,unsigned int Version) Hash.Add(Dir->d_name); }; - if (chdir(StartDir.c_str()) != 0) - return _error->Errno("chdir",_("Unable to change to %s"),StartDir.c_str()); + if (chdir(StartDir.c_str()) != 0) { + _error->Errno("chdir",_("Unable to change to %s"),StartDir.c_str()); + closedir(D); + return false; + } closedir(D); // Some stats from the fsys @@ -236,7 +238,7 @@ bool IdentCdrom(string CD,string &Res,unsigned int Version) } /*}}}*/ -// FindMountPointForDevice - Find mountpoint for the given device /*{{{*/ +// FindMountPointForDevice - Find mountpoint for the given device /*{{{*/ string FindMountPointForDevice(const char *devnode) { char buf[255]; @@ -254,7 +256,10 @@ string FindMountPointForDevice(const char *devnode) while ( fgets(buf, sizeof(buf), f) != NULL) { if (strncmp(buf, devnode, strlen(devnode)) == 0) { if(TokSplitString(' ', buf, out, 10)) + { + fclose(f); return string(out[1]); + } } } fclose(f); @@ -263,5 +268,4 @@ string FindMountPointForDevice(const char *devnode) return string(); } - - + /*}}}*/ diff --git a/apt-pkg/contrib/error.cc b/apt-pkg/contrib/error.cc index fe50e606b..18810d2a4 100644 --- a/apt-pkg/contrib/error.cc +++ b/apt-pkg/contrib/error.cc @@ -107,6 +107,7 @@ bool GlobalError::InsertErrno(MsgType type, const char* Function, msgSize = n + 1; else msgSize *= 2; + free(S); return true; } @@ -160,6 +161,7 @@ bool GlobalError::Insert(MsgType type, const char* Description, msgSize = n + 1; else msgSize *= 2; + free(S); return true; } diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index 01e0d22e0..34f8a1a75 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -1115,6 +1115,9 @@ bool Dotty(CommandLine &CmdL) } printf("}\n"); + delete[] Show; + delete[] Flags; + delete[] ShapeMap; return true; } /*}}}*/ diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index e2d9bb7d4..38003e430 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -2386,8 +2386,10 @@ bool DoSource(CommandLine &CmdL) string Src; pkgSrcRecords::Parser *Last = FindSrc(*I,Recs,SrcRecs,Src,*Cache); - if (Last == 0) + if (Last == 0) { + delete[] Dsc; return _error->Error(_("Unable to find a source package for %s"),Src.c_str()); + } string srec = Last->AsStr(); string::size_type pos = srec.find("\nVcs-"); @@ -2418,8 +2420,10 @@ bool DoSource(CommandLine &CmdL) // Back track vector Lst; - if (Last->Files(Lst) == false) + if (Last->Files(Lst) == false) { + delete[] Dsc; return false; + } // Load them into the fetcher for (vector::const_iterator I = Lst.begin(); @@ -2480,6 +2484,7 @@ bool DoSource(CommandLine &CmdL) struct statvfs Buf; string OutputDir = "."; if (statvfs(OutputDir.c_str(),&Buf) != 0) { + delete[] Dsc; if (errno == EOVERFLOW) return _error->WarningE("statvfs",_("Couldn't determine free space in %s"), OutputDir.c_str()); @@ -2493,10 +2498,12 @@ bool DoSource(CommandLine &CmdL) #if HAVE_STRUCT_STATFS_F_TYPE || unsigned(Stat.f_type) != RAMFS_MAGIC #endif - ) + ) { + delete[] Dsc; return _error->Error(_("You don't have enough free space in %s"), OutputDir.c_str()); - } + } + } // Number of bytes if (DebBytes != FetchBytes) @@ -2531,7 +2538,10 @@ bool DoSource(CommandLine &CmdL) // Run it if (Fetcher.Run() == pkgAcquire::Failed) + { + delete[] Dsc; return false; + } // Print error messages bool Failed = false; @@ -2546,8 +2556,11 @@ bool DoSource(CommandLine &CmdL) Failed = true; } if (Failed == true) + { + delete[] Dsc; return _error->Error(_("Failed to fetch some archives.")); - + } + if (_config->FindB("APT::Get::Download-only",false) == true) { c1out << _("Download complete and in download only mode") << endl; diff --git a/debian/changelog b/debian/changelog index 216b44d30..1aeb9c718 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,13 @@ apt (0.8.14.1) unstable; urgency=low [ David Kalnischkies ] + * fix a bunch of cppcheck warnings/errors based on a patch by + Niels Thykier, thanks! (Closes: #622805) * apt-pkg/depcache.cc: - really include 'rc' packages in the delete count by fixing a typo which exists since 1999 in the source… (LP: #761175) - -- David Kalnischkies Fri, 15 Apr 2011 23:59:36 +0200 + -- David Kalnischkies Sat, 16 Apr 2011 01:07:44 +0200 apt (0.8.14) unstable; urgency=low diff --git a/test/testextract.cc b/test/testextract.cc index 1c738aab9..b790df618 100644 --- a/test/testextract.cc +++ b/test/testextract.cc @@ -71,9 +71,12 @@ bool Go(int argc,char *argv[]) Itm.Type = pkgDirStream::Item::Directory; int Fd; - if (Extract.DoItem(Itm,Fd) == false) + if (Extract.DoItem(Itm,Fd) == false) { + fclose(F); return false; - } + } + } + fclose(F); } else if (Deb.ExtractArchive(Extract) == false) -- cgit v1.2.3-70-g09d2 From a235ddf86a9cc5c3a8fade9084044229ff51a77f Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Sat, 16 Apr 2011 11:02:47 +0200 Subject: apt-pkg/acquire-item.cc: Only try to rename existing Release files (Closes: #622912) --- apt-pkg/acquire-item.cc | 2 +- debian/changelog | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 1d651ba69..7b120d3ce 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -1504,7 +1504,7 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) /* Always move the meta index, even if gpgv failed. This ensures * that PackageFile objects are correctly filled in */ - { + if (FileExists(DestFile)) { string FinalFile = _config->FindDir("Dir::State::lists"); FinalFile += URItoFileName(RealURI); /* InRelease files become Release files, otherwise diff --git a/debian/changelog b/debian/changelog index c2e2dc70d..857630dc6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +apt (0.8.14.1) UNRELEASED; urgency=low + + * apt-pkg/acquire-item.cc: + - Only try to rename existing Release files (Closes: #622912) + + -- Julian Andres Klode Sat, 16 Apr 2011 11:00:19 +0200 + apt (0.8.14) unstable; urgency=low [ Julian Andres Klode ] -- cgit v1.2.3-70-g09d2 From c8848ae22c1aedc19bc17bae486efef972fc6d73 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 16 Apr 2011 16:50:37 +0200 Subject: * apt-pkg/acquire-method.cc: - write directly to stdout instead of creating the message in memory first before writing to avoid hitting limits --- apt-pkg/acquire-method.cc | 229 ++++++++++++++++++---------------------------- debian/changelog | 5 +- 2 files changed, 94 insertions(+), 140 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index fb45d9ee7..2f29f7932 100644 --- a/apt-pkg/acquire-method.cc +++ b/apt-pkg/acquire-method.cc @@ -25,7 +25,6 @@ #include #include #include -#include #include /*}}}*/ @@ -36,32 +35,28 @@ using namespace std; /* This constructs the initialization text */ pkgAcqMethod::pkgAcqMethod(const char *Ver,unsigned long Flags) { - char S[300] = ""; - char *End = S; - strcat(End,"100 Capabilities\n"); - sprintf(End+strlen(End),"Version: %s\n",Ver); + std::cout << "100 Capabilities\n" + << "Version: " << Ver << "\n"; if ((Flags & SingleInstance) == SingleInstance) - strcat(End,"Single-Instance: true\n"); - + std::cout << "Single-Instance: true\n"; + if ((Flags & Pipeline) == Pipeline) - strcat(End,"Pipeline: true\n"); - + std::cout << "Pipeline: true\n"; + if ((Flags & SendConfig) == SendConfig) - strcat(End,"Send-Config: true\n"); + std::cout << "Send-Config: true\n"; if ((Flags & LocalOnly) == LocalOnly) - strcat(End,"Local-Only: true\n"); + std::cout <<"Local-Only: true\n"; if ((Flags & NeedsCleanup) == NeedsCleanup) - strcat(End,"Needs-Cleanup: true\n"); + std::cout << "Needs-Cleanup: true\n"; if ((Flags & Removable) == Removable) - strcat(End,"Removable: true\n"); - strcat(End,"\n"); + std::cout << "Removable: true\n"; - if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S)) - exit(100); + std::cout << "\n" << std::flush; SetNonBlock(STDIN_FILENO,true); @@ -94,13 +89,11 @@ void pkgAcqMethod::Fail(string Err,bool Transient) if (*I == '\n') *I = ' '; } - - char S[1024]; - char *End = S; + if (Queue != 0) { - End += snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: %s\n" - "Message: %s %s\n",Queue->Uri.c_str(), Err.c_str(), IP.c_str()); + std::cout << "400 URI Failure\nURI: " << Queue->Uri << "\n" + << "Message: " << Err << " " << IP << "\n"; // Dequeue FetchItem *Tmp = Queue; Queue = Queue->Next; @@ -109,22 +102,17 @@ void pkgAcqMethod::Fail(string Err,bool Transient) QueueBack = Queue; } else - { - End += snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: \n" - "Message: %s\n",Err.c_str()); - } + std::cout << "400 URI Failure\nURI: \nMessage: " << Err << "\n"; + if(FailReason.empty() == false) - End += snprintf(End,sizeof(S)-50 - (End - S),"FailReason: %s\n",FailReason.c_str()); + std::cout << "FailReason: " << FailReason << "\n"; if (UsedMirror.empty() == false) - End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str()); - // Set the transient flag + std::cout << "UsedMirror: " << UsedMirror << "\n"; + // Set the transient flag if (Transient == true) - strcat(S,"Transient-Failure: true\n\n"); - else - strcat(S,"\n"); - - if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S)) - exit(100); + std::cout << "Transient-Failure: true\n"; + + std::cout << "\n" << std::flush; } /*}}}*/ // AcqMethod::URIStart - Indicate a download is starting /*{{{*/ @@ -134,27 +122,22 @@ void pkgAcqMethod::URIStart(FetchResult &Res) { if (Queue == 0) abort(); - - char S[1024] = ""; - char *End = S; - - End += snprintf(S,sizeof(S),"200 URI Start\nURI: %s\n",Queue->Uri.c_str()); + + std::cout << "200 URI Start\n" + << "URI: " << Queue->Uri << "\n"; if (Res.Size != 0) - End += snprintf(End,sizeof(S)-4 - (End - S),"Size: %lu\n",Res.Size); - + std::cout << "Size: " << Res.Size << "\n"; + if (Res.LastModified != 0) - End += snprintf(End,sizeof(S)-4 - (End - S),"Last-Modified: %s\n", - TimeRFC1123(Res.LastModified).c_str()); - + std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n"; + if (Res.ResumePoint != 0) - End += snprintf(End,sizeof(S)-4 - (End - S),"Resume-Point: %lu\n", - Res.ResumePoint); + std::cout << "Resume-Point: " << Res.ResumePoint << "\n"; + if (UsedMirror.empty() == false) - End += snprintf(End,sizeof(S)-4 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str()); - - strcat(End,"\n"); - if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S)) - exit(100); + std::cout << "UsedMirror: " << UsedMirror << "\n"; + + std::cout << "\n" << std::flush; } /*}}}*/ // AcqMethod::URIDone - A URI is finished /*{{{*/ @@ -164,76 +147,65 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt) { if (Queue == 0) abort(); - - char S[1024] = ""; - char *End = S; - - End += snprintf(S,sizeof(S),"201 URI Done\nURI: %s\n",Queue->Uri.c_str()); + + std::cout << "201 URI Done\n" + << "URI: " << Queue->Uri << "\n"; if (Res.Filename.empty() == false) - End += snprintf(End,sizeof(S)-50 - (End - S),"Filename: %s\n",Res.Filename.c_str()); - + std::cout << "Filename: " << Res.Filename << "\n"; + if (Res.Size != 0) - End += snprintf(End,sizeof(S)-50 - (End - S),"Size: %lu\n",Res.Size); - + std::cout << "Size: " << Res.Size << "\n"; + if (Res.LastModified != 0) - End += snprintf(End,sizeof(S)-50 - (End - S),"Last-Modified: %s\n", - TimeRFC1123(Res.LastModified).c_str()); + std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n"; if (Res.MD5Sum.empty() == false) - { - End += snprintf(End,sizeof(S)-50 - (End - S),"MD5-Hash: %s\n",Res.MD5Sum.c_str()); - End += snprintf(End,sizeof(S)-50 - (End - S),"MD5Sum-Hash: %s\n",Res.MD5Sum.c_str()); - } + std::cout << "MD5-Hash: " << Res.MD5Sum << "\n" + << "MD5Sum-Hash: " << Res.MD5Sum << "\n"; if (Res.SHA1Sum.empty() == false) - End += snprintf(End,sizeof(S)-50 - (End - S),"SHA1-Hash: %s\n",Res.SHA1Sum.c_str()); + std::cout << "SHA1-Hash: " << Res.SHA1Sum << "\n"; if (Res.SHA256Sum.empty() == false) - End += snprintf(End,sizeof(S)-50 - (End - S),"SHA256-Hash: %s\n",Res.SHA256Sum.c_str()); + std::cout << "SHA256-Hash: " << Res.SHA256Sum << "\n"; if (UsedMirror.empty() == false) - End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str()); - if (Res.GPGVOutput.size() > 0) - End += snprintf(End,sizeof(S)-50 - (End - S),"GPGVOutput:\n"); - for (vector::iterator I = Res.GPGVOutput.begin(); - I != Res.GPGVOutput.end(); I++) - End += snprintf(End,sizeof(S)-50 - (End - S), " %s\n", (*I).c_str()); + std::cout << "UsedMirror: " << UsedMirror << "\n"; + if (Res.GPGVOutput.empty() == false) + { + std::cout << "GPGVOutput:\n"; + for (vector::const_iterator I = Res.GPGVOutput.begin(); + I != Res.GPGVOutput.end(); ++I) + std::cout << " " << *I << "\n"; + } if (Res.ResumePoint != 0) - End += snprintf(End,sizeof(S)-50 - (End - S),"Resume-Point: %lu\n", - Res.ResumePoint); + std::cout << "Resume-Point: " << Res.ResumePoint << "\n"; if (Res.IMSHit == true) - strcat(End,"IMS-Hit: true\n"); - End = S + strlen(S); - + std::cout << "IMS-Hit: true\n"; + if (Alt != 0) { if (Alt->Filename.empty() == false) - End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-Filename: %s\n",Alt->Filename.c_str()); - + std::cout << "Alt-Filename: " << Alt->Filename << "\n"; + if (Alt->Size != 0) - End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-Size: %lu\n",Alt->Size); - + std::cout << "Alt-Size: " << Alt->Size << "\n"; + if (Alt->LastModified != 0) - End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-Last-Modified: %s\n", - TimeRFC1123(Alt->LastModified).c_str()); - + std::cout << "Alt-Last-Modified: " << TimeRFC1123(Alt->LastModified) << "\n"; + if (Alt->MD5Sum.empty() == false) - End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-MD5-Hash: %s\n", - Alt->MD5Sum.c_str()); + std::cout << "Alt-MD5-Hash: " << Alt->MD5Sum << "\n"; if (Alt->SHA1Sum.empty() == false) - End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-SHA1-Hash: %s\n", - Alt->SHA1Sum.c_str()); + std::cout << "Alt-SHA1-Hash: " << Alt->SHA1Sum << "\n"; if (Alt->SHA256Sum.empty() == false) - End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-SHA256-Hash: %s\n", - Alt->SHA256Sum.c_str()); - + std::cout << "Alt-SHA256-Hash: " << Alt->SHA256Sum << "\n"; + if (Alt->IMSHit == true) - strcat(End,"Alt-IMS-Hit: true\n"); + std::cout << "Alt-IMS-Hit: true\n"; } - - strcat(End,"\n"); - if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S)) - exit(100); + + std::cout << "\n" << std::flush; // Dequeue FetchItem *Tmp = Queue; @@ -249,13 +221,10 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt) to be ackd */ bool pkgAcqMethod::MediaFail(string Required,string Drive) { - char S[1024]; - snprintf(S,sizeof(S),"403 Media Failure\nMedia: %s\nDrive: %s\n\n", + fprintf(stdout, "403 Media Failure\nMedia: %s\nDrive: %s\n", Required.c_str(),Drive.c_str()); + std::cout << "\n" << std::flush; - if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S)) - exit(100); - vector MyMessages; /* Here we read messages until we find a 603, each non 603 message is @@ -414,22 +383,15 @@ void pkgAcqMethod::Log(const char *Format,...) string CurrentURI = ""; if (Queue != 0) CurrentURI = Queue->Uri; - + fprintf(stdout, "101 Log\nURI: %s\nUsedMirror: %s\nMessage: ", + UsedMirror.c_str(), CurrentURI.c_str()); + va_list args; va_start(args,Format); + vfprintf(stdout,Format,args); + va_end(args); - // sprintf the description - char S[1024]; - unsigned int Len = snprintf(S,sizeof(S)-4,"101 Log\n" - "URI: %s\n" - "UsedMirror: %s\n" - "Message: ", UsedMirror.c_str(), - CurrentURI.c_str()); - vsnprintf(S+Len,sizeof(S)-4-Len,Format,args); - strcat(S,"\n\n"); - - if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S)) - exit(100); + std::cout << "\n\n" << std::flush; } /*}}}*/ // AcqMethod::Status - Send a status message /*{{{*/ @@ -440,23 +402,15 @@ void pkgAcqMethod::Status(const char *Format,...) string CurrentURI = ""; if (Queue != 0) CurrentURI = Queue->Uri; - + fprintf(stdout, "102 Status\nURI: %s\nUsedMirror: %s\nMessage: ", + UsedMirror.c_str(), CurrentURI.c_str()); + va_list args; va_start(args,Format); + vfprintf(stdout,Format,args); + va_end(args); - // sprintf the description - char S[1024]; - unsigned int Len = snprintf(S,sizeof(S)-4,"102 Status\n" - "URI: %s\n" - "UsedMirror: %s\n" - "Message: ",UsedMirror.c_str(), - CurrentURI.c_str()); - - vsnprintf(S+Len,sizeof(S)-4-Len,Format,args); - strcat(S,"\n\n"); - - if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S)) - exit(100); + std::cout << "\n\n" << std::flush; } /*}}}*/ // AcqMethod::Redirect - Send a redirect message /*{{{*/ @@ -465,16 +419,13 @@ void pkgAcqMethod::Status(const char *Format,...) to keep the pipeline synchronized. */ void pkgAcqMethod::Redirect(const string &NewURI) { - string CurrentURI = ""; + std::cout << "103 Redirect\nURI: "; if (Queue != 0) - CurrentURI = Queue->Uri; - - char S[1024]; - snprintf(S, sizeof(S)-50, "103 Redirect\nURI: %s\nNew-URI: %s\n\n", - CurrentURI.c_str(), NewURI.c_str()); - - if (write(STDOUT_FILENO,S,strlen(S)) != (ssize_t)strlen(S)) - exit(100); + std::cout << Queue->Uri << "\n"; + else + std::cout << "\n"; + std::cout << "New-URI: " << NewURI << "\n" + << "\n" << std::flush; // Change the URI for the request. Queue->Uri = NewURI; diff --git a/debian/changelog b/debian/changelog index 1aeb9c718..694d3f406 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,8 +6,11 @@ apt (0.8.14.1) unstable; urgency=low * apt-pkg/depcache.cc: - really include 'rc' packages in the delete count by fixing a typo which exists since 1999 in the source… (LP: #761175) + * apt-pkg/acquire-method.cc: + - write directly to stdout instead of creating the message in + memory first before writing to avoid hitting limits - -- David Kalnischkies Sat, 16 Apr 2011 01:07:44 +0200 + -- David Kalnischkies Sat, 16 Apr 2011 16:50:22 +0200 apt (0.8.14) unstable; urgency=low -- cgit v1.2.3-70-g09d2 From 446bbcf47d466dc160813db8a331c5cd45395803 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 16 Apr 2011 16:56:39 +0200 Subject: remove the extra unnecessary qualification cppcheck complains about --- apt-pkg/cacheset.h | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/cacheset.h b/apt-pkg/cacheset.h index e690d660c..eb4f04d72 100644 --- a/apt-pkg/cacheset.h +++ b/apt-pkg/cacheset.h @@ -135,7 +135,7 @@ public: /*{{{*/ static APT::PackageSet FromTask(pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper); static APT::PackageSet FromTask(pkgCacheFile &Cache, std::string const &pattern) { CacheSetHelper helper; - return APT::PackageSet::FromTask(Cache, pattern, helper); + return FromTask(Cache, pattern, helper); } /** \brief returns all packages in the cache whose name matchs a given pattern @@ -149,7 +149,7 @@ public: /*{{{*/ static APT::PackageSet FromRegEx(pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper); static APT::PackageSet FromRegEx(pkgCacheFile &Cache, std::string const &pattern) { CacheSetHelper helper; - return APT::PackageSet::FromRegEx(Cache, pattern, helper); + return FromRegEx(Cache, pattern, helper); } /** \brief returns all packages specified by a string @@ -160,7 +160,7 @@ public: /*{{{*/ static APT::PackageSet FromString(pkgCacheFile &Cache, std::string const &string, CacheSetHelper &helper); static APT::PackageSet FromString(pkgCacheFile &Cache, std::string const &string) { CacheSetHelper helper; - return APT::PackageSet::FromString(Cache, string, helper); + return FromString(Cache, string, helper); } /** \brief returns a package specified by a string @@ -171,7 +171,7 @@ public: /*{{{*/ static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &string, CacheSetHelper &helper); static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &string) { CacheSetHelper helper; - return APT::PackageSet::FromName(Cache, string, helper); + return FromName(Cache, string, helper); } /** \brief returns all packages specified on the commandline @@ -184,7 +184,7 @@ public: /*{{{*/ static APT::PackageSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper); static APT::PackageSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline) { CacheSetHelper helper; - return APT::PackageSet::FromCommandLine(Cache, cmdline, helper); + return FromCommandLine(Cache, cmdline, helper); } struct Modifier { @@ -215,7 +215,7 @@ public: /*{{{*/ std::list const &mods, unsigned short const &fallback) { CacheSetHelper helper; - return APT::PackageSet::GroupedFromCommandLine(Cache, cmdline, + return GroupedFromCommandLine(Cache, cmdline, mods, fallback, helper); } @@ -309,10 +309,10 @@ public: /*{{{*/ static APT::VersionSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline, APT::VersionSet::Version const &fallback) { CacheSetHelper helper; - return APT::VersionSet::FromCommandLine(Cache, cmdline, fallback, helper); + return FromCommandLine(Cache, cmdline, fallback, helper); } static APT::VersionSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline) { - return APT::VersionSet::FromCommandLine(Cache, cmdline, CANDINST); + return FromCommandLine(Cache, cmdline, CANDINST); } static APT::VersionSet FromString(pkgCacheFile &Cache, std::string pkg, @@ -321,10 +321,10 @@ public: /*{{{*/ static APT::VersionSet FromString(pkgCacheFile &Cache, std::string pkg, APT::VersionSet::Version const &fallback) { CacheSetHelper helper; - return APT::VersionSet::FromString(Cache, pkg, fallback, helper); + return FromString(Cache, pkg, fallback, helper); } static APT::VersionSet FromString(pkgCacheFile &Cache, std::string pkg) { - return APT::VersionSet::FromString(Cache, pkg, CANDINST); + return FromString(Cache, pkg, CANDINST); } /** \brief returns all versions specified for the package @@ -338,10 +338,10 @@ public: /*{{{*/ static APT::VersionSet FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P, APT::VersionSet::Version const &fallback) { CacheSetHelper helper; - return APT::VersionSet::FromPackage(Cache, P, fallback, helper); + return FromPackage(Cache, P, fallback, helper); } static APT::VersionSet FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P) { - return APT::VersionSet::FromPackage(Cache, P, CANDINST); + return FromPackage(Cache, P, CANDINST); } struct Modifier { @@ -364,7 +364,7 @@ public: /*{{{*/ std::list const &mods, unsigned short const &fallback) { CacheSetHelper helper; - return APT::VersionSet::GroupedFromCommandLine(Cache, cmdline, + return GroupedFromCommandLine(Cache, cmdline, mods, fallback, helper); } /*}}}*/ -- cgit v1.2.3-70-g09d2 From 92a21ab552af02878b4d41e3514321c2f2fc1105 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 16 Apr 2011 18:07:52 +0200 Subject: * apt-pkg/orderlist.cc: - let VisitRProvides report if the calls were successful --- apt-pkg/orderlist.cc | 2 +- debian/changelog | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc index d5bd19581..eab05a497 100644 --- a/apt-pkg/orderlist.cc +++ b/apt-pkg/orderlist.cc @@ -490,7 +490,7 @@ bool pkgOrderList::VisitRProvides(DepFunc F,VerIterator Ver) bool Res = true; for (PrvIterator P = Ver.ProvidesList(); P.end() == false; P++) Res &= (this->*F)(P.ParentPkg().RevDependsList()); - return true; + return Res; } /*}}}*/ // OrderList::VisitProvides - Visit all of the providing packages /*{{{*/ diff --git a/debian/changelog b/debian/changelog index 694d3f406..5ba6cd082 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,8 +9,10 @@ apt (0.8.14.1) unstable; urgency=low * apt-pkg/acquire-method.cc: - write directly to stdout instead of creating the message in memory first before writing to avoid hitting limits + * apt-pkg/orderlist.cc: + - let VisitRProvides report if the calls were successful - -- David Kalnischkies Sat, 16 Apr 2011 16:50:22 +0200 + -- David Kalnischkies Sat, 16 Apr 2011 17:13:08 +0200 apt (0.8.14) unstable; urgency=low -- cgit v1.2.3-70-g09d2 From 0284eee4a02e9cad0932b1058eec9dde6cf8c682 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 16 Apr 2011 18:11:47 +0200 Subject: cppcheck: (style) Variable 'State' is assigned a value that is never used --- apt-pkg/algorithms.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 0b4366e5e..e7703ca93 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -647,12 +647,10 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) // Compute a single dependency element (glob or) pkgCache::DepIterator Start = D; pkgCache::DepIterator End = D; - unsigned char State = 0; for (bool LastOR = true; D.end() == false && LastOR == true;) { - State |= Cache[D]; LastOR = (D->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or; - D++; + ++D; if (LastOR == true) End = D; } -- cgit v1.2.3-70-g09d2 From b6ff69135e677c22080d2013e87b34319c1ed671 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 16 Apr 2011 18:55:53 +0200 Subject: * apt-pkg/deb/dpkgpm.cc: - replace obsolete usleep with nanosleep --- apt-pkg/deb/dpkgpm.cc | 5 +++-- debian/changelog | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 01808be24..b37980b7e 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -391,8 +391,9 @@ void pkgDPkgPM::DoTerminalPty(int master) { // this happens when the child is about to exit, we // give it time to actually exit, otherwise we run - // into a race - usleep(500000); + // into a race so we sleep for half a second. + struct timespec sleepfor = { 0, 500000000 }; + nanosleep(&sleepfor, NULL); return; } if(len <= 0) diff --git a/debian/changelog b/debian/changelog index 5ba6cd082..9f06a87b5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,8 +11,10 @@ apt (0.8.14.1) unstable; urgency=low memory first before writing to avoid hitting limits * apt-pkg/orderlist.cc: - let VisitRProvides report if the calls were successful + * apt-pkg/deb/dpkgpm.cc: + - replace obsolete usleep with nanosleep - -- David Kalnischkies Sat, 16 Apr 2011 17:13:08 +0200 + -- David Kalnischkies Sat, 16 Apr 2011 18:54:37 +0200 apt (0.8.14) unstable; urgency=low -- cgit v1.2.3-70-g09d2 From ab60fb67a9917bfb8cb96576d6452f1ec9d34e0d Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Mon, 18 Apr 2011 10:56:37 +0200 Subject: apt-pkg/depcache.cc: Really release action groups only once (Closes: #622744) --- apt-pkg/depcache.cc | 2 +- debian/changelog | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 07803d7bf..9dad7e240 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -70,7 +70,7 @@ void pkgDepCache::ActionGroup::release() cache.MarkAndSweep(); } - released = false; + released = true; } } diff --git a/debian/changelog b/debian/changelog index ff5b0c439..3f9874bcf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +apt (0.8.14.2) UNRELEASED; urgency=low + + * apt-pkg/depcache.cc: + - Really release action groups only once (Closes: #622744) + + -- Julian Andres Klode Mon, 18 Apr 2011 10:54:11 +0200 + apt (0.8.14.1) unstable; urgency=low * apt-pkg/acquire-item.cc: -- cgit v1.2.3-70-g09d2 From a8d7c101340a614174371a4cf7c53cdcf3b3adfc Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 21 Apr 2011 16:38:06 +0200 Subject: simplify the code for wildcard pinning a bit --- apt-pkg/policy.cc | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index 3d6ec1cdc..2cc2e5e39 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -220,21 +220,18 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name, // Allow pinning by wildcards // TODO: Maybe we should always prefer specific pins over non- // specific ones. - if (Name.find("*") != string::npos || Name.find("[") != string::npos - || Name.find("?") != string::npos || Name[0] == '/') { - pkgVersionMatch match(Data, Type); - for (pkgCache::PkgIterator P = Cache->PkgBegin(); - P != Cache->PkgEnd(); P++) { - if (match.ExpressionMatches(Name, P.Name())) { - CreatePin(Type, P.Name(), Data, Priority); - } - } + if (Name[0] == '/' || Name.find_first_of("*[?") != string::npos) + { + pkgVersionMatch match(Data, Type); + for (pkgCache::GrpIterator G = Cache->GrpBegin(); G.end() != true; ++G) + if (match.ExpressionMatches(Name, G.Name())) + CreatePin(Type, G.Name(), Data, Priority); return; } // Get a spot to put the pin pkgCache::GrpIterator Grp = Cache->FindGrp(Name); - for (pkgCache::PkgIterator Pkg = Grp.FindPkg("any"); + for (pkgCache::PkgIterator Pkg = Grp.PackageList(); Pkg.end() != true; Pkg = Grp.NextPkg(Pkg)) { Pin *P = 0; -- cgit v1.2.3-70-g09d2 From 254b8ebb92e82e0d7cf5aa1391bcfbbeb23d534e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 25 Apr 2011 13:51:53 +0200 Subject: * apt-pkg/pkgcache.cc: - really ignore :arch in FindPkg() in non-multiarch environment --- apt-pkg/pkgcache.cc | 9 ++++++--- debian/changelog | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index b63900adb..862d05348 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -211,11 +211,14 @@ pkgCache::PkgIterator pkgCache::SingleArchFindPkg(const string &Name) // --------------------------------------------------------------------- /* Returns 0 on error, pointer to the package otherwise */ pkgCache::PkgIterator pkgCache::FindPkg(const string &Name) { - if (MultiArchCache() == false) - return SingleArchFindPkg(Name); size_t const found = Name.find(':'); if (found == string::npos) - return FindPkg(Name, "native"); + { + if (MultiArchCache() == false) + return SingleArchFindPkg(Name); + else + return FindPkg(Name, "native"); + } string const Arch = Name.substr(found+1); /* Beware: This is specialcased to handle pkg:any in dependencies as these are linked to virtual pkg:any named packages with all archs. diff --git a/debian/changelog b/debian/changelog index fd3d7384e..58b6a289d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -28,8 +28,10 @@ apt (0.8.14.2) UNRELEASED; urgency=low - deprecate mostly undocumented 'markauto' in favor of 'apt-mark' * cmdline/apt-cache.cc: - deprecate mostly undocumented 'showauto' in favor of 'apt-mark' + * apt-pkg/pkgcache.cc: + - really ignore :arch in FindPkg() in non-multiarch environment - -- David Kalnischkies Thu, 21 Apr 2011 17:00:41 +0200 + -- David Kalnischkies Mon, 25 Apr 2011 13:49:47 +0200 apt (0.8.14.1) unstable; urgency=low -- cgit v1.2.3-70-g09d2 From 05bb1e5dc88497b5e4b5ba684ace99c42d1881f9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 26 Apr 2011 19:15:29 +0200 Subject: * apt-pkg/deb/debmetaindex.cc: - do not download TranslationIndex if no Translation-* will be downloaded later on anyway (Closes: #624218) --- apt-pkg/deb/debmetaindex.cc | 5 ++++- debian/changelog | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index a6edab6b9..a91cc34e9 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -195,11 +195,14 @@ vector * debReleaseIndex::ComputeIndexTargets() const { } } + std::vector const lang = APT::Configuration::getLanguages(true); + if (lang.empty() == true) + return IndexTargets; + // get the Translations: // - if its a dists-style repository get the i18n/Index first // - if its flat try to acquire files by guessing if (Dist[Dist.size() - 1] == '/') { - std::vector const lang = APT::Configuration::getLanguages(true); for (std::set::const_iterator s = sections.begin(); s != sections.end(); ++s) { for (std::vector::const_iterator l = lang.begin(); diff --git a/debian/changelog b/debian/changelog index 64cba02cd..115b4e0b6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -34,8 +34,11 @@ apt (0.8.14.2) UNRELEASED; urgency=low * doc/po/de.po: - undo the translation of the command 'dump' in manpage of apt-config as report by Burghard Grossmann on debian-l10n-german, thanks! + * apt-pkg/deb/debmetaindex.cc: + - do not download TranslationIndex if no Translation-* will be + downloaded later on anyway (Closes: #624218) - -- David Kalnischkies Tue, 26 Apr 2011 17:35:24 +0200 + -- David Kalnischkies Tue, 26 Apr 2011 19:12:41 +0200 apt (0.8.14.1) unstable; urgency=low -- cgit v1.2.3-70-g09d2 From 378fcbd65e8c93d49a729bcc37fac889d8228357 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 26 Apr 2011 22:37:46 +0200 Subject: * apt-pkg/acquire-worker.cc: - print filename in the unmatching size warning (Closes: #623137) --- apt-pkg/acquire-worker.cc | 11 +++++------ debian/changelog | 4 +++- 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index ddd8e3101..75e03232a 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -287,10 +287,10 @@ bool pkgAcquire::Worker::RunMessages() Log->Pulse(Owner->GetOwner()); OwnerQ->ItemDone(Itm); - if (TotalSize != 0 && - (unsigned)atoi(LookupTag(Message,"Size","0").c_str()) != TotalSize) - _error->Warning("Bizarre Error - File size is not what the server reported %s %lu", - LookupTag(Message,"Size","0").c_str(),TotalSize); + unsigned long const ServerSize = atol(LookupTag(Message,"Size","0").c_str()); + if (TotalSize != 0 && ServerSize != TotalSize) + _error->Warning("Size of file %s is not what the server reported %s %lu", + Owner->DestFile.c_str(), LookupTag(Message,"Size","0").c_str(),TotalSize); // see if there is a hash to verify string RecivedHash; @@ -309,8 +309,7 @@ bool pkgAcquire::Worker::RunMessages() << endl << endl; } } - Owner->Done(Message,atoi(LookupTag(Message,"Size","0").c_str()), - RecivedHash.c_str(), Config); + Owner->Done(Message, ServerSize, RecivedHash.c_str(), Config); ItemDone(); // Log that we are done diff --git a/debian/changelog b/debian/changelog index 3f1c017c4..f14d7588c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -40,8 +40,10 @@ apt (0.8.14.2) UNRELEASED; urgency=low * test/versions.lst: - disable obscure version number tests with versions dpkg doesn't allow any more as they don't start with a number + * apt-pkg/acquire-worker.cc: + - print filename in the unmatching size warning (Closes: #623137) - -- David Kalnischkies Tue, 26 Apr 2011 19:30:12 +0200 + -- David Kalnischkies Tue, 26 Apr 2011 22:36:53 +0200 apt (0.8.14.1) unstable; urgency=low -- cgit v1.2.3-70-g09d2 From 2d5102e87ae43da3ec7a3f12997363348278cabe Mon Sep 17 00:00:00 2001 From: Ben Finney Date: Tue, 26 Apr 2011 22:45:31 +0200 Subject: * apt-pkg/acquire-item.cc: - apply fix for poorly worded 'locate file' error message from Ben Finney, thanks! (Closes: #623171) --- apt-pkg/acquire-item.cc | 2 +- debian/changelog | 5 ++++- po/apt-all.pot | 4 ++-- po/ar.po | 4 ++-- po/ast.po | 4 ++-- po/bg.po | 4 ++-- po/bs.po | 4 ++-- po/ca.po | 4 ++-- po/cs.po | 4 ++-- po/cy.po | 4 ++-- po/da.po | 4 ++-- po/de.po | 4 ++-- po/dz.po | 4 ++-- po/el.po | 4 ++-- po/es.po | 4 ++-- po/eu.po | 4 ++-- po/fi.po | 4 ++-- po/fr.po | 4 ++-- po/gl.po | 4 ++-- po/he.po | 4 ++-- po/hu.po | 4 ++-- po/it.po | 4 ++-- po/ja.po | 4 ++-- po/km.po | 4 ++-- po/ko.po | 4 ++-- po/ku.po | 4 ++-- po/lt.po | 4 ++-- po/mr.po | 4 ++-- po/nb.po | 4 ++-- po/ne.po | 4 ++-- po/nl.po | 4 ++-- po/nn.po | 4 ++-- po/pl.po | 4 ++-- po/pt.po | 4 ++-- po/pt_BR.po | 4 ++-- po/ro.po | 4 ++-- po/ru.po | 4 ++-- po/sk.po | 4 ++-- po/sl.po | 4 ++-- po/sv.po | 4 ++-- po/th.po | 4 ++-- po/tl.po | 4 ++-- po/uk.po | 4 ++-- po/vi.po | 4 ++-- po/zh_CN.po | 4 ++-- po/zh_TW.po | 4 ++-- 46 files changed, 93 insertions(+), 90 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 7b120d3ce..6785b4e1b 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -1645,7 +1645,7 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources, // Select a source if (QueueNext() == false && _error->PendingError() == false) - _error->Error(_("I wasn't able to locate file for the %s package. " + _error->Error(_("I wasn't able to locate a file for the %s package. " "This might mean you need to manually fix this package."), Version.ParentPkg().Name()); } diff --git a/debian/changelog b/debian/changelog index f14d7588c..22af4700e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -42,8 +42,11 @@ apt (0.8.14.2) UNRELEASED; urgency=low allow any more as they don't start with a number * apt-pkg/acquire-worker.cc: - print filename in the unmatching size warning (Closes: #623137) + * apt-pkg/acquire-item.cc: + - apply fix for poorly worded 'locate file' error message from + Ben Finney, thanks! (Closes: #623171) - -- David Kalnischkies Tue, 26 Apr 2011 22:36:53 +0200 + -- David Kalnischkies Tue, 26 Apr 2011 22:41:33 +0200 apt (0.8.14.1) unstable; urgency=low diff --git a/po/apt-all.pot b/po/apt-all.pot index 4634bf64c..73ed82195 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -2719,8 +2719,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1424 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" #: apt-pkg/acquire-item.cc:1479 diff --git a/po/ar.po b/po/ar.po index d19ba61fb..6b2f1f134 100644 --- a/po/ar.po +++ b/po/ar.po @@ -2792,8 +2792,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" #: apt-pkg/acquire-item.cc:1686 diff --git a/po/ast.po b/po/ast.po index a7e5a2439..593fc6e39 100644 --- a/po/ast.po +++ b/po/ast.po @@ -3013,8 +3013,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Nun pudo alcontrase un ficheru pal paquete %s. Esto puede significar que " "necesites iguar manualmente esti paquete" diff --git a/po/bg.po b/po/bg.po index 69628a4d6..6946e76d2 100644 --- a/po/bg.po +++ b/po/bg.po @@ -3051,8 +3051,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Неуспех при намирането на файл за пакет %s. Това може да означава, че трябва " "ръчно да оправите този пакет." diff --git a/po/bs.po b/po/bs.po index 28011b17b..7736af3d0 100644 --- a/po/bs.po +++ b/po/bs.po @@ -2789,8 +2789,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" #: apt-pkg/acquire-item.cc:1686 diff --git a/po/ca.po b/po/ca.po index 4692b03c9..990f85555 100644 --- a/po/ca.po +++ b/po/ca.po @@ -3048,8 +3048,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "No s'ha trobat un fitxer pel paquet %s. Això podria significar que haureu " "d'arreglar aquest paquet manualment." diff --git a/po/cs.po b/po/cs.po index a25e28b2d..a3285a490 100644 --- a/po/cs.po +++ b/po/cs.po @@ -2992,8 +2992,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Nebyl jsem schopen nalézt soubor s balíkem %s. Asi budete muset tento balík " "opravit ručně." diff --git a/po/cy.po b/po/cy.po index cea53f567..4df1dc35f 100644 --- a/po/cy.po +++ b/po/cy.po @@ -3080,8 +3080,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Methais i leoli ffeila r gyfer y pecyn %s. Fa all hyn olygu bod rhaid i chi " "drwsio'r pecyn hyn a law." diff --git a/po/da.po b/po/da.po index a15063f2d..b26b10a94 100644 --- a/po/da.po +++ b/po/da.po @@ -3014,8 +3014,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Jeg kunne ikke lokalisere filen til %s-pakken. Det betyder muligvis at du er " "nødt til manuelt at reparere denne pakke." diff --git a/po/de.po b/po/de.po index 267715718..8732f2900 100644 --- a/po/de.po +++ b/po/de.po @@ -3089,8 +3089,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Es konnte keine Datei für Paket %s gefunden werden. Das könnte heißen, dass " "Sie dieses Paket von Hand korrigieren müssen." diff --git a/po/dz.po b/po/dz.po index 0fd423cc0..f569e0fbe 100644 --- a/po/dz.po +++ b/po/dz.po @@ -3001,8 +3001,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" " %s་ཐུམ་སྒྲིལ་གི་དོན་ལུ་ང་་གི་ཡིག་སྣོད་ཅིག་ག་ཡོད་འཚོལ་མི་འཐོབ་པས། འདི་འབདཝ་ལས་ཁྱོད་ཀྱི་ལག་ཐོག་ལས་ " "འ་ནི་ཐུམ་སྒྲིལ་འདི་གི་དཀའ་ངལ་སེལ་དགོཔ་འདུག " diff --git a/po/el.po b/po/el.po index 2192fd287..8a40c5cf7 100644 --- a/po/el.po +++ b/po/el.po @@ -3035,8 +3035,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Αδύνατος ο εντοπισμός ενός αρχείου για το πακέτο %s. Αυτό ίσως σημαίνει ότι " "χρειάζεται να διορθώσετε χειροκίνητα το πακέτο." diff --git a/po/es.po b/po/es.po index dae1712c4..595040a52 100644 --- a/po/es.po +++ b/po/es.po @@ -3116,8 +3116,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "No se pudo localizar un archivo para el paquete %s. Esto puede significar " "que necesita arreglar manualmente este paquete." diff --git a/po/eu.po b/po/eu.po index 825e7de6a..7e8c5838f 100644 --- a/po/eu.po +++ b/po/eu.po @@ -2996,8 +2996,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Ezin izan dut %s paketeko fitxategi bat lokalizatu. Beharbada eskuz konpondu " "beharko duzu paketea." diff --git a/po/fi.po b/po/fi.po index faf9885c8..ef085b171 100644 --- a/po/fi.po +++ b/po/fi.po @@ -2988,8 +2988,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Pakettia %s vastaavaa tiedostoa ei löytynyt. Voit ehkä joutua korjaamaan " "tämän paketin itse." diff --git a/po/fr.po b/po/fr.po index f3fe11e56..9a67d3448 100644 --- a/po/fr.po +++ b/po/fr.po @@ -3107,8 +3107,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Impossible de localiser un fichier du paquet %s. Cela signifie que vous " "devrez corriger ce paquet vous-même." diff --git a/po/gl.po b/po/gl.po index 7d23e7a11..43b059907 100644 --- a/po/gl.po +++ b/po/gl.po @@ -3010,8 +3010,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Non se puido atopar un ficheiro para o paquete %s. Isto pode significar que " "ten que arranxar este paquete a man." diff --git a/po/he.po b/po/he.po index 09e89df06..e05730472 100644 --- a/po/he.po +++ b/po/he.po @@ -2562,8 +2562,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1275 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" #: apt-pkg/acquire-item.cc:1316 diff --git a/po/hu.po b/po/hu.po index a4dde56d5..45da05979 100644 --- a/po/hu.po +++ b/po/hu.po @@ -2983,8 +2983,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Nem találtam egy fájlt a(z) %s csomaghoz. Ez azt jelentheti, hogy kézzel " "kell kijavítani a csomagot." diff --git a/po/it.po b/po/it.po index 1f2e08bf3..a9615bfad 100644 --- a/po/it.po +++ b/po/it.po @@ -3115,8 +3115,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1424 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Impossibile trovare un file per il pacchetto %s. Potrebbe essere necessario " "sistemare manualmente questo pacchetto." diff --git a/po/ja.po b/po/ja.po index c9be076fc..99db2d6d8 100644 --- a/po/ja.po +++ b/po/ja.po @@ -3035,8 +3035,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "パッケージ %s のファイルの位置を特定できません。おそらくこのパッケージを手動" "で修正する必要があります。" diff --git a/po/km.po b/po/km.po index f10efe06d..53d5dd08a 100644 --- a/po/km.po +++ b/po/km.po @@ -2964,8 +2964,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "ខ្ញុំ​មិន​អាច​រកទីតាំង​ឯកសារ​សម្រាប់​កញ្ចប់ %s បានទេ ។ ​មាន​ន័យ​ថា​អ្នក​ត្រូវការ​ជួសជុល​កញ្ចប់​នេះ​ដោយ​ដៃ ។" diff --git a/po/ko.po b/po/ko.po index 65439cced..30ef7092e 100644 --- a/po/ko.po +++ b/po/ko.po @@ -2986,8 +2986,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "%s 패키지의 파일을 찾을 수 없습니다. 수동으로 이 패키지를 고쳐야 할 수도 있습" "니다." diff --git a/po/ku.po b/po/ku.po index a17e00f09..a0979d13b 100644 --- a/po/ku.po +++ b/po/ku.po @@ -2792,8 +2792,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" #: apt-pkg/acquire-item.cc:1686 diff --git a/po/lt.po b/po/lt.po index 0a4b58a5c..22bf253ef 100644 --- a/po/lt.po +++ b/po/lt.po @@ -2889,8 +2889,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" #: apt-pkg/acquire-item.cc:1686 diff --git a/po/mr.po b/po/mr.po index c11620b3d..b0a17df80 100644 --- a/po/mr.po +++ b/po/mr.po @@ -2972,8 +2972,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "मी %s पॅकेजकरीता संचिका शोधण्यास समर्थ नव्हतो. याचा अर्थ असाकी तुम्हालाहे पॅकेज स्वहस्ते " "स्थिर/निश्चित करण्याची गरज आहे." diff --git a/po/nb.po b/po/nb.po index 42fa7c0ae..fbd0c7cf0 100644 --- a/po/nb.po +++ b/po/nb.po @@ -3013,8 +3013,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Klarte ikke å finne en fil for pakken %s. Det kan bety at du må ordne denne " "pakken selv." diff --git a/po/ne.po b/po/ne.po index 733618227..dfd787a1b 100644 --- a/po/ne.po +++ b/po/ne.po @@ -2967,8 +2967,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "%s प्याकेजको लागि मैले फाइल स्थित गर्न सकिन । यसको मतलब तपाईँले म्यानुल्ली यो प्याकेज " "निश्चित गर्नुहोस् ।" diff --git a/po/nl.po b/po/nl.po index 54f0039a6..58506d72c 100644 --- a/po/nl.po +++ b/po/nl.po @@ -3047,8 +3047,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Er kon geen bestand gevonden worden voor pakket %s. Dit kan betekenen dat u " "dit pakket handmatig moet repareren." diff --git a/po/nn.po b/po/nn.po index e33aa27c7..da14705ba 100644 --- a/po/nn.po +++ b/po/nn.po @@ -2988,8 +2988,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Fann ikkje fila for pakken %s. Det kan henda du må fiksa denne pakken sjølv." diff --git a/po/pl.po b/po/pl.po index fad4e96df..64bd2443f 100644 --- a/po/pl.po +++ b/po/pl.po @@ -3018,8 +3018,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Nie udało się odnaleźć pliku dla pakietu %s. Może to oznaczać, że trzeba " "będzie ręcznie naprawić ten pakiet." diff --git a/po/pt.po b/po/pt.po index b1286d961..946d54145 100644 --- a/po/pt.po +++ b/po/pt.po @@ -3046,8 +3046,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Não foi possível localizar arquivo para o pacote %s. Isto pode significar " "que você precisa consertar manualmente este pacote." diff --git a/po/pt_BR.po b/po/pt_BR.po index 3c883ea92..b94038fdb 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -3025,8 +3025,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Não foi possível localizar arquivo para o pacote %s. Isto pode significar " "que você precisa consertar manualmente este pacote." diff --git a/po/ro.po b/po/ro.po index d3ac7e8f0..9d7319068 100644 --- a/po/ro.po +++ b/po/ro.po @@ -3034,8 +3034,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "N-am putut localiza un fișier pentru pachetul %s. Aceasta ar putea însemna " "că aveți nevoie să depanați manual acest pachet." diff --git a/po/ru.po b/po/ru.po index e86d17bc7..bda3ce7c7 100644 --- a/po/ru.po +++ b/po/ru.po @@ -3056,8 +3056,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Не удалось обнаружить файл пакета %s. Это может означать, что вам придётся " "вручную исправить этот пакет." diff --git a/po/sk.po b/po/sk.po index ea0594aa1..0f35324cb 100644 --- a/po/sk.po +++ b/po/sk.po @@ -3008,8 +3008,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Nedá sa nájsť súbor s balíkom %s. Asi budete musieť opraviť tento balík " "manuálne." diff --git a/po/sl.po b/po/sl.po index 33e8e009b..9b497f93b 100644 --- a/po/sl.po +++ b/po/sl.po @@ -3023,8 +3023,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Ni bilo mogoče najti datoteke za paket %s. Morda boste morali ročno " "popraviti ta paket." diff --git a/po/sv.po b/po/sv.po index eef777133..3f3f3cd78 100644 --- a/po/sv.po +++ b/po/sv.po @@ -3038,8 +3038,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Jag kunde inte hitta någon fil för paketet %s. Detta kan betyda att du " "manuellt måste reparera detta paket." diff --git a/po/th.po b/po/th.po index c9c11a4e4..f5c67f373 100644 --- a/po/th.po +++ b/po/th.po @@ -2946,8 +2946,8 @@ msgstr "ไม่พบแฟ้มสำหรับแพกเกจ %s ค #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "ไม่พบแฟ้มสำหรับแพกเกจ %s คุณอาจต้องแก้ปัญหาแพกเกจนี้เอง" #: apt-pkg/acquire-item.cc:1686 diff --git a/po/tl.po b/po/tl.po index 32c86f61e..b3831a7e8 100644 --- a/po/tl.po +++ b/po/tl.po @@ -3016,8 +3016,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Hindi ko mahanap ang talaksan para sa paketeng %s. Maaaring kailanganin " "niyong ayusin ng de kamay ang paketeng ito." diff --git a/po/uk.po b/po/uk.po index d4d2fb6e6..960681c47 100644 --- a/po/uk.po +++ b/po/uk.po @@ -3035,8 +3035,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Я не можу знайти файл для пакунку %s. Можливо, Ви захочете власноруч " "виправити цей пакунок." diff --git a/po/vi.po b/po/vi.po index 65ed46f69..fec6dc3bb 100644 --- a/po/vi.po +++ b/po/vi.po @@ -3053,8 +3053,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "Không tìm thấy tập tin liên quan đến gói %s. Có lẽ bạn cần phải tự sửa gói " "này." diff --git a/po/zh_CN.po b/po/zh_CN.po index 72caa48cb..fa88993dd 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -2961,8 +2961,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "" "我无法找到对应 %s 软件包的文件。在这种情况下您可能需要手动修正这个软件包。" diff --git a/po/zh_TW.po b/po/zh_TW.po index c0ef69f76..1dcaf49ce 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -2949,8 +2949,8 @@ msgstr "" #: apt-pkg/acquire-item.cc:1631 #, c-format msgid "" -"I wasn't able to locate file for the %s package. This might mean you need to " -"manually fix this package." +"I wasn't able to locate a file for the %s package. This might mean you need " +"to manually fix this package." msgstr "找不到 %s 套件的某個檔案。這意味著您可能要手動修復這個套件。" #: apt-pkg/acquire-item.cc:1686 -- cgit v1.2.3-70-g09d2 From f1bdfe81560b110dbf1ee6f5f7fa8c98423ef345 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 10 May 2011 18:51:29 +0200 Subject: fix order of CurrentURI and UsedMirror in Status() and Log() --- apt-pkg/acquire-method.cc | 38 ++++++++++++++++++++------------------ apt-pkg/acquire-method.h | 3 +++ debian/changelog | 3 ++- 3 files changed, 25 insertions(+), 19 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index 2f29f7932..e9e102488 100644 --- a/apt-pkg/acquire-method.cc +++ b/apt-pkg/acquire-method.cc @@ -23,7 +23,6 @@ #include #include -#include #include #include /*}}}*/ @@ -375,23 +374,34 @@ int pkgAcqMethod::Run(bool Single) return 0; } /*}}}*/ -// AcqMethod::Log - Send a log message /*{{{*/ +// AcqMethod::PrintStatus - privately really send a log/status message /*{{{*/ // --------------------------------------------------------------------- /* */ -void pkgAcqMethod::Log(const char *Format,...) +void pkgAcqMethod::PrintStatus(char const * const header, const char* Format, + va_list &args) const { string CurrentURI = ""; if (Queue != 0) CurrentURI = Queue->Uri; - fprintf(stdout, "101 Log\nURI: %s\nUsedMirror: %s\nMessage: ", - UsedMirror.c_str(), CurrentURI.c_str()); - + if (UsedMirror.empty() == true) + fprintf(stdout, "%s\nURI: %s\nMessage: ", + header, CurrentURI.c_str()); + else + fprintf(stdout, "%s\nURI: %s\nUsedMirror: %s\nMessage: ", + header, CurrentURI.c_str(), UsedMirror.c_str()); + vfprintf(stdout,Format,args); + std::cout << "\n\n" << std::flush; +} + /*}}}*/ +// AcqMethod::Log - Send a log message /*{{{*/ +// --------------------------------------------------------------------- +/* */ +void pkgAcqMethod::Log(const char *Format,...) +{ va_list args; va_start(args,Format); - vfprintf(stdout,Format,args); + PrintStatus("101 Log", Format, args); va_end(args); - - std::cout << "\n\n" << std::flush; } /*}}}*/ // AcqMethod::Status - Send a status message /*{{{*/ @@ -399,18 +409,10 @@ void pkgAcqMethod::Log(const char *Format,...) /* */ void pkgAcqMethod::Status(const char *Format,...) { - string CurrentURI = ""; - if (Queue != 0) - CurrentURI = Queue->Uri; - fprintf(stdout, "102 Status\nURI: %s\nUsedMirror: %s\nMessage: ", - UsedMirror.c_str(), CurrentURI.c_str()); - va_list args; va_start(args,Format); - vfprintf(stdout,Format,args); + PrintStatus("102 Status", Format, args); va_end(args); - - std::cout << "\n\n" << std::flush; } /*}}}*/ // AcqMethod::Redirect - Send a redirect message /*{{{*/ diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h index 03851e823..72efa8065 100644 --- a/apt-pkg/acquire-method.h +++ b/apt-pkg/acquire-method.h @@ -23,6 +23,7 @@ #include #include +#include class Hashes; class pkgAcqMethod @@ -78,6 +79,8 @@ class pkgAcqMethod bool MediaFail(string Required,string Drive); virtual void Exit() {}; + void PrintStatus(char const * const header, const char* Format, va_list &args) const; + public: enum CnfFlags {SingleInstance = (1<<0), Pipeline = (1<<1), SendConfig = (1<<2), diff --git a/debian/changelog b/debian/changelog index 125fa7f70..9f4edc0ee 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,6 +13,7 @@ apt (0.8.14.2) UNRELEASED; urgency=low * apt-pkg/acquire-method.cc: - write directly to stdout instead of creating the message in memory first before writing to avoid hitting limits + - fix order of CurrentURI and UsedMirror in Status() and Log() * apt-pkg/orderlist.cc: - let VisitRProvides report if the calls were successful * apt-pkg/deb/dpkgpm.cc: @@ -53,7 +54,7 @@ apt (0.8.14.2) UNRELEASED; urgency=low - dequote URL taken from Location in redirects as we will otherwise quote an already quoted string in the request later (Closes: #602412) - -- David Kalnischkies Tue, 10 May 2011 15:49:19 +0200 + -- David Kalnischkies Tue, 10 May 2011 18:51:15 +0200 apt (0.8.14.1) unstable; urgency=low -- cgit v1.2.3-70-g09d2 From df77d8a5fb5340b23fec5363f9a52704e940b048 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 11 May 2011 14:09:18 +0200 Subject: if critical or-group can't be satisfied, exit directly. --- apt-pkg/cacheiterators.h | 1 + apt-pkg/depcache.cc | 14 +++- apt-pkg/pkgcache.cc | 11 +++ debian/changelog | 3 +- test/integration/test-handling-broken-orgroups | 108 +++++++++++++++++++++++++ 5 files changed, 134 insertions(+), 3 deletions(-) create mode 100755 test/integration/test-handling-broken-orgroups (limited to 'apt-pkg') diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 8f9f811da..0c9813c6d 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -287,6 +287,7 @@ class pkgCache::DepIterator : public Iterator { inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->ParentVer].ParentPkg);}; inline bool Reverse() const {return Type == DepRev;}; bool IsCritical() const; + bool IsNegative() const; void GlobOr(DepIterator &Start,DepIterator &End); Version **AllTargets() const; bool SmartTargetPkg(PkgIterator &Result) const; diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 474313a0d..34ead1726 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1145,8 +1145,18 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, /* If we are in an or group locate the first or that can succeed. We have already cached this.. */ - for (; Ors > 1 && (DepState[Start->ID] & DepCVer) != DepCVer; Ors--) - Start++; + for (; Ors > 1 && (DepState[Start->ID] & DepCVer) != DepCVer; --Ors) + ++Start; + if (Ors == 1 && (DepState[Start->ID] &DepCVer) != DepCVer && Start.IsNegative() == false) + { + if(DebugAutoInstall == true) + std::clog << OutputInDepth(Depth) << Start << " can't be satisfied!" << std::endl; + if (Start.IsCritical() == false) + continue; + // if the dependency was critical, we can't install it, so remove it again + MarkDelete(Pkg,false,Depth + 1, false); + return; + } /* This bit is for processing the possibilty of an install/upgrade fixing the problem */ diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 862d05348..6c12b4581 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -530,6 +530,17 @@ bool pkgCache::DepIterator::IsCritical() const return false; } /*}}}*/ +// DepIterator::IsNegative - Returns true if the dep is a negative one /*{{{*/ +// --------------------------------------------------------------------- +/* Some dependencies are positive like Depends and Recommends, others + are negative like Conflicts which can and should be handled differently */ +bool pkgCache::DepIterator::IsNegative() const +{ + return S->Type == Dep::DpkgBreaks || + S->Type == Dep::Conflicts || + S->Type == Dep::Obsoletes; +} + /*}}}*/ // DepIterator::SmartTargetPkg - Resolve dep target pointers w/provides /*{{{*/ // --------------------------------------------------------------------- /* This intellegently looks at dep target packages and tries to figure diff --git a/debian/changelog b/debian/changelog index 9f4edc0ee..2c578d258 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,7 @@ apt (0.8.14.2) UNRELEASED; urgency=low * apt-pkg/depcache.cc: - really include 'rc' packages in the delete count by fixing a typo which exists since 1999 in the source… (LP: #761175) + - if critical or-group can't be satisfied, exit directly. * apt-pkg/acquire-method.cc: - write directly to stdout instead of creating the message in memory first before writing to avoid hitting limits @@ -54,7 +55,7 @@ apt (0.8.14.2) UNRELEASED; urgency=low - dequote URL taken from Location in redirects as we will otherwise quote an already quoted string in the request later (Closes: #602412) - -- David Kalnischkies Tue, 10 May 2011 18:51:15 +0200 + -- David Kalnischkies Wed, 11 May 2011 13:58:40 +0200 apt (0.8.14.1) unstable; urgency=low diff --git a/test/integration/test-handling-broken-orgroups b/test/integration/test-handling-broken-orgroups new file mode 100755 index 000000000..d88ad0000 --- /dev/null +++ b/test/integration/test-handling-broken-orgroups @@ -0,0 +1,108 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' + +insertpackage 'unstable' 'cool' 'all' '1.0-1' +insertpackage 'unstable' 'stuff' 'all' '1.0-1' +insertpackage 'unstable' 'coolstuff' 'all' '1.0-1' 'Depends: cool | stuff' +insertpackage 'unstable' 'coolstuff2' 'all' '1.0-1' 'Depends: cool2 | stuff' +insertpackage 'unstable' 'coolstuff-broken' 'all' '1.0-1' 'Depends: cool2 | stuff2' +insertpackage 'unstable' 'coolstuff-brokenrec' 'all' '1.0-1' 'Recommends: cool2 | stuff2' +insertpackage 'unstable' 'coolstuff-conflict' 'all' '1.0-1' 'Depends: cool | stuff +Conflicts: cool' +insertpackage 'unstable' 'coolstuff-provided' 'all' '1.0-1' 'Depends: cool2 | stuff-abi' +insertpackage 'unstable' 'extrastuff' 'all' '1.0-1' 'Provides: stuff-abi' + +insertpackage 'unstable' 'coolstuff-provided-broken' 'all' '1.0-1' 'Depends: cool2 | stuff-abi-2' +insertpackage 'unstable' 'extrastuff' 'all' '1.0-1' 'Depends: stuff2 +Provides: stuff-abi-2' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + cool +The following NEW packages will be installed: + cool coolstuff +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst cool (1.0-1 unstable [all]) +Inst coolstuff (1.0-1 unstable [all]) +Conf cool (1.0-1 unstable [all]) +Conf coolstuff (1.0-1 unstable [all])' aptget install coolstuff -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + stuff +The following NEW packages will be installed: + coolstuff2 stuff +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst stuff (1.0-1 unstable [all]) +Inst coolstuff2 (1.0-1 unstable [all]) +Conf stuff (1.0-1 unstable [all]) +Conf coolstuff2 (1.0-1 unstable [all])' aptget install coolstuff2 -s + +testequal 'Reading package lists... +Building dependency tree... +Some packages could not be installed. This may mean that you have +requested an impossible situation or if you are using the unstable +distribution that some required packages have not yet been created +or been moved out of Incoming. +The following information may help to resolve the situation: + +The following packages have unmet dependencies: + coolstuff-broken : Depends: cool2 but it is not installable or + stuff2 but it is not installable +E: Broken packages' aptget install coolstuff-broken -s + +testequal 'Reading package lists... +Building dependency tree... +Recommended packages: + cool2 stuff2 +The following NEW packages will be installed: + coolstuff-brokenrec +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst coolstuff-brokenrec (1.0-1 unstable [all]) +Conf coolstuff-brokenrec (1.0-1 unstable [all])' aptget install coolstuff-brokenrec -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + stuff +The following NEW packages will be installed: + coolstuff-conflict stuff +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst stuff (1.0-1 unstable [all]) +Inst coolstuff-conflict (1.0-1 unstable [all]) +Conf stuff (1.0-1 unstable [all]) +Conf coolstuff-conflict (1.0-1 unstable [all])' aptget install coolstuff-conflict -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + extrastuff +The following NEW packages will be installed: + coolstuff-provided extrastuff +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst extrastuff (1.0-1 unstable [all]) +Inst coolstuff-provided (1.0-1 unstable [all]) +Conf extrastuff (1.0-1 unstable [all]) +Conf coolstuff-provided (1.0-1 unstable [all])' aptget install coolstuff-provided -s + +testequal 'Reading package lists... +Building dependency tree... +Some packages could not be installed. This may mean that you have +requested an impossible situation or if you are using the unstable +distribution that some required packages have not yet been created +or been moved out of Incoming. +The following information may help to resolve the situation: + +The following packages have unmet dependencies: + coolstuff-provided-broken : Depends: cool2 but it is not installable or + stuff-abi-2 +E: Broken packages' aptget install coolstuff-provided-broken -s -- cgit v1.2.3-70-g09d2 From 359e46db58b85497fd232fbe912b8a62e77079c5 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 11 May 2011 16:05:30 +0200 Subject: convert a lot of places to use IsNegative instead of checking by hand for the three different dependencies --- apt-pkg/algorithms.cc | 31 ++++++++----------------------- apt-pkg/depcache.cc | 25 +++++++------------------ apt-pkg/orderlist.cc | 16 ++++------------ apt-pkg/pkgcache.cc | 12 +++--------- cmdline/apt-cache.cc | 14 ++++---------- 5 files changed, 26 insertions(+), 72 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index e7703ca93..2dae4258a 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -101,9 +101,7 @@ bool pkgSimulate::Install(PkgIterator iPkg,string /*File*/) DepIterator Start; DepIterator End; D.GlobOr(Start,End); - if (Start->Type == pkgCache::Dep::Conflicts || - Start->Type == pkgCache::Dep::DpkgBreaks || - Start->Type == pkgCache::Dep::Obsoletes || + if (Start.IsNegative() == true || End->Type == pkgCache::Dep::PreDepends) { if ((Sim[End] & pkgDepCache::DepGInstall) == 0) @@ -695,9 +693,7 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) { /* We let the algorithm deal with conflicts on its next iteration, it is much smarter than us */ - if (Start->Type == pkgCache::Dep::Conflicts || - Start->Type == pkgCache::Dep::DpkgBreaks || - Start->Type == pkgCache::Dep::Obsoletes) + if (Start.IsNegative() == true) break; if (Debug == true) @@ -926,9 +922,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) if a package has a dep on another package that cant be found */ SPtrArray VList = Start.AllTargets(); if (*VList == 0 && (Flags[I->ID] & Protected) != Protected && - Start->Type != pkgCache::Dep::Conflicts && - Start->Type != pkgCache::Dep::DpkgBreaks && - Start->Type != pkgCache::Dep::Obsoletes && + Start.IsNegative() == false && Cache[I].NowBroken() == false) { if (InOr == true) @@ -953,10 +947,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) at is not the currently selected version of the package, which means it is not necessary to remove/keep */ - if (Cache[Pkg].InstallVer != Ver && - (Start->Type == pkgCache::Dep::Conflicts || - Start->Type == pkgCache::Dep::DpkgBreaks || - Start->Type == pkgCache::Dep::Obsoletes)) + if (Cache[Pkg].InstallVer != Ver && Start.IsNegative() == true) { if (Debug) clog << " Conflicts//Breaks against version " @@ -974,9 +965,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) fiddle with the VList package */ if (Scores[I->ID] <= Scores[Pkg->ID] || ((Cache[Start] & pkgDepCache::DepNow) == 0 && - End->Type != pkgCache::Dep::Conflicts && - End->Type != pkgCache::Dep::DpkgBreaks && - End->Type != pkgCache::Dep::Obsoletes)) + End.IsNegative() == false)) { // Try a little harder to fix protected packages.. if ((Flags[I->ID] & Protected) == Protected) @@ -1083,10 +1072,8 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) } // Hm, nothing can possibly satisify this dep. Nuke it. - if (VList[0] == 0 && - Start->Type != pkgCache::Dep::Conflicts && - Start->Type != pkgCache::Dep::DpkgBreaks && - Start->Type != pkgCache::Dep::Obsoletes && + if (VList[0] == 0 && + Start.IsNegative() == false && (Flags[I->ID] & Protected) != Protected) { bool Installed = Cache[I].Install(); @@ -1132,9 +1119,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) Change = true; if ((Cache[J->Dep] & pkgDepCache::DepGNow) == 0) { - if (J->Dep->Type == pkgCache::Dep::Conflicts || - J->Dep->Type == pkgCache::Dep::DpkgBreaks || - J->Dep->Type == pkgCache::Dep::Obsoletes) + if (J->Dep.IsNegative() == true) { if (Debug == true) clog << " Fixing " << I.FullName(false) << " via remove of " << J->Pkg.FullName(false) << endl; diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 34ead1726..18b6d160a 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -339,8 +339,7 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res) /* Check simple depends. A depends -should- never self match but we allow it anyhow because dpkg does. Technically it is a packaging bug. Conflicts may never self match */ - if (Dep.TargetPkg() != Dep.ParentPkg() || - (Dep->Type != Dep::Conflicts && Dep->Type != Dep::DpkgBreaks && Dep->Type != Dep::Obsoletes)) + if (Dep.TargetPkg() != Dep.ParentPkg() || Dep.IsNegative() == false) { PkgIterator Pkg = Dep.TargetPkg(); // Check the base package @@ -370,8 +369,7 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res) { /* Provides may never be applied against the same package (or group) if it is a conflicts. See the comment above. */ - if (P.OwnerPkg()->Group == Pkg->Group && - (Dep->Type == Dep::Conflicts || Dep->Type == Dep::DpkgBreaks)) + if (P.OwnerPkg()->Group == Pkg->Group && Dep.IsNegative() == true) continue; // Check if the provides is a hit @@ -594,9 +592,7 @@ void pkgDepCache::BuildGroupOrs(VerIterator const &V) /* Invert for Conflicts. We have to do this twice to get the right sense for a conflicts group */ - if (D->Type == Dep::Conflicts || - D->Type == Dep::DpkgBreaks || - D->Type == Dep::Obsoletes) + if (D.IsNegative() == true) State = ~State; // Add to the group if we are within an or.. @@ -607,9 +603,7 @@ void pkgDepCache::BuildGroupOrs(VerIterator const &V) Group = 0; // Invert for Conflicts - if (D->Type == Dep::Conflicts || - D->Type == Dep::DpkgBreaks || - D->Type == Dep::Obsoletes) + if (D.IsNegative() == true) State = ~State; } } @@ -742,9 +736,7 @@ void pkgDepCache::Update(OpProgress *Prog) Group = 0; // Invert for Conflicts - if (D->Type == Dep::Conflicts || - D->Type == Dep::DpkgBreaks || - D->Type == Dep::Obsoletes) + if (D.IsNegative() == true) State = ~State; } } @@ -774,9 +766,7 @@ void pkgDepCache::Update(DepIterator D) State = DependencyState(D); // Invert for Conflicts - if (D->Type == Dep::Conflicts || - D->Type == Dep::DpkgBreaks || - D->Type == Dep::Obsoletes) + if (D.IsNegative() == true) State = ~State; RemoveStates(D.ParentPkg()); @@ -1222,8 +1212,7 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, /* For conflicts we just de-install the package and mark as auto, Conflicts may not have or groups. For dpkg's Breaks we try to upgrade the package. */ - if (Start->Type == Dep::Conflicts || Start->Type == Dep::Obsoletes || - Start->Type == Dep::DpkgBreaks) + if (Start.IsNegative() == true) { for (Version **I = List; *I != 0; I++) { diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc index eab05a497..ba43bc757 100644 --- a/apt-pkg/orderlist.cc +++ b/apt-pkg/orderlist.cc @@ -507,15 +507,11 @@ bool pkgOrderList::VisitProvides(DepIterator D,bool Critical) if (Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing) continue; - if (D->Type != pkgCache::Dep::Conflicts && - D->Type != pkgCache::Dep::DpkgBreaks && - D->Type != pkgCache::Dep::Obsoletes && + if (D.IsNegative() == false && Cache[Pkg].InstallVer != *I) continue; - if ((D->Type == pkgCache::Dep::Conflicts || - D->Type == pkgCache::Dep::DpkgBreaks || - D->Type == pkgCache::Dep::Obsoletes) && + if (D.IsNegative() == true && (Version *)Pkg.CurrentVer() != *I) continue; @@ -647,9 +643,7 @@ bool pkgOrderList::DepUnPackCrit(DepIterator D) { /* Forward critical dependencies MUST be correct before the package can be unpacked. */ - if (D->Type != pkgCache::Dep::Conflicts && - D->Type != pkgCache::Dep::DpkgBreaks && - D->Type != pkgCache::Dep::Obsoletes && + if (D.IsNegative() == false && D->Type != pkgCache::Dep::PreDepends) continue; @@ -1077,9 +1071,7 @@ bool pkgOrderList::CheckDep(DepIterator D) /* Conflicts requires that all versions are not present, depends just needs one */ - if (D->Type != pkgCache::Dep::Conflicts && - D->Type != pkgCache::Dep::DpkgBreaks && - D->Type != pkgCache::Dep::Obsoletes) + if (D.IsNegative() == false) { /* Try to find something that does not have the after flag set if at all possible */ diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 6c12b4581..38e4e904e 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -521,9 +521,7 @@ std::string pkgCache::PkgIterator::FullName(bool const &Pretty) const conflicts (including dpkg's Breaks fields). */ bool pkgCache::DepIterator::IsCritical() const { - if (S->Type == pkgCache::Dep::Conflicts || - S->Type == pkgCache::Dep::DpkgBreaks || - S->Type == pkgCache::Dep::Obsoletes || + if (IsNegative() == true || S->Type == pkgCache::Dep::Depends || S->Type == pkgCache::Dep::PreDepends) return true; @@ -618,9 +616,7 @@ pkgCache::Version **pkgCache::DepIterator::AllTargets() const if (Owner->VS->CheckDep(I.VerStr(),S->CompareOp,TargetVer()) == false) continue; - if ((S->Type == pkgCache::Dep::Conflicts || - S->Type == pkgCache::Dep::DpkgBreaks || - S->Type == pkgCache::Dep::Obsoletes) && + if (IsNegative() == true && ParentPkg() == I.ParentPkg()) continue; @@ -635,9 +631,7 @@ pkgCache::Version **pkgCache::DepIterator::AllTargets() const if (Owner->VS->CheckDep(I.ProvideVersion(),S->CompareOp,TargetVer()) == false) continue; - if ((S->Type == pkgCache::Dep::Conflicts || - S->Type == pkgCache::Dep::DpkgBreaks || - S->Type == pkgCache::Dep::Obsoletes) && + if (IsNegative() == true && ParentPkg() == I.OwnerPkg()) continue; diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index f66c22c20..232bb93ec 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -121,9 +121,7 @@ bool ShowUnMet(pkgCache::VerIterator const &V, bool const &Important) continue; // Skip conflicts and replaces - if (End->Type == pkgCache::Dep::DpkgBreaks || - End->Type == pkgCache::Dep::Replaces || - End->Type == pkgCache::Dep::Conflicts) + if (End.IsNegative() == true) continue; // Verify the or group @@ -848,10 +846,7 @@ bool XVcg(CommandLine &CmdL) { /* If a conflicts does not meet anything in the database then show the relation but do not recurse */ - if (Hit == false && - (D->Type == pkgCache::Dep::Conflicts || - D->Type == pkgCache::Dep::DpkgBreaks || - D->Type == pkgCache::Dep::Obsoletes)) + if (Hit == false && D.IsNegative() == true) { if (Show[D.TargetPkg()->ID] == None && Show[D.TargetPkg()->ID] != ToShow) @@ -1060,9 +1055,7 @@ bool Dotty(CommandLine &CmdL) { /* If a conflicts does not meet anything in the database then show the relation but do not recurse */ - if (Hit == false && - (D->Type == pkgCache::Dep::Conflicts || - D->Type == pkgCache::Dep::Obsoletes)) + if (Hit == false && D.IsNegative() == true) { if (Show[D.TargetPkg()->ID] == None && Show[D.TargetPkg()->ID] != ToShow) @@ -1082,6 +1075,7 @@ bool Dotty(CommandLine &CmdL) { case pkgCache::Dep::Conflicts: case pkgCache::Dep::Obsoletes: + case pkgCache::Dep::DpkgBreaks: printf("[color=springgreen];\n"); break; -- cgit v1.2.3-70-g09d2 From e92f6a18468131f391e4b91f77c08560d653b20f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 12 May 2011 12:45:37 +0200 Subject: move the broken dependency detection above the new recommends detection as if the recommends can't be installed there is not much sense in checking if it a new recommends or not --- apt-pkg/depcache.cc | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 18b6d160a..508e45962 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1078,7 +1078,22 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, */ if (IsImportantDep(Start) == false) continue; - + + /* If we are in an or group locate the first or that can + succeed. We have already cached this.. */ + for (; Ors > 1 && (DepState[Start->ID] & DepCVer) != DepCVer; --Ors) + ++Start; + if (Ors == 1 && (DepState[Start->ID] &DepCVer) != DepCVer && Start.IsNegative() == false) + { + if(DebugAutoInstall == true) + std::clog << OutputInDepth(Depth) << Start << " can't be satisfied!" << std::endl; + if (Start.IsCritical() == false) + continue; + // if the dependency was critical, we can't install it, so remove it again + MarkDelete(Pkg,false,Depth + 1, false); + return; + } + /* Check if any ImportantDep() (but not Critical) were added * since we installed the package. Also check for deps that * were satisfied in the past: for instance, if a version @@ -1133,21 +1148,6 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, && !ForceImportantDeps) continue; - /* If we are in an or group locate the first or that can - succeed. We have already cached this.. */ - for (; Ors > 1 && (DepState[Start->ID] & DepCVer) != DepCVer; --Ors) - ++Start; - if (Ors == 1 && (DepState[Start->ID] &DepCVer) != DepCVer && Start.IsNegative() == false) - { - if(DebugAutoInstall == true) - std::clog << OutputInDepth(Depth) << Start << " can't be satisfied!" << std::endl; - if (Start.IsCritical() == false) - continue; - // if the dependency was critical, we can't install it, so remove it again - MarkDelete(Pkg,false,Depth + 1, false); - return; - } - /* This bit is for processing the possibilty of an install/upgrade fixing the problem */ SPtrArray List = Start.AllTargets(); -- cgit v1.2.3-70-g09d2 From 6ed085162423d0c3f1b7f432af1226d59654afbd Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 13 May 2011 00:07:22 +0200 Subject: rewrite new and previously satisfied important dependency detection in MarkInstall to be a bit more easy to read and possibily a bit faster - and add a small testcase for these situations to ensure the same behaviour --- apt-pkg/depcache.cc | 83 +++++----- .../test-bug-470115-new-and-tighten-recommends | 172 +++++++++++++++++++++ 2 files changed, 212 insertions(+), 43 deletions(-) create mode 100755 test/integration/test-bug-470115-new-and-tighten-recommends (limited to 'apt-pkg') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 508e45962..e9fa097aa 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1101,53 +1101,50 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, * package should follow that Recommends rather than causing the * dependency to be removed. (bug #470115) */ - bool isNewImportantDep = false; - bool isPreviouslySatisfiedImportantDep = false; - if(!ForceImportantDeps && !Start.IsCritical()) + if (Pkg->CurrentVer != 0 && ForceImportantDeps == false && Start.IsCritical() == false) { - bool found=false; - VerIterator instVer = Pkg.CurrentVer(); - if(!instVer.end()) + bool isNewImportantDep = true; + bool isPreviouslySatisfiedImportantDep = false; + for (DepIterator D = Pkg.CurrentVer().DependsList(); D.end() != true; ++D) { - for (DepIterator D = instVer.DependsList(); D.end() != true; D++) - { - //FIXME: deal better with or-groups(?) - if(IsImportantDep(D) && !D.IsCritical() && - Start.TargetPkg() == D.TargetPkg()) - { - if(!isPreviouslySatisfiedImportantDep) - { - DepIterator D2 = D; - while((D2->CompareOp & Dep::Or) != 0) - ++D2; - - isPreviouslySatisfiedImportantDep = - (((*this)[D2] & DepGNow) != 0); - } - - found=true; - } - } - // this is a new dep if it was not found to be already - // a important dep of the installed pacakge - isNewImportantDep = !found; + //FIXME: Should we handle or-group better here? + // We do not check if the package we look for is part of the same or-group + // we might find while searching, but could that really be a problem? + if (D.IsCritical() == true || IsImportantDep(D) == false || + Start.TargetPkg() != D.TargetPkg()) + continue; + + isNewImportantDep = false; + + while ((D->CompareOp & Dep::Or) != 0) + ++D; + + isPreviouslySatisfiedImportantDep = (((*this)[D] & DepGNow) != 0); + if (isPreviouslySatisfiedImportantDep == true) + break; + } + + if(isNewImportantDep == true) + { + if (DebugAutoInstall == true) + std::clog << OutputInDepth(Depth) << "new important dependency: " + << Start.TargetPkg().FullName() << std::endl; + } + else if(isPreviouslySatisfiedImportantDep == true) + { + if (DebugAutoInstall == true) + std::clog << OutputInDepth(Depth) << "previously satisfied important dependency on " + << Start.TargetPkg().FullName() << std::endl; + } + else + { + if (DebugAutoInstall == true) + std::clog << OutputInDepth(Depth) << "ignore old unsatisfied important dependency on " + << Start.TargetPkg().FullName() << std::endl; + continue; } } - if(isNewImportantDep) - if(DebugAutoInstall == true) - std::clog << OutputInDepth(Depth) << "new important dependency: " - << Start.TargetPkg().Name() << std::endl; - if(isPreviouslySatisfiedImportantDep) - if(DebugAutoInstall == true) - std::clog << OutputInDepth(Depth) << "previously satisfied important dependency on " - << Start.TargetPkg().Name() << std::endl; - - // skip important deps if the package is already installed - if (Pkg->CurrentVer != 0 && Start.IsCritical() == false - && !isNewImportantDep && !isPreviouslySatisfiedImportantDep - && !ForceImportantDeps) - continue; - + /* This bit is for processing the possibilty of an install/upgrade fixing the problem */ SPtrArray List = Start.AllTargets(); diff --git a/test/integration/test-bug-470115-new-and-tighten-recommends b/test/integration/test-bug-470115-new-and-tighten-recommends new file mode 100755 index 000000000..6bc22ea7b --- /dev/null +++ b/test/integration/test-bug-470115-new-and-tighten-recommends @@ -0,0 +1,172 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' + +insertinstalledpackage 'cool' 'all' '1' +insertinstalledpackage 'stuff' 'all' '1' +insertinstalledpackage 'coolstuff' 'all' '1' + +insertpackage 'unstable' 'cool' 'all' '2' +insertpackage 'unstable' 'stuff' 'all' '2' +insertpackage 'unstable' 'coolstuff' 'all' '2' +insertpackage 'unstable' 'super' 'all' '2' + +insertinstalledpackage 'tighten-cool' 'all' '1' 'Recommends: cool (>= 1)' +insertpackage 'unstable' 'tighten-cool' 'all' '2' 'Recommends: cool (>= 2)' + +insertinstalledpackage 'tighten-coolorstuff' 'all' '1' 'Recommends: cool (>= 1) | stuff (>= 1)' +insertpackage 'unstable' 'tighten-coolorstuff' 'all' '2' 'Recommends: stuff (>= 2) | cool (>= 2)' + +insertinstalledpackage 'tighten-coolorstuff2' 'all' '1' 'Recommends: cool (>= 1) | stuff (>= 1)' +insertpackage 'unstable' 'tighten-coolorstuff2' 'all' '2' 'Recommends: stuff2 (>= 2) | cool (>= 2)' + +insertinstalledpackage 'newrec-cool' 'all' '1' +insertpackage 'unstable' 'newrec-cool' 'all' '2' 'Recommends: cool (>= 2)' + +insertinstalledpackage 'newrec-super' 'all' '1' +insertpackage 'unstable' 'newrec-super' 'all' '2' 'Recommends: super' + +insertinstalledpackage 'newrec-coolorstuff' 'all' '1' +insertpackage 'unstable' 'newrec-coolorstuff' 'all' '2' 'Recommends: cool (>= 2) | stuff (>= 2)' + +insertinstalledpackage 'cool-gone' 'all' '1' 'Recommends: cool (>= 1) | stuff (>= 2)' +insertpackage 'unstable' 'cool-gone' 'all' '2' 'Recommends: stuff (>= 2)' + +insertinstalledpackage 'super-overtake' 'all' '1' 'Recommends: cool | super, stuff | super' +insertpackage 'unstable' 'super-overtake' 'all' '2' 'Recommends: stuff (>= 3) | super, super | cool (>= 2)' + +insertinstalledpackage 'upgrade-over-new' 'all' '1' 'Recommends: cool' +insertpackage 'unstable' 'upgrade-over-new' 'all' '2' 'Recommends: cool (>= 2) | super' + +insertinstalledpackage 'now-satisfiable' 'all' '1' 'Recommends: cool (>= 3)' +insertpackage 'unstable' 'now-satisfiable' 'all' '2' 'Recommends: cool (>= 2)' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + cool +The following packages will be upgraded: + cool tighten-cool +2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded. +Inst cool [1] (2 unstable [all]) +Inst tighten-cool [1] (2 unstable [all]) +Conf cool (2 unstable [all]) +Conf tighten-cool (2 unstable [all])' aptget install tighten-cool -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + stuff +The following packages will be upgraded: + stuff tighten-coolorstuff +2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded. +Inst stuff [1] (2 unstable [all]) +Inst tighten-coolorstuff [1] (2 unstable [all]) +Conf stuff (2 unstable [all]) +Conf tighten-coolorstuff (2 unstable [all])' aptget install tighten-coolorstuff -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + cool +The following packages will be upgraded: + cool tighten-coolorstuff2 +2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded. +Inst cool [1] (2 unstable [all]) +Inst tighten-coolorstuff2 [1] (2 unstable [all]) +Conf cool (2 unstable [all]) +Conf tighten-coolorstuff2 (2 unstable [all])' aptget install tighten-coolorstuff2 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + cool +The following packages will be upgraded: + cool newrec-cool +2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded. +Inst cool [1] (2 unstable [all]) +Inst newrec-cool [1] (2 unstable [all]) +Conf cool (2 unstable [all]) +Conf newrec-cool (2 unstable [all])' aptget install newrec-cool -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + super +The following NEW packages will be installed: + super +The following packages will be upgraded: + newrec-super +1 upgraded, 1 newly installed, 0 to remove and 12 not upgraded. +Inst newrec-super [1] (2 unstable [all]) +Inst super (2 unstable [all]) +Conf newrec-super (2 unstable [all]) +Conf super (2 unstable [all])' aptget install newrec-super -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + cool +The following packages will be upgraded: + cool newrec-coolorstuff +2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded. +Inst cool [1] (2 unstable [all]) +Inst newrec-coolorstuff [1] (2 unstable [all]) +Conf cool (2 unstable [all]) +Conf newrec-coolorstuff (2 unstable [all])' aptget install newrec-coolorstuff -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + stuff +The following packages will be upgraded: + cool-gone stuff +2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded. +Inst cool-gone [1] (2 unstable [all]) +Inst stuff [1] (2 unstable [all]) +Conf cool-gone (2 unstable [all]) +Conf stuff (2 unstable [all])' aptget install cool-gone -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + super +The following NEW packages will be installed: + super +The following packages will be upgraded: + super-overtake +1 upgraded, 1 newly installed, 0 to remove and 12 not upgraded. +Inst super (2 unstable [all]) +Inst super-overtake [1] (2 unstable [all]) +Conf super (2 unstable [all]) +Conf super-overtake (2 unstable [all])' aptget install super-overtake -s + +# if super would be in front, we would get a new here as it is new and +# the first option in an or-group should be the preferred one… +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + cool +The following packages will be upgraded: + cool upgrade-over-new +2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded. +Inst cool [1] (2 unstable [all]) +Inst upgrade-over-new [1] (2 unstable [all]) +Conf cool (2 unstable [all]) +Conf upgrade-over-new (2 unstable [all])' aptget install upgrade-over-new -s + +# the recommends wasn't used before so while we could do it now, +# the user doesn't seem to need it so avoid upgrading it +testequal 'Reading package lists... +Building dependency tree... +The following packages will be upgraded: + now-satisfiable +1 upgraded, 0 newly installed, 0 to remove and 12 not upgraded. +Inst now-satisfiable [1] (2 unstable [all]) +Conf now-satisfiable (2 unstable [all])' aptget install now-satisfiable -s -- cgit v1.2.3-70-g09d2 From fc3eb5b295879cf899182f89b41d6bc66b27ad98 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 13 May 2011 01:12:21 +0200 Subject: * apt-pkg/contrib/netrc.cc: - replace non-posix gnu-extension strdupa with strdup --- apt-pkg/contrib/netrc.cc | 12 ++++++++---- debian/changelog | 4 +++- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/contrib/netrc.cc b/apt-pkg/contrib/netrc.cc index d8027fc24..34f472ee1 100644 --- a/apt-pkg/contrib/netrc.cc +++ b/apt-pkg/contrib/netrc.cc @@ -160,10 +160,10 @@ void maybe_add_auth (URI &Uri, string NetRCFile) { char login[64] = ""; char password[64] = ""; - char *netrcfile = strdupa (NetRCFile.c_str ()); + char *netrcfile = strdup(NetRCFile.c_str()); // first check for a generic host based netrc entry - char *host = strdupa (Uri.Host.c_str ()); + char *host = strdup(Uri.Host.c_str()); if (host && parsenetrc (host, login, password, netrcfile) == 0) { if (_config->FindB("Debug::Acquire::netrc", false) == true) @@ -173,13 +173,16 @@ void maybe_add_auth (URI &Uri, string NetRCFile) << std::endl; Uri.User = string (login); Uri.Password = string (password); + free(netrcfile); + free(host); return; } + free(host); // if host did not work, try Host+Path next, this will trigger // a lookup uri.startswith(host) in the netrc file parser (because // of the "/" - char *hostpath = strdupa (string(Uri.Host+Uri.Path).c_str ()); + char *hostpath = strdup(string(Uri.Host+Uri.Path).c_str()); if (hostpath && parsenetrc (hostpath, login, password, netrcfile) == 0) { if (_config->FindB("Debug::Acquire::netrc", false) == true) @@ -189,8 +192,9 @@ void maybe_add_auth (URI &Uri, string NetRCFile) << std::endl; Uri.User = string (login); Uri.Password = string (password); - return; } + free(netrcfile); + free(hostpath); } } } diff --git a/debian/changelog b/debian/changelog index 2c578d258..edcd2b851 100644 --- a/debian/changelog +++ b/debian/changelog @@ -54,8 +54,10 @@ apt (0.8.14.2) UNRELEASED; urgency=low servers just send an absolute path so still deal with it properly - dequote URL taken from Location in redirects as we will otherwise quote an already quoted string in the request later (Closes: #602412) + * apt-pkg/contrib/netrc.cc: + - replace non-posix gnu-extension strdupa with strdup - -- David Kalnischkies Wed, 11 May 2011 13:58:40 +0200 + -- David Kalnischkies Fri, 13 May 2011 01:08:04 +0200 apt (0.8.14.1) unstable; urgency=low -- cgit v1.2.3-70-g09d2 From f895e2ce115affb58504ca7c8801e8deb2b01657 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 13 May 2011 01:14:50 +0200 Subject: MAP_ANON is deprecated in favor of MAP_ANONYMOUS, but telesphoreo needs to ships a patch for this so pretend to be nice and make it work (TM) --- apt-pkg/contrib/mmap.cc | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'apt-pkg') diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc index 9945b1606..19381ae47 100644 --- a/apt-pkg/contrib/mmap.cc +++ b/apt-pkg/contrib/mmap.cc @@ -237,11 +237,19 @@ DynamicMMap::DynamicMMap(unsigned long Flags,unsigned long const &WorkSpace, if ((this->Flags & Fallback) != Fallback) { // Set the permissions. int Prot = PROT_READ; +#ifdef MAP_ANONYMOUS int Map = MAP_PRIVATE | MAP_ANONYMOUS; +#else + int Map = MAP_PRIVATE | MAP_ANON; +#endif if ((this->Flags & ReadOnly) != ReadOnly) Prot |= PROT_WRITE; if ((this->Flags & Public) == Public) +#ifdef MAP_ANONYMOUS Map = MAP_SHARED | MAP_ANONYMOUS; +#else + Map = MAP_SHARED | MAP_ANON; +#endif // use anonymous mmap() to get the memory Base = (unsigned char*) mmap(0, WorkSpace, Prot, Map, -1, 0); -- cgit v1.2.3-70-g09d2 From d77b985a309c379d4978525172a72b728fecd15e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 16 May 2011 11:41:43 +0200 Subject: * apt-pkg/packagemanager.cc: - ensure for Multi-Arch:same packages that they are unpacked in lock step even in immediate configuration (Closes: #618288) --- apt-pkg/packagemanager.cc | 44 ++++++++++++++++++---- apt-pkg/packagemanager.h | 2 + debian/changelog | 5 ++- .../test-bug-618288-multiarch-same-lockstep | 32 ++++++++++++++++ 4 files changed, 75 insertions(+), 8 deletions(-) create mode 100755 test/integration/test-bug-618288-multiarch-same-lockstep (limited to 'apt-pkg') diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 4c655cb7b..fe9f6eb68 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -319,6 +319,17 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg) List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States); } + if (Cache[Pkg].InstVerIter(Cache)->MultiArch == pkgCache::Version::Same) + for (PkgIterator P = Pkg.Group().PackageList(); + P.end() == false; P = Pkg.Group().NextPkg(P)) + { + if (Pkg == P || List->IsFlag(P,pkgOrderList::Configured) == true || + Cache[P].InstallVer == 0 || (P.CurrentVer() == Cache[P].InstallVer && + (Cache[Pkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall)) + continue; + SmartConfigure(P); + } + // Sanity Check if (List->IsFlag(Pkg,pkgOrderList::Configured) == false) return _error->Error(_("Could not perform immediate configuration on '%s'. " @@ -474,22 +485,29 @@ bool pkgPackageManager::SmartRemove(PkgIterator Pkg) // --------------------------------------------------------------------- /* This performs the task of handling pre-depends. */ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg) +{ + return SmartUnPack(Pkg, true); +} +bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate) { // Check if it is already unpacked if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure && Cache[Pkg].Keep() == true) { List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States); - if (List->IsFlag(Pkg,pkgOrderList::Immediate) == true) + if (Immediate == true && + List->IsFlag(Pkg,pkgOrderList::Immediate) == true) if (SmartConfigure(Pkg) == false) return _error->Error(_("Could not perform immediate configuration on already unpacked '%s'. " "Please see man 5 apt.conf under APT::Immediate-Configure for details."),Pkg.Name()); return true; } + VerIterator const instVer = Cache[Pkg].InstVerIter(Cache); + /* See if this packages install version has any predependencies that are not met by 'now' packages. */ - for (DepIterator D = Cache[Pkg].InstVerIter(Cache).DependsList(); + for (DepIterator D = instVer.DependsList(); D.end() == false; ) { // Compute a single dependency element (glob or) @@ -575,20 +593,32 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg) // Check for reverse conflicts. if (CheckRConflicts(Pkg,Pkg.RevDependsList(), - Cache[Pkg].InstVerIter(Cache).VerStr()) == false) + instVer.VerStr()) == false) return false; - for (PrvIterator P = Cache[Pkg].InstVerIter(Cache).ProvidesList(); + for (PrvIterator P = instVer.ProvidesList(); P.end() == false; P++) CheckRConflicts(Pkg,P.ParentPkg().RevDependsList(),P.ProvideVersion()); + List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States); + + if (instVer->MultiArch == pkgCache::Version::Same) + for (PkgIterator P = Pkg.Group().PackageList(); + P.end() == false; P = Pkg.Group().NextPkg(P)) + { + if (Pkg == P || List->IsFlag(P,pkgOrderList::UnPacked) == true || + Cache[P].InstallVer == 0 || (P.CurrentVer() == Cache[P].InstallVer && + (Cache[Pkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall)) + continue; + SmartUnPack(P, false); + } + if(Install(Pkg,FileNames[Pkg->ID]) == false) return false; - List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States); - // Perform immedate configuration of the package. - if (List->IsFlag(Pkg,pkgOrderList::Immediate) == true) + if (Immediate == true && + List->IsFlag(Pkg,pkgOrderList::Immediate) == true) if (SmartConfigure(Pkg) == false) return _error->Error(_("Could not perform immediate configuration on '%s'. " "Please see man 5 apt.conf under APT::Immediate-Configure for details. (%d)"),Pkg.Name(),2); diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h index efd2cfac6..053b4dc13 100644 --- a/apt-pkg/packagemanager.h +++ b/apt-pkg/packagemanager.h @@ -69,7 +69,9 @@ class pkgPackageManager : protected pkgCache::Namespace // Install helpers bool ConfigureAll(); bool SmartConfigure(PkgIterator Pkg); + //FIXME: merge on abi break bool SmartUnPack(PkgIterator Pkg); + bool SmartUnPack(PkgIterator Pkg, bool const Immediate); bool SmartRemove(PkgIterator Pkg); bool EarlyRemove(PkgIterator Pkg); diff --git a/debian/changelog b/debian/changelog index edcd2b851..591610108 100644 --- a/debian/changelog +++ b/debian/changelog @@ -56,8 +56,11 @@ apt (0.8.14.2) UNRELEASED; urgency=low quote an already quoted string in the request later (Closes: #602412) * apt-pkg/contrib/netrc.cc: - replace non-posix gnu-extension strdupa with strdup + * apt-pkg/packagemanager.cc: + - ensure for Multi-Arch:same packages that they are unpacked in + lock step even in immediate configuration (Closes: #618288) - -- David Kalnischkies Fri, 13 May 2011 01:08:04 +0200 + -- David Kalnischkies Mon, 16 May 2011 11:41:05 +0200 apt (0.8.14.1) unstable; urgency=low diff --git a/test/integration/test-bug-618288-multiarch-same-lockstep b/test/integration/test-bug-618288-multiarch-same-lockstep new file mode 100755 index 000000000..7e384e428 --- /dev/null +++ b/test/integration/test-bug-618288-multiarch-same-lockstep @@ -0,0 +1,32 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' + +insertinstalledpackage 'libsame' 'i386,amd64' '1' 'Multi-Arch: same' 'required' +insertinstalledpackage 'apt' 'i386' '1' 'Depends: libsame (= 1) +Essential: yes' 'required' +insertinstalledpackage 'apt2' 'amd64' '1' 'Depends: libsame (= 1) +Essential: yes' 'required' +buildsimplenativepackage 'libsame' 'i386,amd64' '2' 'unstable' 'Multi-Arch: same' '' 'required' +buildsimplenativepackage 'apt' 'i386' '2' 'unstable' 'Depends: libsame (= 2)' '' 'required' +buildsimplenativepackage 'apt2' 'amd64' '2' 'unstable' 'Depends: libsame (= 2)' '' 'required' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be upgraded: + apt:i386 apt2 libsame libsame:i386 +4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. +Inst libsame [1] (2 unstable [amd64]) [libsame:amd64 on libsame:i386] [libsame:i386 on libsame:amd64] [libsame:i386 apt2:amd64 ] +Inst libsame:i386 [1] (2 unstable [i386]) [apt2:amd64 apt:i386 ] +Conf libsame:i386 (2 unstable [i386]) [apt2:amd64 apt:i386 ] +Conf libsame (2 unstable [amd64]) [apt2:amd64 apt:i386 ] +Inst apt2 [1] (2 unstable [amd64]) [apt:i386 ] +Conf apt2 (2 unstable [amd64]) [apt:i386 ] +Inst apt:i386 [1] (2 unstable [i386]) +Conf apt:i386 (2 unstable [i386])' aptget dist-upgrade -s -- cgit v1.2.3-70-g09d2 From 0901c5d08eadea5b5d91b09d4f532a029cb42574 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Mon, 30 May 2011 14:04:01 +0200 Subject: apt-pkg/acquire-item.cc: Reject files known to be invalid (LP: #346386) (Closes: #195301) This commit deals with the following cases: - First section of index file (Packages,Sources,Translation) without Package field - Signed release files without GPG data (NODATA) - i18n/Index files without hash sums Handling unsigned Release files is more complicated, and the example code using indexRecords is disabled as it can reject correct Release files without hashes. How we can reliably check unsigned Release files is another question, and not urgent anyway, as it should have no dramatic effect (we could check that it is a valid RFC-822 section, but that's a bit too long to write) --- apt-pkg/acquire-item.cc | 45 +++++++++++++++++++++++++++++++++++++++++++++ debian/changelog | 2 ++ 2 files changed, 47 insertions(+) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 6785b4e1b..6df915d8e 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -271,6 +271,14 @@ void pkgAcqSubIndex::Done(string Message,unsigned long Size,string Md5Hash, /*{{ string FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(Desc.URI); + /* Downloaded invalid transindex => Error (LP: #346386) (Closes: #195301) */ + indexRecords SubIndexParser; + if (FileExists(DestFile) == true && !SubIndexParser.Load(DestFile)) { + Status = StatError; + ErrorText = SubIndexParser.ErrorText; + return; + } + // sucess in downloading the index // rename the index if(Debug) @@ -894,6 +902,27 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash, ReportMirrorFailure("HashChecksumFailure"); return; } + + /* Verify the index file for correctness (all indexes must + * have a Package field) (LP: #346386) (Closes: #195301) */ + { + FileFd fd(DestFile, FileFd::ReadOnly); + pkgTagSection sec; + pkgTagFile tag(&fd); + + if (_error->PendingError() || !tag.Step(sec)) { + Status = StatError; + _error->DumpErrors(); + Rename(DestFile,DestFile + ".FAILED"); + return; + } else if (!sec.Exists("Package")) { + Status = StatError; + ErrorText = ("Encountered a section with no Package: header"); + Rename(DestFile,DestFile + ".FAILED"); + return; + } + } + // Done, move it into position string FinalFile = _config->FindDir("Dir::State::lists"); FinalFile += URItoFileName(RealURI); @@ -1330,6 +1359,16 @@ void pkgAcqMetaIndex::AuthDone(string Message) /*{{{*/ /*}}}*/ void pkgAcqMetaIndex::QueueIndexes(bool verify) /*{{{*/ { +#if 0 + /* Reject invalid, existing Release files (LP: #346386) (Closes: #195301) + * FIXME: Disabled; it breaks unsigned repositories without hashes */ + if (!verify && FileExists(DestFile) && !MetaIndexParser->Load(DestFile)) + { + Status = StatError; + ErrorText = MetaIndexParser->ErrorText; + return; + } +#endif for (vector ::const_iterator Target = IndexTargets->begin(); Target != IndexTargets->end(); Target++) @@ -1493,6 +1532,12 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) LookupTag(Message,"Message").c_str()); RunScripts("APT::Update::Auth-Failure"); return; + } else if (LookupTag(Message,"Message").find("NODATA") != string::npos) { + /* Invalid signature file, reject (LP: #346386) (Closes: #195301) */ + _error->Error(_("GPG error: %s: %s"), + Desc.Description.c_str(), + LookupTag(Message,"Message").c_str()); + return; } else { _error->Warning(_("GPG error: %s: %s"), Desc.Description.c_str(), diff --git a/debian/changelog b/debian/changelog index 5f5e23eb1..b1d276d5d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,8 @@ apt (0.8.15) UNRELEASED; urgency=low * apt-pkg/depcache.cc: - Really release action groups only once (Closes: #622744) - Make purge work again for config-files (LP: #244598) (Closes: #150831) + * apt-pkg/acquire-item.cc: + - Reject files known to be invalid (LP: #346386) (Closes: #195301) * debian/apt.cron.daily: - Check power after wait, patch by manuel-soto (LP: #705269) * debian/control: -- cgit v1.2.3-70-g09d2 From 4fdb612374655361c8923a4611db6a0d10054317 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Mon, 30 May 2011 14:14:11 +0200 Subject: Reject files known to be invalid (LP: #346386) (Closes: #627642) --- apt-pkg/acquire-item.cc | 8 ++++---- debian/changelog | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 6df915d8e..998c42dc4 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -271,7 +271,7 @@ void pkgAcqSubIndex::Done(string Message,unsigned long Size,string Md5Hash, /*{{ string FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(Desc.URI); - /* Downloaded invalid transindex => Error (LP: #346386) (Closes: #195301) */ + /* Downloaded invalid transindex => Error (LP: #346386) (Closes: #627642) */ indexRecords SubIndexParser; if (FileExists(DestFile) == true && !SubIndexParser.Load(DestFile)) { Status = StatError; @@ -904,7 +904,7 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash, } /* Verify the index file for correctness (all indexes must - * have a Package field) (LP: #346386) (Closes: #195301) */ + * have a Package field) (LP: #346386) (Closes: #627642) */ { FileFd fd(DestFile, FileFd::ReadOnly); pkgTagSection sec; @@ -1360,7 +1360,7 @@ void pkgAcqMetaIndex::AuthDone(string Message) /*{{{*/ void pkgAcqMetaIndex::QueueIndexes(bool verify) /*{{{*/ { #if 0 - /* Reject invalid, existing Release files (LP: #346386) (Closes: #195301) + /* Reject invalid, existing Release files (LP: #346386) (Closes: #627642) * FIXME: Disabled; it breaks unsigned repositories without hashes */ if (!verify && FileExists(DestFile) && !MetaIndexParser->Load(DestFile)) { @@ -1533,7 +1533,7 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) RunScripts("APT::Update::Auth-Failure"); return; } else if (LookupTag(Message,"Message").find("NODATA") != string::npos) { - /* Invalid signature file, reject (LP: #346386) (Closes: #195301) */ + /* Invalid signature file, reject (LP: #346386) (Closes: #627642) */ _error->Error(_("GPG error: %s: %s"), Desc.Description.c_str(), LookupTag(Message,"Message").c_str()); diff --git a/debian/changelog b/debian/changelog index b1d276d5d..d02091f54 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,7 +5,7 @@ apt (0.8.15) UNRELEASED; urgency=low - Really release action groups only once (Closes: #622744) - Make purge work again for config-files (LP: #244598) (Closes: #150831) * apt-pkg/acquire-item.cc: - - Reject files known to be invalid (LP: #346386) (Closes: #195301) + - Reject files known to be invalid (LP: #346386) (Closes: #627642) * debian/apt.cron.daily: - Check power after wait, patch by manuel-soto (LP: #705269) * debian/control: -- cgit v1.2.3-70-g09d2