From d67004e086fbe52a15a61812964614e9982428b6 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 15 Apr 2011 22:04:48 +0200 Subject: be able to set priorities for created test packages --- test/integration/framework | 51 +++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index 013a71ec0..b0ea7a5c0 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -218,6 +218,7 @@ buildsimplenativepackage() { local DEPENDENCIES="$5" local DESCRIPTION="$6" local SECTION="${7:-others}" + local PRIORITY="${8:-optional}" local DISTSECTION if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then DISTSECTION="main" @@ -240,7 +241,7 @@ echo '$NAME says \"Hello!\"'" > ${BUILDDIR}/${NAME} -- Joe Sixpack $(date -R)" > ${BUILDDIR}/debian/changelog echo "Source: $NAME Section: $SECTION -Priority: optional +Priority: $PRIORITY Maintainer: Joe Sixpack Standards-Version: 3.9.1 @@ -396,29 +397,34 @@ insertpackage() { local ARCH="$3" local VERSION="$4" local DEPENDENCIES="$5" - local ARCHS="$ARCH" - if [ "$ARCHS" = "all" ]; then - ARCHS="$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')" - fi - for BUILDARCH in $ARCHS; do - local PPATH="aptarchive/dists/${RELEASE}/main/binary-${BUILDARCH}" - mkdir -p $PPATH aptarchive/dists/${RELEASE}/main/source - touch aptarchive/dists/${RELEASE}/main/source/Sources - local FILE="${PPATH}/Packages" - echo "Package: $NAME -Priority: optional + local PRIORITY="${6:-optional}" + local ARCHS="" + for arch in $(echo "$ARCH" | sed -e 's#,#\n#g'); do + if [ "$arch" = "all" ]; then + ARCHS="$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')" + else + ARCHS="$arch" + fi + for BUILDARCH in $ARCHS; do + local PPATH="aptarchive/dists/${RELEASE}/main/binary-${BUILDARCH}" + mkdir -p $PPATH aptarchive/dists/${RELEASE}/main/source + touch aptarchive/dists/${RELEASE}/main/source/Sources + local FILE="${PPATH}/Packages" + echo "Package: $NAME +Priority: $PRIORITY Section: other Installed-Size: 42 Maintainer: Joe Sixpack -Architecture: $ARCH +Architecture: $arch Version: $VERSION -Filename: pool/main/${NAME}/${NAME}_${VERSION}_${ARCH}.deb" >> $FILE - test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE - echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} +Filename: pool/main/${NAME}/${NAME}_${VERSION}_${arch}.deb" >> $FILE + test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE + echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, YOU did something horribly wrong! They are autogenerated und used only by testcases for APT and surf no other propose… " >> $FILE + done done } @@ -427,21 +433,24 @@ insertinstalledpackage() { local ARCH="$2" local VERSION="$3" local DEPENDENCIES="$4" + local PRIORITY="${5:-optional}" local FILE="rootdir/var/lib/dpkg/status" - echo "Package: $NAME + for arch in $(echo "$ARCH" | sed -e 's#,#\n#g'); do + echo "Package: $NAME Status: install ok installed -Priority: optional +Priority: $PRIORITY Section: other Installed-Size: 42 Maintainer: Joe Sixpack -Architecture: $ARCH +Architecture: $arch Version: $VERSION" >> $FILE - test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE - echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE + echo "Description: an autogenerated dummy ${NAME}=${VERSION}/installed If you find such a package installed on your system, YOU did something horribly wrong! They are autogenerated und used only by testcases for APT and surf no other propose… " >> $FILE + done } -- cgit v1.2.3 From 7f52cf7b027e36367b7f13e2e8a1309485827611 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 15 Apr 2011 22:05:34 +0200 Subject: add sbin directories to PATH to avoid dpkg warnings --- test/integration/framework | 1 + 1 file changed, 1 insertion(+) diff --git a/test/integration/framework b/test/integration/framework index b0ea7a5c0..50c5157e9 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -145,6 +145,7 @@ setupenvironment() { echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf echo 'quiet::NoUpdate "true";' >> aptconfig.conf export LC_ALL=C + export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin" msgdone "info" } -- cgit v1.2.3 From 949e033cb7c741b9eed459c0e93a89a92acb168d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 16 Apr 2011 00:06:34 +0200 Subject: =?UTF-8?q?*=20apt-pkg/depcache.cc:=20=20=20-=20really=20include?= =?UTF-8?q?=20'rc'=20packages=20in=20the=20delete=20count=20by=20fixing=20?= =?UTF-8?q?a=20=20=20=20=20typo=20which=20exists=20since=201999=20in=20the?= =?UTF-8?q?=20source=E2=80=A6=20(LP:=20#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 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 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(-) 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 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(-) 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 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(-) 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 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(-) 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 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(-) 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 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(-) 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 From 794f09c34fca36e0e5aab57f9ca7edba2cfd193d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 19 Apr 2011 19:28:34 +0200 Subject: * debian/apt{,-utils}.symbols: - update both experimental symbol-files to reflect 0.8.14 state --- debian/apt-utils.symbols | 6 ++-- debian/apt.symbols | 83 +++++++++++++++++++++++++++++------------------- debian/changelog | 4 ++- 3 files changed, 57 insertions(+), 36 deletions(-) diff --git a/debian/apt-utils.symbols b/debian/apt-utils.symbols index 2f57eb10a..9ba283a51 100644 --- a/debian/apt-utils.symbols +++ b/debian/apt-utils.symbols @@ -111,11 +111,13 @@ libapt-inst.so.1.2 libapt-inst1.2 (c++|optional)"vtable for pkgCache::Iterator@Base" 0.8.0 (c++|optional)"vtable for pkgCache::Iterator@Base" 0.8.0 ### gcc-4.4 specific +# (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0 +# (c++|optional=std)"std::basic_string, std::allocator >& std::basic_string, std::allocator >::append(unsigned char*, unsigned char*)@Base" 0.8.0 +### gcc-4.6 specific + (c++|optional=std)"std::vector >::~vector()@Base" 0.8.12 1 (c++|optional=std)"std::basic_string, std::allocator >& std::basic_string, std::allocator >::_M_replace_dispatch(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, unsigned char*, unsigned char*, std::__false_type)@Base" 0.8.0 ### try to ignore std:: template instances - (c++|optional=std)"std::basic_string, std::allocator >& std::basic_string, std::allocator >::append(unsigned char*, unsigned char*)@Base" 0.8.0 (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0 - (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0 (c++|regex|optional=std)"^typeinfo name for std::iterator<.*>@Base$" 0.8.0 (c++|regex|optional=std)"^typeinfo for std::iterator<.*>@Base$" 0.8.0 ### diff --git a/debian/apt.symbols b/debian/apt.symbols index 1c108fb69..bb60c22be 100644 --- a/debian/apt.symbols +++ b/debian/apt.symbols @@ -277,11 +277,7 @@ libapt-pkg.so.4.10 libapt-pkg4.10 (c++)"pkgDepCache::DefaultRootSetFunc::InRootSet(pkgCache::PkgIterator const&)@Base" 0.8.0 (c++)"pkgDepCache::DefaultRootSetFunc::~DefaultRootSetFunc()@Base" 0.8.0 (c++)"pkgDepCache::MarkFollowsSuggests()@Base" 0.8.0 - (c++)"pkgDepCache::SetCandidateVersion(pkgCache::VerIterator)@Base" 0.8.0 (c++)"pkgDepCache::MarkFollowsRecommends()@Base" 0.8.0 - (c++)"pkgDepCache::ReInstallPseudoForGroup(pkgCache::PkgIterator const&, std::set, std::allocator >&)@Base" 0.8.0 - (c++)"pkgDepCache::ReInstallPseudoForGroup(unsigned long const&, std::set, std::allocator >&)@Base" 0.8.0 - (c++)"pkgDepCache::RemovePseudoInstalledPkg(pkgCache::PkgIterator&, std::set, std::allocator >&)@Base" 0.8.0 (c++)"pkgDepCache::Init(OpProgress*)@Base" 0.8.0 (c++)"pkgDepCache::Sweep()@Base" 0.8.0 (c++)"pkgDepCache::Policy::IsImportantDep(pkgCache::DepIterator const&)@Base" 0.8.0 @@ -1222,35 +1218,45 @@ libapt-pkg.so.4.10 libapt-pkg4.10 ### demangle strangeness - buildd report it as MISSING and as new… (c++)"pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire*, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::vector > const*, indexRecords*)@Base" 0.8.0 ### gcc-4.4 specific - (c++|optional=inherent)"APT::PackageSet::PackageSet(APT::PackageSet const&)@Base" 0.8.0 - (c++|optional=inline)"stringcasecmp(char const*, char const*, char const*)@Base" 0.8.0 - (arch=armel|c++|optional=inline)"stringcasecmp(std::basic_string, std::allocator > const&, char const*)@Base" 0.8.0 - (c++|optional=inherent)"APT::VersionSet::insert(pkgCache::VerIterator const&)@Base" 0.8.0 - (c++|optional=inline)"APT::VersionSet::insert(APT::VersionSet const&)@Base" 0.8.0 - (c++|optional=private)"debTranslationsIndex::IndexFile(char const*) const@Base" 0.8.0 - (c++|optional=inline)"pkgCache::Iterator::end() const@Base" 0.8.0 - (c++|optional=inherent)"HashString::operator=(HashString const&)@Base" 0.8.0 - (c++|regex|optional=std)"^std::less<[^ ]+>::operator\(\)\(.+\) const@Base$" 0.8.0 - (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@Base$" 0.8.0 - (c++|regex|optional=std)"^std::basic_string, std::allocator >::basic_string\(.+\)@Base$" 0.8.0 - (c++|regex|optional=std)"^pkgCache::(Dep|Pkg|Ver|Grp|Prv|Desc|PkgFile)Iterator\*\* std::_.+@Base$" 0.8.0 +# (c++|optional=inherent)"APT::PackageSet::PackageSet(APT::PackageSet const&)@Base" 0.8.0 +# (c++|optional=inline)"stringcasecmp(char const*, char const*, char const*)@Base" 0.8.0 +# (arch=armel|c++|optional=inline)"stringcasecmp(std::basic_string, std::allocator > const&, char const*)@Base" 0.8.0 +# (c++|optional=inherent)"APT::VersionSet::insert(pkgCache::VerIterator const&)@Base" 0.8.0 +# (c++|optional=inline)"APT::VersionSet::insert(APT::VersionSet const&)@Base" 0.8.0 +# (c++|optional=private)"debTranslationsIndex::IndexFile(char const*) const@Base" 0.8.0 +# (c++|optional=inline)"pkgCache::Iterator::end() const@Base" 0.8.0 +# (c++|optional=inherent)"HashString::operator=(HashString const&)@Base" 0.8.0 +# (c++|regex|optional=std)"^std::less<[^ ]+>::operator\(\)\(.+\) const@Base$" 0.8.0 +# (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@Base$" 0.8.0 +# (c++|regex|optional=std)"^pkgCache::(Dep|Pkg|Ver|Grp|Prv|Desc|PkgFile)Iterator\*\* std::_.+@Base$" 0.8.0 ### gcc-4.5 specific -# (c++|optional=template)"SPtrArray::~SPtrArray()@Base" 0.8.0 -# (c++|regex|optional=template)"^SPtrArray<[^ ]+>::~SPtrArray\(\)@Base$" 0.8.0 -# (c++|optional=inline)"FileFd::FileFd(std::basic_string, std::allocator >, FileFd::OpenMode, unsigned long)@Base" 0.8.0 -### architecture specific: va_list - (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&)@Base" 0.8.0 - (arch=armel armhf|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&)@Base" 0.8.0 - (arch=alpha|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag&)@Base" 0.8.0 - (arch=amd64 kfreebsd-amd64 powerpc powerpcspe s390|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1])@Base" 0.8.0 - (arch=hppa ia64 mipsel sparc sparc64|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&)@Base" 0.8.0 - (arch=sh4|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __builtin_va_list&)@Base" 0.8.0 - (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&)@Base" 0.8.0 - (arch=armel armhf|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&)@Base" 0.8.0 - (arch=alpha|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag&)@Base" 0.8.0 - (arch=amd64 kfreebsd-amd64 powerpc powerpcspe s390|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1])@Base" 0.8.0 - (arch=hppa ia64 mipsel sparc sparc64|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&)@Base" 0.8.0 - (arch=sh4|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __builtin_va_list&)@Base" 0.8.0 + (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0 + (c++|optional=inline)"FileFd::FileFd(std::basic_string, std::allocator >, FileFd::OpenMode, unsigned long)@Base" 0.8.0 + (c++|regex|optional=template)"^SPtrArray<[^ ]+>::~SPtrArray\(\)@Base$" 0.8.0 + (c++|optional=template)"SPtrArray::~SPtrArray()@Base" 0.8.0 +### gcc-4.6 specific + (c++|optional=template)"SPtrArray::~SPtrArray()@Base" 0.8.0 + (c++|regex|optional=std)"^std::basic_string, std::allocator >::basic_string\(.+\)@Base$" 0.8.0 + (c++|regex|optional=std)"^std::vector::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@Base$" 0.8.0 + (c++|optional=strange)"pkgCache::VerIterator::VerIterator(pkgCache&, pkgCache::Version*)@Base" 0.8.0 +### architecture specific: va_list & size_t + (arch=i386 hurd-i386 kfreebsd-i386|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&, unsigned int&)@Base" 0.8.11.4 1 + (arch=armel armhf|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&, unsigned int&)@Base" 0.8.11.4 1 + (arch=alpha|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag&, unsigned long&)@Base" 0.8.11.4 1 + (arch=powerpc powerpcspe|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned int&)@Base" 0.8.11.4 1 + (arch=amd64 kfreebsd-amd64 s390|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned long&)@Base" 0.8.11.4 1 + (arch=hppa mipsel sparc|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned int&)@Base" 0.8.11.4 1 + (arch=ia64 sparc64|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned long&)@Base" 0.8.11.4 1 + (arch=sh4|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, __builtin_va_list&, unsigned int&)@Base" 0.8.11.4 1 + (arch=i386 hurd-i386 kfreebsd-i386|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&, int, unsigned int&)@Base" 0.8.11.4 1 + (arch=armel armhf|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&, int, unsigned int&)@Base" 0.8.11.4 1 + (arch=alpha|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag&, int, unsigned long&)@Base" 0.8.11.4 1 + (arch=powerpc powerpcspe|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned int&)@Base" 0.8.11.4 1 + (arch=amd64 kfreebsd-amd64 s390|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned long&)@Base" 0.8.11.4 1 + (arch=hppa mipsel sparc|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned int&)@Base" 0.8.11.4 1 + (arch=ia64 sparc64|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned long&)@Base" 0.8.11.4 1 + (arch=sh4|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __builtin_va_list&, int, unsigned int&)@Base" 0.8.11.4 1 ### architecture specific: size_t (arch=i386 armel armhf hppa hurd-i386 kfreebsd-i386 mipsel powerpc powerpcspe sh4 sparc|c++)"_strtabexpand(char*, unsigned int)@Base" 0.8.0 (arch=alpha amd64 ia64 kfreebsd-amd64 s390 sparc64|c++)"_strtabexpand(char*, unsigned long)@Base" 0.8.0 @@ -1263,7 +1269,6 @@ libapt-pkg.so.4.10 libapt-pkg4.10 (c++|regex|optional=std)"^(bool|void) std::(operator|sort_heap|make_heap)[^ ]+<.+ >\(.+\)@Base$" 0.8.0 (c++|regex|optional=std)"^std::reverse_iterator<.+ > std::__.+@Base$" 0.8.0 (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0 - (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0 (c++|regex|optional=std)"^__gnu_cxx::__[^ ]+<.*@Base$" 0.8.0 (c++|regex|optional=std)"^typeinfo name for std::iterator<.*>@Base$" 0.8.0 (c++|regex|optional=std)"^typeinfo for std::iterator<.*>@Base$" 0.8.0 @@ -1301,3 +1306,15 @@ libapt-pkg.so.4.10 libapt-pkg4.10 (c++)"typeinfo name for pkgAcqMetaClearSig@Base" 0.8.11 1 (c++)"vtable for pkgAcqSubIndex@Base" 0.8.11 1 (c++)"vtable for pkgAcqMetaClearSig@Base" 0.8.11 1 + (c++)"FindMountPointForDevice(char const*)@Base" 0.8.12 1 + (c++)"pkgUdevCdromDevices::ScanForRemovable(bool)@Base" 0.8.12 1 + (c++)"APT::Configuration::Compressor::Compressor(char const*, char const*, char const*, char const*, char const*, unsigned short)@Base" 0.8.12 1 + (c++)"APT::Configuration::Compressor::~Compressor()@Base" 0.8.12 1 + (c++)"APT::Configuration::getCompressors(bool)@Base" 0.8.12 1 + (c++)"APT::Configuration::getCompressorExtensions()@Base" 0.8.12 1 + (c++)"APT::Configuration::setDefaultConfigurationForCompressors()@Base" 0.8.12 1 + (c++)"pkgDepCache::SetCandidateVersion(pkgCache::VerIterator, bool const&)@Base" 0.8.12 1 + (c++)"pkgAcqMetaClearSig::Custom600Headers()@Base" 0.8.13 1 + (c++|optional=private)"debListParser::NewProvidesAllArch(pkgCache::VerIterator&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 0.8.13.2 1 + (c++|optional=private)"PrintMode(char)@Base" 0.8.13.2 1 + (c++)"pkgDepCache::IsModeChangeOk(pkgDepCache::ModeList, pkgCache::PkgIterator const&, unsigned long, bool)@Base" 0.8.13.2 1 diff --git a/debian/changelog b/debian/changelog index 9f06a87b5..9521ab8a0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,8 +13,10 @@ apt (0.8.14.1) unstable; urgency=low - let VisitRProvides report if the calls were successful * apt-pkg/deb/dpkgpm.cc: - replace obsolete usleep with nanosleep + * debian/apt{,-utils}.symbols: + - update both experimental symbol-files to reflect 0.8.14 state - -- David Kalnischkies Sat, 16 Apr 2011 18:54:37 +0200 + -- David Kalnischkies Tue, 19 Apr 2011 19:27:34 +0200 apt (0.8.14) unstable; urgency=low -- cgit v1.2.3 From 05472bf810d92d2b4b0c68f0b89715b26a30b3b3 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 19 Apr 2011 19:35:59 +0200 Subject: * debian/apt.lintian-overrides: - update the missing-python-dep override to the lintian 2.5 way --- debian/apt.lintian-overrides | 2 +- debian/changelog | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/debian/apt.lintian-overrides b/debian/apt.lintian-overrides index 49c5ce53c..828b36905 100644 --- a/debian/apt.lintian-overrides +++ b/debian/apt.lintian-overrides @@ -1,3 +1,3 @@ # apt-mark is rarely used auxiliary script, we don't want to depend on # python-apt only for it. -apt binary: python-script-but-no-python-dep ./usr/bin/apt-mark +apt binary: python-script-but-no-python-dep usr/bin/apt-mark diff --git a/debian/changelog b/debian/changelog index 9521ab8a0..386328722 100644 --- a/debian/changelog +++ b/debian/changelog @@ -15,8 +15,10 @@ apt (0.8.14.1) unstable; urgency=low - replace obsolete usleep with nanosleep * debian/apt{,-utils}.symbols: - update both experimental symbol-files to reflect 0.8.14 state + * debian/apt.lintian-overrides: + - update the missing-python-dep override to the lintian 2.5 way - -- David Kalnischkies Tue, 19 Apr 2011 19:27:34 +0200 + -- David Kalnischkies Tue, 19 Apr 2011 19:32:15 +0200 apt (0.8.14) unstable; urgency=low -- cgit v1.2.3 From e9d27d26fe305ad3a892e401c4b1134ecc2fc4af Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 19 Apr 2011 20:58:14 +0200 Subject: * debian/rules: - remove unused embedded jquery by doxygen from libapt-pkg-doc --- debian/changelog | 4 +++- debian/rules | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 386328722..9eae2d94e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,8 +17,10 @@ apt (0.8.14.1) unstable; urgency=low - update both experimental symbol-files to reflect 0.8.14 state * debian/apt.lintian-overrides: - update the missing-python-dep override to the lintian 2.5 way + * debian/rules: + - remove unused embedded jquery by doxygen from libapt-pkg-doc - -- David Kalnischkies Tue, 19 Apr 2011 19:32:15 +0200 + -- David Kalnischkies Tue, 19 Apr 2011 20:57:52 +0200 apt (0.8.14) unstable; urgency=low diff --git a/debian/rules b/debian/rules index 640900678..0544b2b8e 100755 --- a/debian/rules +++ b/debian/rules @@ -120,6 +120,9 @@ libapt-pkg-doc: build-doc # # libapt-pkg-doc install # + # remove doxygen's embedded jquery as we don't use it anyway (#622147) + rm -f $(BLD)/doc/doxygen/html/jquery.js + dh_installdocs -p$@ $(BLD)/docs/design* \ $(BLD)/docs/dpkg-tech* \ $(BLD)/docs/files* \ -- cgit v1.2.3 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(-) 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 From e1a279fb9b1580d69f5aac5d2c7191eb6ee59947 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 21 Apr 2011 16:41:07 +0200 Subject: remove not existing packages left over from the testcase --- test/integration/test-bug-612557-garbage-upgrade | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/integration/test-bug-612557-garbage-upgrade b/test/integration/test-bug-612557-garbage-upgrade index 3112e618c..8efd1687a 100755 --- a/test/integration/test-bug-612557-garbage-upgrade +++ b/test/integration/test-bug-612557-garbage-upgrade @@ -13,9 +13,9 @@ insertpackage 'unstable' 'libreoffice-common' 'all' '1:3.3.0-2' 'Conflicts: open setupaptarchive touch rootdir/var/lib/apt/extended_states -aptmark markauto python-uno ure uno-libs3 openoffice.org-common openoffice.org-style-galaxy +aptmark markauto python-uno openoffice.org-common #aptmark unmarkauto openoffice.org-emailmerge -testmarkedauto python-uno ure uno-libs3 openoffice.org-common openoffice.org-style-galaxy +testmarkedauto python-uno openoffice.org-common testequal 'Reading package lists... Building dependency tree... @@ -33,7 +33,7 @@ After this operation, 53.2 MB disk space will be freed. E: Trivial Only specified but this is not a trivial operation.' aptget --trivial-only install python-uno aptmark markauto openoffice.org-emailmerge -testmarkedauto python-uno ure uno-libs3 openoffice.org-common openoffice.org-style-galaxy openoffice.org-emailmerge +testmarkedauto python-uno openoffice.org-common openoffice.org-emailmerge testequal 'Reading package lists... Building dependency tree... -- cgit v1.2.3 From c98fb5e00d4b8a7e0c372e9cbc857046dec3b3dd Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 21 Apr 2011 16:46:28 +0200 Subject: * cmdline/apt-mark.cc: - reimplement apt-mark in c++ --- cmdline/apt-mark | 101 ----------------- cmdline/apt-mark.cc | 257 +++++++++++++++++++++++++++++++++++++++++++ cmdline/makefile | 9 +- debian/apt.lintian-overrides | 3 - debian/changelog | 6 +- test/integration/framework | 2 +- 6 files changed, 266 insertions(+), 112 deletions(-) delete mode 100755 cmdline/apt-mark create mode 100644 cmdline/apt-mark.cc delete mode 100644 debian/apt.lintian-overrides diff --git a/cmdline/apt-mark b/cmdline/apt-mark deleted file mode 100755 index c64d4356c..000000000 --- a/cmdline/apt-mark +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/python - -from optparse import OptionParser - -import sys -import os.path - -try: - import apt_pkg -except ImportError: - print >> sys.stderr, "Error importing apt_pkg, is python-apt installed?" - sys.exit(1) - -actions = { "markauto" : 1, - "unmarkauto": 0 - } - -def show_automatic(filename): - if not os.path.exists(STATE_FILE): - return - auto = set() - tagfile = apt_pkg.TagFile(open(STATE_FILE)) - for section in tagfile: - pkgname = section.get("Package") - autoInst = section.get("Auto-Installed") - if int(autoInst): - auto.add(pkgname) - print "\n".join(sorted(auto)) - - -def mark_unmark_automatic(filename, action, pkgs): - " mark or unmark automatic flag" - # open the statefile - if os.path.exists(STATE_FILE): - try: - tagfile = apt_pkg.TagFile(open(STATE_FILE)) - outfile = open(STATE_FILE+".tmp","w") - except IOError, msg: - print "%s, are you root?" % (msg) - sys.exit(1) - for section in tagfile: - pkgname = section.get("Package") - autoInst = section.get("Auto-Installed") - if pkgname in pkgs: - if options.verbose: - print "changing %s to %s" % (pkgname,action) - newsec = apt_pkg.rewrite_section(section, - [], - [ ("Auto-Installed",str(action)) ]) - pkgs.remove(pkgname) - outfile.write(newsec+"\n") - else: - outfile.write(str(section)+"\n") - if action == 1: - for pkgname in pkgs: - if options.verbose: - print "changing %s to %s" % (pkgname,action) - outfile.write("Package: %s\nAuto-Installed: %d\n\n" % (pkgname, action)) - # all done, rename the tmpfile - os.chmod(outfile.name, 0644) - os.rename(outfile.name, STATE_FILE) - os.chmod(STATE_FILE, 0644) - - -if __name__ == "__main__": - apt_pkg.init() - - # option parsing - parser = OptionParser() - parser.usage = "%prog [options] {markauto|unmarkauto} packages..." - parser.epilog = "apt-mark is deprecated, use apt-get markauto/unmarkauto." - parser.add_option("-f", "--file", action="store", type="string", - dest="filename", - help="read/write a different file") - parser.add_option("-v", "--verbose", - action="store_true", dest="verbose", default=False, - help="print verbose status messages to stdout") - (options, args) = parser.parse_args() - - if not args: - parser.print_help() - sys.exit(1) - - # get the state-file - if not options.filename: - STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states" - else: - STATE_FILE=options.filename - - if len(args) == 0: - parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'") - - if args[0] == "showauto": - show_automatic(STATE_FILE) - else: - # get pkgs to change - if args[0] not in actions.keys(): - parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'") - pkgs = args[1:] - action = actions[args[0]] - mark_unmark_automatic(STATE_FILE, action, pkgs) diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc new file mode 100644 index 000000000..a5dc45a10 --- /dev/null +++ b/cmdline/apt-mark.cc @@ -0,0 +1,257 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +/* ##################################################################### + apt-mark - show and change auto-installed bit information + ##################################################################### */ + /*}}}*/ +// Include Files /*{{{*/ +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + /*}}}*/ +using namespace std; + +ostream c0out(0); +ostream c1out(0); +ostream c2out(0); +ofstream devnull("/dev/null"); +/* DoAuto - mark packages as automatically/manually installed {{{*/ +bool DoAuto(CommandLine &CmdL) +{ + pkgCacheFile CacheFile; + pkgCache *Cache = CacheFile.GetPkgCache(); + pkgDepCache *DepCache = CacheFile.GetDepCache(); + if (unlikely(Cache == NULL || DepCache == NULL)) + return false; + + APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1); + if (pkgset.empty() == true) + return _error->Error(_("No packages found")); + + bool MarkAuto = strcasecmp(CmdL.FileList[0],"auto") == 0; + int AutoMarkChanged = 0; + + for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + { + if (Pkg->CurrentVer == 0) + { + ioprintf(c1out,_("%s can not be marked as it is not installed.\n"), Pkg.FullName(true).c_str()); + continue; + } + else if ((((*DepCache)[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == MarkAuto) + { + if (MarkAuto == false) + ioprintf(c1out,_("%s was already set to manually installed.\n"), Pkg.FullName(true).c_str()); + else + ioprintf(c1out,_("%s was already set to automatically installed.\n"), Pkg.FullName(true).c_str()); + continue; + } + + if (MarkAuto == false) + ioprintf(c1out,_("%s set to manually installed.\n"), Pkg.FullName(true).c_str()); + else + ioprintf(c1out,_("%s set to automatically installed.\n"), Pkg.FullName(true).c_str()); + + DepCache->MarkAuto(Pkg, MarkAuto); + ++AutoMarkChanged; + } + if (AutoMarkChanged > 0 && _config->FindB("APT::Mark::Simulate", false) == false) + return DepCache->writeStateFile(NULL); + return true; +} + /*}}}*/ +/* DoMarkAuto - mark packages as automatically/manually installed {{{*/ +/* Does the same as DoAuto but tries to do it exactly the same why as + the python implementation did it so it can be a drop-in replacement */ +bool DoMarkAuto(CommandLine &CmdL) +{ + pkgCacheFile CacheFile; + pkgCache *Cache = CacheFile.GetPkgCache(); + pkgDepCache *DepCache = CacheFile.GetDepCache(); + if (unlikely(Cache == NULL || DepCache == NULL)) + return false; + + APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1); + if (pkgset.empty() == true) + return _error->Error(_("No packages found")); + + bool const MarkAuto = strcasecmp(CmdL.FileList[0],"markauto") == 0; + bool const Verbose = _config->FindB("APT::MarkAuto::Verbose", false); + int AutoMarkChanged = 0; + + for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + { + if (Pkg->CurrentVer == 0 || + (((*DepCache)[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == MarkAuto) + continue; + + if (Verbose == true) + ioprintf(c1out, "changing %s to %d\n", Pkg.Name(), (MarkAuto == false) ? 0 : 1); + + DepCache->MarkAuto(Pkg, MarkAuto); + ++AutoMarkChanged; + } + if (AutoMarkChanged > 0 && _config->FindB("APT::Mark::Simulate", false) == false) + return DepCache->writeStateFile(NULL); + + _error->Notice(_("This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' instead.")); + + return true; +} + /*}}}*/ +/* ShowAuto - show automatically installed packages (sorted) {{{*/ +bool ShowAuto(CommandLine &CmdL) +{ + pkgCacheFile CacheFile; + pkgCache *Cache = CacheFile.GetPkgCache(); + pkgDepCache *DepCache = CacheFile.GetDepCache(); + if (unlikely(Cache == NULL || DepCache == NULL)) + return false; + + std::vector packages; + + bool const ShowAuto = strcasecmp(CmdL.FileList[0],"showauto") == 0; + + if (CmdL.FileList[1] == 0) + { + packages.reserve(Cache->HeaderP->PackageCount / 3); + for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P) + if (P->CurrentVer != 0 && + (((*DepCache)[P].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == ShowAuto) + packages.push_back(P.FullName(true)); + } + else + { + APT::CacheSetHelper helper(false); // do not show errors + APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1, helper); + packages.reserve(pkgset.size()); + for (APT::PackageSet::const_iterator P = pkgset.begin(); P != pkgset.end(); ++P) + if (P->CurrentVer != 0 && + (((*DepCache)[P].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == ShowAuto) + packages.push_back(P.FullName(true)); + } + + std::sort(packages.begin(), packages.end()); + + for (vector::const_iterator I = packages.begin(); I != packages.end(); ++I) + std::cout << *I << std::endl; + + return true; +} + /*}}}*/ +// ShowHelp - Show a help screen /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool ShowHelp(CommandLine &CmdL) +{ + ioprintf(cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,VERSION, + COMMON_ARCH,__DATE__,__TIME__); + + cout << + _("Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n" + "\n" + "apt-mark is a simple command line interface for marking packages\n" + "as manual or automatical installed. It can also list marks.\n" + "\n" + "Commands:\n" + " auto - Mark the given packages as automatically installed\n" + " manual - Mark the given packages as manually installed\n" + "\n" + "Options:\n" + " -h This help text.\n" + " -q Loggable output - no progress indicator\n" + " -qq No output except for errors\n" + " -s No-act. Just prints what would be done.\n" + " -f read/write auto/manual marking in the given file\n" + " -c=? Read this configuration file\n" + " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" + "See the apt-mark(8) and apt.conf(5) manual pages for more information.") + << std::endl; + return true; +} + /*}}}*/ +int main(int argc,const char *argv[]) /*{{{*/ +{ + CommandLine::Args Args[] = { + {'h',"help","help",0}, + {0,"version","version",0}, + {'q',"quiet","quiet",CommandLine::IntLevel}, + {'q',"silent","quiet",CommandLine::IntLevel}, + {'v',"verbose","APT::MarkAuto::Verbose",0}, + {'s',"simulate","APT::Mark::Simulate",0}, + {'s',"just-print","APT::Mark::Simulate",0}, + {'s',"recon","APT::Mark::Simulate",0}, + {'s',"dry-run","APT::Mark::Simulate",0}, + {'s',"no-act","APT::Mark::Simulate",0}, + {'f',"file","Dir::State::extended_states",CommandLine::HasArg}, + {'c',"config-file",0,CommandLine::ConfigFile}, + {'o',"option",0,CommandLine::ArbItem}, + {0,0,0,0}}; + CommandLine::Dispatch Cmds[] = {{"help",&ShowHelp}, + {"auto",&DoAuto}, + {"manual",&DoAuto}, + {"showauto",&ShowAuto}, + {"showmanual",&ShowAuto}, + // obsolete commands for compatibility + {"markauto", &DoMarkAuto}, + {"unmarkauto", &DoMarkAuto}, + {0,0}}; + + // Set up gettext support + setlocale(LC_ALL,""); + textdomain(PACKAGE); + + // Parse the command line and initialize the package library + CommandLine CmdL(Args,_config); + if (pkgInitConfig(*_config) == false || + CmdL.Parse(argc,argv) == false || + pkgInitSystem(*_config,_system) == false) + { + if (_config->FindB("version") == true) + ShowHelp(CmdL); + _error->DumpErrors(); + return 100; + } + + // See if the help should be shown + if (_config->FindB("help") == true || + _config->FindB("version") == true || + CmdL.FileSize() == 0) + { + ShowHelp(CmdL); + return 0; + } + + // Deal with stdout not being a tty + if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1) + _config->Set("quiet","1"); + + // Setup the output streams + c0out.rdbuf(cout.rdbuf()); + c1out.rdbuf(cout.rdbuf()); + c2out.rdbuf(cout.rdbuf()); + if (_config->FindI("quiet",0) > 0) + c0out.rdbuf(devnull.rdbuf()); + if (_config->FindI("quiet",0) > 1) + c1out.rdbuf(devnull.rdbuf()); + + // Match the operation + CmdL.DispatchArg(Cmds); + + // Print any errors or warnings found during parsing + bool const Errors = _error->PendingError(); + if (_config->FindI("quiet",0) > 0) + _error->DumpErrors(); + else + _error->DumpErrors(GlobalError::DEBUG); + return Errors == true ? 100 : 0; +} + /*}}}*/ diff --git a/cmdline/makefile b/cmdline/makefile index 917ccc96a..e867dae73 100644 --- a/cmdline/makefile +++ b/cmdline/makefile @@ -54,10 +54,11 @@ TARGET=program include $(COPY_H) # The apt-mark program -SOURCE=apt-mark -TO=$(BIN) -TARGET=program -include $(COPY_H) +PROGRAM=apt-mark +SLIBS = -lapt-pkg $(INTLLIBS) +LIB_MAKES = apt-pkg/makefile +SOURCE = apt-mark.cc +include $(PROGRAM_H) # The apt-report-mirror-failure program #SOURCE=apt-report-mirror-failure diff --git a/debian/apt.lintian-overrides b/debian/apt.lintian-overrides deleted file mode 100644 index 828b36905..000000000 --- a/debian/apt.lintian-overrides +++ /dev/null @@ -1,3 +0,0 @@ -# apt-mark is rarely used auxiliary script, we don't want to depend on -# python-apt only for it. -apt binary: python-script-but-no-python-dep usr/bin/apt-mark diff --git a/debian/changelog b/debian/changelog index 762688386..1658bd094 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,12 +19,12 @@ apt (0.8.14.2) UNRELEASED; urgency=low - replace obsolete usleep with nanosleep * debian/apt{,-utils}.symbols: - update both experimental symbol-files to reflect 0.8.14 state - * debian/apt.lintian-overrides: - - update the missing-python-dep override to the lintian 2.5 way * debian/rules: - remove unused embedded jquery by doxygen from libapt-pkg-doc + * cmdline/apt-mark.cc: + - reimplement apt-mark in c++ - -- David Kalnischkies Tue, 19 Apr 2011 20:57:52 +0200 + -- David Kalnischkies Thu, 21 Apr 2011 16:43:16 +0200 apt (0.8.14.1) unstable; urgency=low diff --git a/test/integration/framework b/test/integration/framework index 50c5157e9..b257738e7 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -695,7 +695,7 @@ testmarkedauto() { while [ -n "$1" ]; do echo "$1"; shift; done | sort > $COMPAREFILE else msgtest 'Test for correctly marked as auto-installed' 'no package' - echo > $COMPAREFILE + echo -n > $COMPAREFILE fi aptmark showauto 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail } -- cgit v1.2.3 From 182a6a557492ddbb4320b0c620e19071bd1014c3 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 21 Apr 2011 17:00:37 +0200 Subject: * cmdline/apt-get.cc: - deprecate mostly undocumented 'markauto' in favor of 'apt-mark' * cmdline/apt-cache.cc: - deprecate mostly undocumented 'showauto' in favor of 'apt-mark' --- cmdline/apt-cache.cc | 7 +++---- cmdline/apt-get.cc | 9 +++++---- debian/changelog | 6 +++++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index 34f8a1a75..f66c22c20 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -1334,9 +1334,8 @@ bool Search(CommandLine &CmdL) return _error->Error("Write to stdout failed"); return true; } - - -/* show automatically installed packages (sorted) */ + /*}}}*/ +/* ShowAuto - show automatically installed packages (sorted) {{{*/ bool ShowAuto(CommandLine &CmdL) { pkgCacheFile CacheFile; @@ -1357,6 +1356,7 @@ bool ShowAuto(CommandLine &CmdL) for (vector::iterator I = packages.begin(); I != packages.end(); I++) cout << *I << "\n"; + _error->Notice(_("This command is deprecated. Please use 'apt-mark showauto' instead.")); return true; } /*}}}*/ @@ -1702,7 +1702,6 @@ bool ShowHelp(CommandLine &Cmd) " unmet - Show unmet dependencies\n" " search - Search the package list for a regex pattern\n" " show - Show a readable record for the package\n" - " showauto - Display a list of automatically installed packages\n" " depends - Show raw dependency information for a package\n" " rdepends - Show reverse dependency information for a package\n" " pkgnames - List the names of all packages in the system\n" diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 38003e430..845c92026 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -2050,8 +2050,8 @@ bool DoInstall(CommandLine &CmdL) return InstallPackages(Cache,false); } - -/* mark packages as automatically/manually installed. */ + /*}}}*/ +/* mark packages as automatically/manually installed. {{{*/ bool DoMarkAuto(CommandLine &CmdL) { bool Action = true; @@ -2086,6 +2086,9 @@ bool DoMarkAuto(CommandLine &CmdL) AutoMarkChanged++; } } + + _error->Notice(_("This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' instead.")); + if (AutoMarkChanged && ! _config->FindB("APT::Get::Simulate",false)) return Cache->writeStateFile(NULL); return false; @@ -3184,8 +3187,6 @@ bool ShowHelp(CommandLine &CmdL) " clean - Erase downloaded archive files\n" " autoclean - Erase old downloaded archive files\n" " check - Verify that there are no broken dependencies\n" - " markauto - Mark the given packages as automatically installed\n" - " unmarkauto - Mark the given packages as manually installed\n" " changelog - Download and display the changelog for the given package\n" " download - Download the binary package into the current directory\n" "\n" diff --git a/debian/changelog b/debian/changelog index 1658bd094..84db2eec4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -23,8 +23,12 @@ apt (0.8.14.2) UNRELEASED; urgency=low - remove unused embedded jquery by doxygen from libapt-pkg-doc * cmdline/apt-mark.cc: - reimplement apt-mark in c++ + * cmdline/apt-get.cc: + - deprecate mostly undocumented 'markauto' in favor of 'apt-mark' + * cmdline/apt-cache.cc: + - deprecate mostly undocumented 'showauto' in favor of 'apt-mark' - -- David Kalnischkies Thu, 21 Apr 2011 16:43:16 +0200 + -- David Kalnischkies Thu, 21 Apr 2011 16:57:41 +0200 apt (0.8.14.1) unstable; urgency=low -- cgit v1.2.3 From 0ce07a4c624500476a0848a041bf9084f9ce6a95 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 21 Apr 2011 18:56:40 +0200 Subject: add a close entry as a showmanual is provided by apt-mark now --- debian/changelog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 84db2eec4..fd3d7384e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -23,12 +23,13 @@ apt (0.8.14.2) UNRELEASED; urgency=low - remove unused embedded jquery by doxygen from libapt-pkg-doc * cmdline/apt-mark.cc: - reimplement apt-mark in c++ + - provide a 'showmanual' command (Closes: #582791) * cmdline/apt-get.cc: - deprecate mostly undocumented 'markauto' in favor of 'apt-mark' * cmdline/apt-cache.cc: - deprecate mostly undocumented 'showauto' in favor of 'apt-mark' - -- David Kalnischkies Thu, 21 Apr 2011 16:57:41 +0200 + -- David Kalnischkies Thu, 21 Apr 2011 17:00:41 +0200 apt (0.8.14.1) unstable; urgency=low -- cgit v1.2.3 From b40f2c3bd7aace2dcf1e0262b9356906be9eb272 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 21 Apr 2011 18:58:07 +0200 Subject: update the apt-mark manpage --- doc/apt-mark.8.xml | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/doc/apt-mark.8.xml b/doc/apt-mark.8.xml index ec50d6f76..592a8b97d 100644 --- a/doc/apt-mark.8.xml +++ b/doc/apt-mark.8.xml @@ -18,7 +18,7 @@ &apt-email; &apt-product; - 9 August 2009 + 21 April 2011 @@ -42,12 +42,13 @@ - markauto - unmarkauto + auto + manual + showauto + showmanual package - showauto @@ -65,16 +66,16 @@ apt-get or aptitude. - markauto - markauto is used to mark a + auto + auto is used to mark a package as being automatically installed, which will cause the package to be removed when no more manually installed packages depend on this package. - unmarkauto - unmarkauto is used to mark a + manual + manual is used to mark a package as being manually installed, which will prevent the package from being automatically removed if no other packages depend on it. @@ -84,8 +85,18 @@ showauto showauto is used to print a list of automatically installed packages with each package on a new line. + All automatically installed packages will be listed if no package is given. + If packages are given only those which are automatically installed will be shown. + + showmanual + showmanual can be used in + the same way as showauto except that it will print + a list of manually installed packages instead. + + + @@ -102,23 +113,8 @@ is extended_status in the directory defined by the Configuration Item: Dir::State. - - - - Show a short usage summary. - - - - - - - - Show the program version. - - - - + &apt-commonoptions; -- cgit v1.2.3 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(-) 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 From a09e4489c7bd097d051db44b5e3487963b7a36c0 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 26 Apr 2011 17:29:54 +0200 Subject: provide a 'dpkg --set-selections' wrapper to set/release holds --- cmdline/apt-mark.cc | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ debian/changelog | 3 +- doc/apt-mark.8.xml | 23 +++++++++++ 3 files changed, 141 insertions(+), 1 deletion(-) diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc index a5dc45a10..b2c664979 100644 --- a/cmdline/apt-mark.cc +++ b/cmdline/apt-mark.cc @@ -141,6 +141,115 @@ bool ShowAuto(CommandLine &CmdL) std::sort(packages.begin(), packages.end()); + for (vector::const_iterator I = packages.begin(); I != packages.end(); ++I) + std::cout << *I << std::endl; + + return true; +} + /*}}}*/ +/* DoHold - mark packages as hold by dpkg {{{*/ +bool DoHold(CommandLine &CmdL) +{ + pkgCacheFile CacheFile; + pkgCache *Cache = CacheFile.GetPkgCache(); + if (unlikely(Cache == NULL)) + return false; + + APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1); + if (pkgset.empty() == true) + return _error->Error(_("No packages found")); + + bool const MarkHold = strcasecmp(CmdL.FileList[0],"hold") == 0; + + for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + { + if ((Pkg->SelectedState == pkgCache::State::Hold) == MarkHold) + { + if (MarkHold == true) + ioprintf(c1out,_("%s was already set on hold.\n"), Pkg.FullName(true).c_str()); + else + ioprintf(c1out,_("%s was already not hold.\n"), Pkg.FullName(true).c_str()); + pkgset.erase(Pkg); + continue; + } + } + + if (pkgset.empty() == true) + return true; + + if (_config->FindB("APT::Mark::Simulate", false) == true) + { + for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + { + if (MarkHold == false) + ioprintf(c1out,_("%s set on hold.\n"), Pkg.FullName(true).c_str()); + else + ioprintf(c1out,_("Canceled hold on %s.\n"), Pkg.FullName(true).c_str()); + } + return true; + } + + string dpkgcall = _config->Find("Dir::Bin::dpkg", "dpkg"); + std::vector const dpkgoptions = _config->FindVector("DPkg::options"); + for (std::vector::const_iterator o = dpkgoptions.begin(); + o != dpkgoptions.end(); ++o) + dpkgcall.append(" ").append(*o); + dpkgcall.append(" --set-selections"); + FILE *dpkg = popen(dpkgcall.c_str(), "w"); + if (dpkg == NULL) + return _error->Errno("DoHold", "fdopen on dpkg stdin failed"); + + for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + { + if (MarkHold == true) + { + fprintf(dpkg, "%s hold\n", Pkg.FullName(true).c_str()); + ioprintf(c1out,_("%s set on hold.\n"), Pkg.FullName(true).c_str()); + } + else + { + fprintf(dpkg, "%s install\n", Pkg.FullName(true).c_str()); + ioprintf(c1out,_("Canceled hold on %s.\n"), Pkg.FullName(true).c_str()); + } + } + + int const status = pclose(dpkg); + if (status == -1) + return _error->Errno("DoHold", "dpkg execution failed in the end"); + if (WIFEXITED(status) == false || WEXITSTATUS(status) != 0) + return _error->Error(_("Executing dpkg failed. Are you root?")); + return true; +} + /*}}}*/ +/* ShowHold - show packages set on hold in dpkg status {{{*/ +bool ShowHold(CommandLine &CmdL) +{ + pkgCacheFile CacheFile; + pkgCache *Cache = CacheFile.GetPkgCache(); + if (unlikely(Cache == NULL)) + return false; + + std::vector packages; + + if (CmdL.FileList[1] == 0) + { + packages.reserve(50); // how many holds are realistic? I hope just a few… + for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P) + if (P->SelectedState == pkgCache::State::Hold) + packages.push_back(P.FullName(true)); + } + else + { + APT::CacheSetHelper helper(false); // do not show errors + APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1, helper); + packages.reserve(pkgset.size()); + for (APT::PackageSet::const_iterator P = pkgset.begin(); P != pkgset.end(); ++P) + if (P->SelectedState == pkgCache::State::Hold) + packages.push_back(P.FullName(true)); + } + + std::sort(packages.begin(), packages.end()); + for (vector::const_iterator I = packages.begin(); I != packages.end(); ++I) std::cout << *I << std::endl; @@ -198,8 +307,15 @@ int main(int argc,const char *argv[]) /*{{{*/ CommandLine::Dispatch Cmds[] = {{"help",&ShowHelp}, {"auto",&DoAuto}, {"manual",&DoAuto}, + {"hold",&DoHold}, + {"unhold",&DoHold}, {"showauto",&ShowAuto}, {"showmanual",&ShowAuto}, + {"showhold",&ShowHold}, + // be nice and forgive the typo + {"showholds",&ShowHold}, + // be nice and forgive it as it is technical right + {"install",&DoHold}, // obsolete commands for compatibility {"markauto", &DoMarkAuto}, {"unmarkauto", &DoMarkAuto}, diff --git a/debian/changelog b/debian/changelog index 58b6a289d..82037ea34 100644 --- a/debian/changelog +++ b/debian/changelog @@ -24,6 +24,7 @@ apt (0.8.14.2) UNRELEASED; urgency=low * cmdline/apt-mark.cc: - reimplement apt-mark in c++ - provide a 'showmanual' command (Closes: #582791) + - provide a 'dpkg --set-selections' wrapper to set/release holds * cmdline/apt-get.cc: - deprecate mostly undocumented 'markauto' in favor of 'apt-mark' * cmdline/apt-cache.cc: @@ -31,7 +32,7 @@ apt (0.8.14.2) UNRELEASED; urgency=low * apt-pkg/pkgcache.cc: - really ignore :arch in FindPkg() in non-multiarch environment - -- David Kalnischkies Mon, 25 Apr 2011 13:49:47 +0200 + -- David Kalnischkies Tue, 26 Apr 2011 17:29:14 +0200 apt (0.8.14.1) unstable; urgency=low diff --git a/doc/apt-mark.8.xml b/doc/apt-mark.8.xml index 592a8b97d..01c8665dd 100644 --- a/doc/apt-mark.8.xml +++ b/doc/apt-mark.8.xml @@ -82,6 +82,22 @@ + hold + hold is used to mark a + package as hold back, which will prevent the package from being + automatically installed, upgraded or removed. + The command is only a wrapper around dpkg --set-selections + and the state is therefore maintained by &dpkg; and not effected + by the option. + + + + unhold + unhold is used to cancel a + previously set hold on a package to allow all actions again. + + + showauto showauto is used to print a list of automatically installed packages with each package on a new line. @@ -97,6 +113,13 @@ + showhold + showhold is used to print a list + of packages on hold in the same way as for the other show commands. + + + + -- cgit v1.2.3 From 160960eb83defb82b621fc1013262bc6c8e41aeb Mon Sep 17 00:00:00 2001 From: Chris Leick Date: Tue, 26 Apr 2011 17:43:15 +0200 Subject: * 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! --- debian/changelog | 5 ++++- doc/po/de.po | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 82037ea34..64cba02cd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -31,8 +31,11 @@ apt (0.8.14.2) UNRELEASED; urgency=low - deprecate mostly undocumented 'showauto' in favor of 'apt-mark' * apt-pkg/pkgcache.cc: - really ignore :arch in FindPkg() in non-multiarch environment + * 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! - -- David Kalnischkies Tue, 26 Apr 2011 17:29:14 +0200 + -- David Kalnischkies Tue, 26 Apr 2011 17:35:24 +0200 apt (0.8.14.1) unstable; urgency=low diff --git a/doc/po/de.po b/doc/po/de.po index 75595df07..891e69964 100644 --- a/doc/po/de.po +++ b/doc/po/de.po @@ -1912,7 +1912,7 @@ msgstr "" "apt-config shell Abbild " +"choice=\"req\"> shell dump " #. type: Content of: #: apt-config.8.xml:51 -- cgit v1.2.3 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(-) 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 From 7f24da09a135c4ec079e9ede7b3dc294b1baac37 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 26 Apr 2011 19:30:21 +0200 Subject: * test/versions.lst: - disable obscure version number tests with versions dpkg doesn't allow any more as they don't start with a number --- debian/changelog | 5 ++++- test/versions.lst | 12 ++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/debian/changelog b/debian/changelog index 115b4e0b6..3f1c017c4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -37,8 +37,11 @@ apt (0.8.14.2) UNRELEASED; urgency=low * apt-pkg/deb/debmetaindex.cc: - do not download TranslationIndex if no Translation-* will be downloaded later on anyway (Closes: #624218) + * test/versions.lst: + - disable obscure version number tests with versions dpkg doesn't + allow any more as they don't start with a number - -- David Kalnischkies Tue, 26 Apr 2011 19:12:41 +0200 + -- David Kalnischkies Tue, 26 Apr 2011 19:30:12 +0200 apt (0.8.14.1) unstable; urgency=low diff --git a/test/versions.lst b/test/versions.lst index 2d0967645..8dd8ebdc9 100644 --- a/test/versions.lst +++ b/test/versions.lst @@ -10,13 +10,16 @@ 1.3 1.2.2 1 # Important attributes -# disabled as dpkg --compare-versions doesn't like them… +# disabled as dpkg --compare-versions doesn't like them… (versions have to start with a number) #- . -1 #p - -1 #a - -1 #z - -1 -a . -1 -z . -1 +#a . -1 +#z . -1 + +# disabled as dpkg --compare-versions doesn't like them… (versions have to start with a number) +#III-alpha9.8 III-alpha9.8-1.5 -1 # Epochs 1:0.4 10.3 1 @@ -49,9 +52,6 @@ z . -1 1:3.0.5-2 1:3.0.5.1 -1 -# #194327 -III-alpha9.8 III-alpha9.8-1.5 -1 - # #205960 3.0~rc1-1 3.0-1 -1 -- cgit v1.2.3 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(-) 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 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(-) 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 sjlv." 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 From 3b422ab4b2df243f48330a3329e98c9506d791c6 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 27 Apr 2011 10:32:53 +0200 Subject: * methods/http.cc: - add config option to ignore a closed stdin to be able to easily use the method as a simple standalone downloader --- debian/changelog | 5 ++++- methods/http.cc | 13 ++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 22af4700e..143661b87 100644 --- a/debian/changelog +++ b/debian/changelog @@ -45,8 +45,11 @@ apt (0.8.14.2) UNRELEASED; urgency=low * apt-pkg/acquire-item.cc: - apply fix for poorly worded 'locate file' error message from Ben Finney, thanks! (Closes: #623171) + * methods/http.cc: + - add config option to ignore a closed stdin to be able to easily + use the method as a simple standalone downloader - -- David Kalnischkies Tue, 26 Apr 2011 22:41:33 +0200 + -- David Kalnischkies Wed, 27 Apr 2011 10:30:47 +0200 apt (0.8.14.1) unstable; urgency=low diff --git a/methods/http.cc b/methods/http.cc index dfc1619e3..26abc14d9 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -778,9 +778,10 @@ bool HttpMethod::Go(bool ToFile,ServerState *Srv) if (Srv->In.WriteSpace() == true && ToFile == true && FileFD != -1) FD_SET(FileFD,&wfds); - + // Add stdin - FD_SET(STDIN_FILENO,&rfds); + if (_config->FindB("Acquire::http::DependOnSTDIN", true) == true) + FD_SET(STDIN_FILENO,&rfds); // Figure out the max fd int MaxFd = FileFD; @@ -1113,7 +1114,13 @@ int HttpMethod::Loop() do a WaitFd above.. Otherwise the FD is closed. */ int Result = Run(true); if (Result != -1 && (Result != 0 || Queue == 0)) - return 100; + { + if(FailReason.empty() == false || + _config->FindB("Acquire::http::DependOnSTDIN", true) == true) + return 100; + else + return 0; + } if (Queue == 0) continue; -- cgit v1.2.3 From c5bcc6074c1e0f9881529709a8489cccb674a3d4 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 27 Apr 2011 14:38:48 +0200 Subject: support lighttpd as test webserver but still prefer weborf --- test/integration/framework | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index b257738e7..cc5af798c 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -573,13 +573,22 @@ changetowebserver() { if which weborf > /dev/null; then weborf -xb aptarchive/ 2>&1 > /dev/null & addtrap "kill $!;" - local APTARCHIVE="file://$(readlink -f ./aptarchive)" - for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do - sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#" - done - return 0 + elif which lighttpd > /dev/null; then + echo "server.document-root = \"$(readlink -f ./aptarchive)\" +server.port = 8080 +server.stat-cache-engine = \"disable\"" > lighttpd.conf + lighttpd -t -f lighttpd.conf >/dev/null || msgdie 'Can not change to webserver: our lighttpd config is invalid' + lighttpd -D -f lighttpd.conf 2>/dev/null >/dev/null & + addtrap "kill $!;" + else + msgdie 'You have to install weborf or lighttpd first' + return 1 fi - return 1 + local APTARCHIVE="file://$(readlink -f ./aptarchive)" + for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do + sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#" + done + return 0 } checkdiff() { -- cgit v1.2.3 From 4992469e453490e4c104a1b6021e48c725c499b8 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 29 Apr 2011 01:20:44 +0200 Subject: Location header in redirects should be absolute URI, but some servers just send an absolute path so still deal with it properly --- debian/changelog | 4 +++- methods/http.cc | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 143661b87..fd10e0fcf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -48,8 +48,10 @@ apt (0.8.14.2) UNRELEASED; urgency=low * methods/http.cc: - add config option to ignore a closed stdin to be able to easily use the method as a simple standalone downloader + - Location header in redirects should be absolute URI, but some + servers just send an absolute path so still deal with it properly - -- David Kalnischkies Wed, 27 Apr 2011 10:30:47 +0200 + -- David Kalnischkies Wed, 27 Apr 2011 17:37:58 +0200 apt (0.8.14.1) unstable; urgency=low diff --git a/methods/http.cc b/methods/http.cc index 26abc14d9..d3e00553c 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -948,7 +948,23 @@ HttpMethod::DealWithHeaders(FetchResult &Res,ServerState *Srv) && Srv->Result != 304 // Not Modified && Srv->Result != 306)) // (Not part of HTTP/1.1, reserved) { - if (!Srv->Location.empty()) + if (Srv->Location.empty() == true); + else if (Srv->Location[0] == '/' && Queue->Uri.empty() == false) + { + URI Uri = Queue->Uri; + if (Uri.Host.empty() == false) + { + if (Uri.Port != 0) + strprintf(NextURI, "http://%s:%u", Uri.Host.c_str(), Uri.Port); + else + NextURI = "http://" + Uri.Host; + } + else + NextURI.clear(); + NextURI.append(Srv->Location); + return TRY_AGAIN_OR_REDIRECT; + } + else { NextURI = Srv->Location; return TRY_AGAIN_OR_REDIRECT; -- cgit v1.2.3 From c34ea12ad509cb34c954ed574a301c3cbede55ec Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 10 May 2011 15:49:25 +0200 Subject: dequote URL taken from Location in redirects as we will otherwise quote an already quoted string in the request later (Closes: #602412) --- debian/changelog | 4 ++- methods/http.cc | 4 +-- test/integration/skip-bug-602412-dequote-redirect | 36 +++++++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) create mode 100755 test/integration/skip-bug-602412-dequote-redirect diff --git a/debian/changelog b/debian/changelog index fd10e0fcf..125fa7f70 100644 --- a/debian/changelog +++ b/debian/changelog @@ -50,8 +50,10 @@ apt (0.8.14.2) UNRELEASED; urgency=low use the method as a simple standalone downloader - Location header in redirects should be absolute URI, but some 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) - -- David Kalnischkies Wed, 27 Apr 2011 17:37:58 +0200 + -- David Kalnischkies Tue, 10 May 2011 15:49:19 +0200 apt (0.8.14.1) unstable; urgency=low diff --git a/methods/http.cc b/methods/http.cc index d3e00553c..13f9cbe06 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -961,12 +961,12 @@ HttpMethod::DealWithHeaders(FetchResult &Res,ServerState *Srv) } else NextURI.clear(); - NextURI.append(Srv->Location); + NextURI.append(DeQuoteString(Srv->Location)); return TRY_AGAIN_OR_REDIRECT; } else { - NextURI = Srv->Location; + NextURI = DeQuoteString(Srv->Location); return TRY_AGAIN_OR_REDIRECT; } /* else pass through for error message */ diff --git a/test/integration/skip-bug-602412-dequote-redirect b/test/integration/skip-bug-602412-dequote-redirect new file mode 100755 index 000000000..a63d36246 --- /dev/null +++ b/test/integration/skip-bug-602412-dequote-redirect @@ -0,0 +1,36 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' + +if ! which lighttpd > /dev/null; then + msgdie 'You need lighttpd for this testcase, sorry…' + exit 1 +fi + +buildsimplenativepackage 'unrelated' 'all' '0.5~squeeze1' 'unstable' + +setupaptarchive + +echo "server.modules = ( \"mod_redirect\" ) +server.document-root = \"$(readlink -f ./aptarchive)\" +server.port = 8080 +server.stat-cache-engine = \"disable\" +url.redirect = ( \"^/pool/(.*)$\" => \"/newpool/\$1\" )" > lighttpd.conf + +mv aptarchive/pool aptarchive/newpool +lighttpd -t -f lighttpd.conf >/dev/null || msgdie 'Can not change to webserver: our lighttpd config is invalid' +lighttpd -D -f lighttpd.conf 2>/dev/null >/dev/null & +addtrap "kill $!;" + +local APTARCHIVE="file://$(readlink -f ./aptarchive)" +for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do + sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#" +done + +aptget update -qq || msgdie 'apt-get update failed' +aptget install unrelated --download-only -qq || msgdie 'downloading package failed' + -- cgit v1.2.3 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(-) 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 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 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 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(-) 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 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(-) 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 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 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 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(-) 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 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(+) 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 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 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