diff options
author | David Kalnischkies <kalnischkies@gmail.com> | 2012-07-04 23:54:48 +0200 |
---|---|---|
committer | David Kalnischkies <kalnischkies@gmail.com> | 2012-07-04 23:54:48 +0200 |
commit | b855a40058f99a0f10184c410b3bbf3c2ee4ae83 (patch) | |
tree | 20e069af2d3a7fbc013a925dc126db41fe59ef18 | |
parent | 8e5d47a3a4e735835498574a58e0a33de04a0377 (diff) |
* cmdline/apt-mark.cc:
- arch:all packages are treated as arch:native packages, but dpkg
expects pkg:all for selections, so use the arch of the installed
version instead of the package structure if possible.
Thanks to Stepan Golosunov for the report! (Closes: #680041)
-rw-r--r-- | cmdline/apt-mark.cc | 16 | ||||
-rw-r--r-- | debian/changelog | 5 | ||||
-rw-r--r-- | test/integration/framework | 5 | ||||
-rwxr-xr-x | test/integration/test-bug-680041-apt-mark-holds-correctly | 72 |
4 files changed, 96 insertions, 2 deletions
diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc index 2a093c55a..c5b7ca496 100644 --- a/cmdline/apt-mark.cc +++ b/cmdline/apt-mark.cc @@ -291,14 +291,26 @@ bool DoHold(CommandLine &CmdL) FILE* dpkg = fdopen(external[1], "w"); for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { + if (dpkgMultiArch == false) + fprintf(dpkg, "%s", Pkg.FullName(true).c_str()); + else + { + if (Pkg->CurrentVer != 0) + fprintf(dpkg, "%s:%s", Pkg.Name(), Pkg.CurrentVer().Arch()); + else if (Pkg.VersionList().end() == false) + fprintf(dpkg, "%s:%s", Pkg.Name(), Pkg.VersionList().Arch()); + else + fprintf(dpkg, "%s", Pkg.FullName(false).c_str()); + } + if (MarkHold == true) { - fprintf(dpkg, "%s hold\n", Pkg.FullName(!dpkgMultiArch).c_str()); + fprintf(dpkg, " hold\n"); ioprintf(c1out,_("%s set on hold.\n"), Pkg.FullName(true).c_str()); } else { - fprintf(dpkg, "%s install\n", Pkg.FullName(!dpkgMultiArch).c_str()); + fprintf(dpkg, " install\n"); ioprintf(c1out,_("Canceled hold on %s.\n"), Pkg.FullName(true).c_str()); } } diff --git a/debian/changelog b/debian/changelog index 4fe8a800e..9d3c2b2fc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,6 +16,11 @@ apt (0.9.7.2) UNRELEASED; urgency=low * ftparchive/writer.cc: - handle the APT::FTPArchive::Packages::SHA512 option correctly instead of overriding SHA256, thanks Christian Marillat! (Closes: #680252) + * cmdline/apt-mark.cc: + - arch:all packages are treated as arch:native packages, but dpkg + expects pkg:all for selections, so use the arch of the installed + version instead of the package structure if possible. + Thanks to Stepan Golosunov for the report! (Closes: #680041) -- David Kalnischkies <kalnischkies@gmail.com> Sun, 01 Jul 2012 08:20:57 +0200 diff --git a/test/integration/framework b/test/integration/framework index 2d6ada117..da85d2332 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -736,6 +736,11 @@ testfileequal() { fi } +testempty() { + msgtest "Test for no output of" "$*" + test -z "$($* 2>&1)" && msgpass || msgfail +} + testequal() { local COMPAREFILE=$(mktemp) addtrap "rm $COMPAREFILE;" diff --git a/test/integration/test-bug-680041-apt-mark-holds-correctly b/test/integration/test-bug-680041-apt-mark-holds-correctly new file mode 100755 index 000000000..2e5e39c8e --- /dev/null +++ b/test/integration/test-bug-680041-apt-mark-holds-correctly @@ -0,0 +1,72 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' + +insertinstalledpackage 'pkgarch' 'amd64' '1' +insertinstalledpackage 'pkgall' 'all' '1' + +insertpackage 'unstable' 'pkgarch' 'amd64' '2' +insertpackage 'unstable' 'pkgall' 'all' '2' + +setupaptarchive + +runtests() { + testempty aptmark showhold + + testequal 'Reading package lists... +Building dependency tree... +The following packages will be upgraded: + pkgall pkgarch +2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. +After this operation, 0 B of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only + + testequal 'pkgarch set on hold.' aptmark hold pkgarch + testequal 'pkgarch' aptmark showhold + + testequal 'Reading package lists... +Building dependency tree... +The following packages have been kept back: + pkgarch +The following packages will be upgraded: + pkgall +1 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. +After this operation, 0 B of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only + + testequal 'Canceled hold on pkgarch.' aptmark unhold pkgarch + testempty aptmark showhold + + testequal 'Reading package lists... +Building dependency tree... +The following packages will be upgraded: + pkgall pkgarch +2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. +After this operation, 0 B of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only + + testequal 'pkgall set on hold.' aptmark hold pkgall + testequal 'pkgall' aptmark showhold + + testequal 'Reading package lists... +Building dependency tree... +The following packages have been kept back: + pkgall +The following packages will be upgraded: + pkgarch +1 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. +After this operation, 0 B of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only + + testequal 'Canceled hold on pkgall.' aptmark unhold pkgall + testempty aptmark showhold +} +# single-arch +runtests +# multi-arch +configarchitecture 'amd64' 'i386' +runtests |