summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/contrib/fileutl.cc13
-rw-r--r--apt-pkg/contrib/mmap.cc2
-rw-r--r--apt-pkg/contrib/mmap.h1
-rw-r--r--apt-pkg/depcache.cc5
-rw-r--r--cmdline/apt-get.cc1
-rw-r--r--debian/changelog20
-rw-r--r--doc/apt-get.8.xml5
-rw-r--r--methods/rred.cc17
-rw-r--r--test/integration/framework14
-rw-r--r--test/integration/status-bug-612557-garbage-upgrade34
-rwxr-xr-xtest/integration/test-apt-get-autoremove8
-rwxr-xr-xtest/integration/test-bug-604222-new-and-autoremove6
-rwxr-xr-xtest/integration/test-bug-611729-mark-as-manual47
-rwxr-xr-xtest/integration/test-bug-612557-garbage-upgrade60
-rwxr-xr-xtest/integration/test-disappearing-packages4
15 files changed, 183 insertions, 54 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index 52f517ee0..24e3f08d9 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -42,6 +42,10 @@
#include <errno.h>
#include <set>
#include <algorithm>
+
+#ifndef WORDS_BIGENDIAN
+#include <inttypes.h>
+#endif
/*}}}*/
using namespace std;
@@ -962,9 +966,16 @@ unsigned long FileFd::Size()
off_t orig_pos = lseek(iFd, 0, SEEK_CUR);
if (lseek(iFd, -4, SEEK_END) < 0)
return _error->Errno("lseek","Unable to seek to end of gzipped file");
+ size = 0L;
if (read(iFd, &size, 4) != 4)
return _error->Errno("read","Unable to read original size of gzipped file");
- size &= 0xFFFFFFFF;
+
+#ifdef WORDS_BIGENDIAN
+ uint32_t tmp_size = size;
+ uint8_t const * const p = (uint8_t const * const) &tmp_size;
+ tmp_size = (p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0];
+ size = tmp_size;
+#endif
if (lseek(iFd, orig_pos, SEEK_SET) < 0)
return _error->Errno("lseek","Unable to seek in gzipped file");
diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc
index 69fb61fca..4978446d2 100644
--- a/apt-pkg/contrib/mmap.cc
+++ b/apt-pkg/contrib/mmap.cc
@@ -266,6 +266,8 @@ DynamicMMap::~DynamicMMap()
{
if (Fd == 0)
{
+ if (Base == 0)
+ return;
#ifdef _POSIX_MAPPED_FILES
munmap(Base, WorkSpace);
#else
diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h
index 5ca951204..e9baa9339 100644
--- a/apt-pkg/contrib/mmap.h
+++ b/apt-pkg/contrib/mmap.h
@@ -61,6 +61,7 @@ class MMap
inline operator void *() {return Base;};
inline void *Data() {return Base;};
inline unsigned long Size() {return iSize;};
+ inline void AddSize(unsigned long const size) {iSize += size;};
// File manipulators
bool Sync();
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index 7c09d3a38..0c5b77732 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -1257,9 +1257,8 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
if(FromUser)
{
- // Set it to manual if it's a new install or cancelling the
- // removal of a garbage package.
- if(P.Status == 2 || (!Pkg.CurrentVer().end() && !P.Marked))
+ // Set it to manual if it's a new install or already installed
+ if(P.Status == 2 || Pkg->CurrentVer != 0)
P.Flags &= ~Flag::Auto;
}
else
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index 878313212..1211a3411 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -3195,6 +3195,7 @@ int main(int argc,const char *argv[]) /*{{{*/
{0,"auto-remove","APT::Get::AutomaticRemove",0},
{0,"allow-unauthenticated","APT::Get::AllowUnauthenticated",0},
{0,"install-recommends","APT::Install-Recommends",CommandLine::Boolean},
+ {0,"install-suggests","APT::Install-Suggests",CommandLine::Boolean},
{0,"fix-policy","APT::Get::Fix-Policy-Broken",0},
{'c',"config-file",0,CommandLine::ConfigFile},
{'o',"option",0,CommandLine::ArbItem},
diff --git a/debian/changelog b/debian/changelog
index bc7092bb0..ff0c94119 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -9,6 +9,26 @@ apt (0.8.12) UNRELEASED; urgency=low
-- Michael Vogt <mvo@debian.org> Thu, 10 Feb 2011 17:51:16 +0100
+apt (0.8.11.2) unstable; urgency=low
+
+ [ David Kalnischkies ]
+ * cmdline/apt-get.cc:
+ - add --install-suggests option (Closes: #473089)
+ * apt-pkg/depcache.cc:
+ - mark a package which was requested to be installed on commandline
+ always as manual regardless if it is already marked or not as the
+ marker could be lost later by the removal of rdepends (Closes: #612557)
+ * methods/rred.cc:
+ - read patch into MMap only if we work on uncompressed patches
+ - update size of dynamic MMap as we write in from the outside
+ * apt-pkg/contrib/mmap.cc:
+ - do not try to free the mapping if its is unset
+ * apt-pkg/contrib/fileutl.cc:
+ - reorder the loaded filesize bytes for big endian (Closes: #612986)
+ Thanks to Jörg Sommer for the detailed analyse!
+
+ -- David Kalnischkies <kalnischkies@gmail.com> Sun, 13 Feb 2011 12:15:59 +0100
+
apt (0.8.11.1) unstable; urgency=low
[ Stefan Lippers-Hollmann ]
diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml
index 1688c9136..18f26e569 100644
--- a/doc/apt-get.8.xml
+++ b/doc/apt-get.8.xml
@@ -337,6 +337,11 @@
Configuration Item: <literal>APT::Install-Recommends</literal>.</para></listitem>
</varlistentry>
+ <varlistentry><term><option>--install-suggests</option></term>
+ <listitem><para>Consider suggested packages as a dependency for installing.
+ Configuration Item: <literal>APT::Install-Suggests</literal>.</para></listitem>
+ </varlistentry>
+
<varlistentry><term><option>-d</option></term><term><option>--download-only</option></term>
<listitem><para>Download only; package files are only retrieved, not unpacked or installed.
Configuration Item: <literal>APT::Get::Download-Only</literal>.</para></listitem>
diff --git a/methods/rred.cc b/methods/rred.cc
index 1a18a381c..9ad0e4464 100644
--- a/methods/rred.cc
+++ b/methods/rred.cc
@@ -252,13 +252,20 @@ struct EdCommand { /*{{{*/
RredMethod::State RredMethod::patchMMap(FileFd &Patch, FileFd &From, /*{{{*/
FileFd &out_file, Hashes *hash) const {
#ifdef _POSIX_MAPPED_FILES
- MMap ed_cmds(Patch, MMap::ReadOnly);
+ MMap ed_cmds(MMap::ReadOnly);
if (Patch.gzFd() != NULL) {
unsigned long mapSize = Patch.Size();
- DynamicMMap dyn(0, mapSize, 0);
- gzread(Patch.gzFd(), dyn.Data(), mapSize);
- ed_cmds = dyn;
- }
+ DynamicMMap* dyn = new DynamicMMap(0, mapSize, 0);
+ if (dyn->Data() == 0) {
+ delete dyn;
+ return MMAP_FAILED;
+ }
+ dyn->AddSize(mapSize);
+ gzread(Patch.gzFd(), dyn->Data(), mapSize);
+ ed_cmds = *dyn;
+ } else
+ ed_cmds = MMap(Patch, MMap::ReadOnly);
+
MMap in_file(From, MMap::ReadOnly);
if (ed_cmds.Size() == 0 || in_file.Size() == 0)
diff --git a/test/integration/framework b/test/integration/framework
index 121678d4b..7e1d25e61 100644
--- a/test/integration/framework
+++ b/test/integration/framework
@@ -79,6 +79,7 @@ aptcache() { runapt apt-cache $*; }
aptget() { runapt apt-get $*; }
aptftparchive() { runapt apt-ftparchive $*; }
aptkey() { runapt apt-key $*; }
+aptmark() { runapt apt-mark $*; }
dpkg() {
$(which dpkg) --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log $*
}
@@ -647,3 +648,16 @@ testdpkgnotinstalled() {
fi
msgpass
}
+
+testmarkedauto() {
+ local COMPAREFILE=$(mktemp)
+ addtrap "rm $COMPAREFILE;"
+ if [ -n "$1" ]; then
+ msgtest 'Test for correctly marked as auto-installed' "$*"
+ while [ -n "$1" ]; do echo "$1"; shift; done | sort > $COMPAREFILE
+ else
+ msgtest 'Test for correctly marked as auto-installed' 'no package'
+ echo > $COMPAREFILE
+ fi
+ aptmark showauto 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail
+}
diff --git a/test/integration/status-bug-612557-garbage-upgrade b/test/integration/status-bug-612557-garbage-upgrade
new file mode 100644
index 000000000..7403d8cca
--- /dev/null
+++ b/test/integration/status-bug-612557-garbage-upgrade
@@ -0,0 +1,34 @@
+Package: python-uno
+Status: install ok installed
+Priority: optional
+Section: python
+Installed-Size: 2032
+Maintainer: Debian OpenOffice Team <debian-openoffice@lists.debian.org>
+Architecture: i386
+Source: openoffice.org
+Version: 1:3.2.1-11+squeeze2
+Description: Python-UNO bridge
+
+Package: openoffice.org-common
+Status: install ok installed
+Priority: optional
+Section: editors
+Installed-Size: 48356
+Maintainer: Debian OpenOffice Team <debian-openoffice@lists.debian.org>
+Architecture: all
+Source: openoffice.org
+Version: 1:3.2.1-11+squeeze2
+Description: office productivity suite -- arch-independent files
+
+Package: openoffice.org-emailmerge
+Status: install ok installed
+Priority: optional
+Section: editors
+Installed-Size: 1652
+Maintainer: Debian OpenOffice Team <debian-openoffice@lists.debian.org>
+Architecture: all
+Source: openoffice.org
+Version: 1:3.2.1-11+squeeze2
+Replaces: python-uno (<< 1:2.4.1-5)
+Pre-Depends: python-uno, openoffice.org-common
+Description: office productivity suite -- email mail merge
diff --git a/test/integration/test-apt-get-autoremove b/test/integration/test-apt-get-autoremove
index 9dfab19f5..c25ce3f58 100755
--- a/test/integration/test-apt-get-autoremove
+++ b/test/integration/test-apt-get-autoremove
@@ -14,10 +14,7 @@ setupaptarchive
aptget install unrelated debhelper -qq 2>&1 > /dev/null
testdpkginstalled 'unrelated' 'debhelper' 'po-debconf'
-testfileequal 'rootdir/var/lib/apt/extended_states' 'Package: po-debconf
-Architecture: i386
-Auto-Installed: 1
-'
+testmarkedauto 'po-debconf'
aptget remove debhelper -y -qq 2>&1 > /dev/null
testdpkgnotinstalled 'debhelper'
testdpkginstalled 'po-debconf' 'unrelated'
@@ -43,8 +40,7 @@ testdpkginstalled "po-debconf"
rm rootdir/etc/apt/apt.conf.d/00autoremove
aptget autoremove -y -qq 2>&1 > /dev/null
testdpkgnotinstalled 'po-debconf'
-
-testfileequal 'rootdir/var/lib/apt/extended_states' ''
+testmarkedauto
sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d'
testfileequal 'rootdir/var/log/apt/history.log' '
diff --git a/test/integration/test-bug-604222-new-and-autoremove b/test/integration/test-bug-604222-new-and-autoremove
index fa6dcdc70..9187dd1cd 100755
--- a/test/integration/test-bug-604222-new-and-autoremove
+++ b/test/integration/test-bug-604222-new-and-autoremove
@@ -7,9 +7,9 @@ setupenvironment
configarchitecture "i386"
setupaptarchive
-echo 'Package: libvtk5.4
-Auto-Installed: 1
-Architecture: i386' > rootdir/var/lib/apt/extended_states
+touch rootdir/var/lib/apt/extended_states
+aptmark markauto 'libvtk5.4'
+testmarkedauto 'libvtk5.4'
testequal "Reading package lists...
Building dependency tree...
diff --git a/test/integration/test-bug-611729-mark-as-manual b/test/integration/test-bug-611729-mark-as-manual
index 9c1cd3d1b..4e3e2fa0b 100755
--- a/test/integration/test-bug-611729-mark-as-manual
+++ b/test/integration/test-bug-611729-mark-as-manual
@@ -17,59 +17,41 @@ setupaptarchive
# dpkg freaks out if the last package is removed so keep one around
aptget install peace-dpkg -y -qq 2>&1 > /dev/null
testdpkginstalled peace-dpkg
-testfileequal 'rootdir/var/lib/apt/extended_states' ''
+testmarkedauto
aptget install a -y -qq 2>&1 > /dev/null
testdpkginstalled a b
testdpkgnotinstalled c
-testfileequal 'rootdir/var/lib/apt/extended_states' 'Package: b
-Architecture: i386
-Auto-Installed: 1
-'
+testmarkedauto 'b'
aptget remove a -y -qq 2>&1 > /dev/null
testdpkgnotinstalled a c
testdpkginstalled b
-testfileequal 'rootdir/var/lib/apt/extended_states' 'Package: b
-Architecture: i386
-Auto-Installed: 1
-'
+testmarkedauto 'b'
aptget install c -y -qq 2>&1 > /dev/null
testdpkgnotinstalled a
testdpkginstalled b c
-testfileequal 'rootdir/var/lib/apt/extended_states' 'Package: b
-Architecture: i386
-Auto-Installed: 1
-'
+testmarkedauto 'b'
testequal 'Reading package lists...
Building dependency tree...
Reading state information...
b is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install b --only-upgrade
-testfileequal 'rootdir/var/lib/apt/extended_states' 'Package: b
-Architecture: i386
-Auto-Installed: 1
-'
+testmarkedauto 'b'
testequal 'Reading package lists...
Building dependency tree...
Reading state information...
b is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install b -d
-testfileequal 'rootdir/var/lib/apt/extended_states' 'Package: b
-Architecture: i386
-Auto-Installed: 1
-'
+testmarkedauto 'b'
aptget install b --reinstall -y -qq 2>&1 > /dev/null
testdpkgnotinstalled a
testdpkginstalled b c
-testfileequal 'rootdir/var/lib/apt/extended_states' 'Package: b
-Architecture: i386
-Auto-Installed: 1
-'
+testmarkedauto 'b'
testequal 'Reading package lists...
Building dependency tree...
@@ -77,29 +59,26 @@ Reading state information...
b is already the newest version.
b set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install b
-testfileequal 'rootdir/var/lib/apt/extended_states' 'Package: b
-Architecture: i386
-Auto-Installed: 0
-'
+testmarkedauto
aptget remove b -y -qq 2>&1 > /dev/null
testdpkgnotinstalled a b c
-testfileequal 'rootdir/var/lib/apt/extended_states' ''
+testmarkedauto
aptget install a b -y -qq 2>&1 > /dev/null
testdpkginstalled a b
testdpkgnotinstalled c
-testfileequal 'rootdir/var/lib/apt/extended_states' ''
+testmarkedauto
aptget purge a b -y -qq 2>&1 > /dev/null
testdpkgnotinstalled a b c
-testfileequal 'rootdir/var/lib/apt/extended_states' ''
+testmarkedauto
aptget install b c -y -qq 2>&1 > /dev/null
testdpkgnotinstalled a
testdpkginstalled b c
-testfileequal 'rootdir/var/lib/apt/extended_states' ''
+testmarkedauto
aptget install a -y -qq 2>&1 > /dev/null
testdpkginstalled a b c
-testfileequal 'rootdir/var/lib/apt/extended_states' ''
+testmarkedauto
diff --git a/test/integration/test-bug-612557-garbage-upgrade b/test/integration/test-bug-612557-garbage-upgrade
new file mode 100755
index 000000000..e2ffe615f
--- /dev/null
+++ b/test/integration/test-bug-612557-garbage-upgrade
@@ -0,0 +1,60 @@
+#!/bin/sh
+set -e
+
+local TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'unrelated' 'all' '1:3.3.0-2'
+insertpackage 'unstable' 'python-uno' 'all' '1:3.3.0-2' 'Depends: libreoffice-common'
+insertpackage 'unstable' 'libreoffice-common' 'all' '1:3.3.0-2' 'Conflicts: openoffice.org-common'
+
+setupaptarchive
+
+touch rootdir/var/lib/apt/extended_states
+aptmark markauto python-uno ure uno-libs3 openoffice.org-common openoffice.org-style-galaxy
+#aptmark unmarkauto openoffice.org-emailmerge
+testmarkedauto python-uno ure uno-libs3 openoffice.org-common openoffice.org-style-galaxy
+
+testequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following extra packages will be installed:
+ libreoffice-common
+The following packages will be REMOVED:
+ openoffice.org-common openoffice.org-emailmerge
+The following NEW packages will be installed:
+ libreoffice-common
+The following packages will be upgraded:
+ python-uno
+1 upgraded, 1 newly installed, 2 to remove and 0 not upgraded.
+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
+
+testequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following extra packages will be installed:
+ libreoffice-common
+The following packages will be REMOVED:
+ openoffice.org-common openoffice.org-emailmerge
+The following NEW packages will be installed:
+ libreoffice-common
+The following packages will be upgraded:
+ python-uno
+1 upgraded, 1 newly installed, 2 to remove and 0 not upgraded.
+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
+
+testequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ openoffice.org-common openoffice.org-emailmerge python-uno
+0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
+After this operation, 53.3 MB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation.' aptget autoremove --trivial-only
diff --git a/test/integration/test-disappearing-packages b/test/integration/test-disappearing-packages
index 12d215d7a..b5d565c2f 100755
--- a/test/integration/test-disappearing-packages
+++ b/test/integration/test-disappearing-packages
@@ -31,7 +31,7 @@ setupaptarchive
aptget install old-pkg=1.0 --trivial-only -qq 2>&1 > /dev/null
-testfileequal "rootdir/var/lib/apt/extended_states" "" # old-pkg is manual installed
+testmarkedauto # old-pkg is manual installed
local CMD="aptget dist-upgrade -y -q=0"
msgtest "Test for equality of" "$CMD"
@@ -51,4 +51,4 @@ Install: new-pkg:i386 (2.0, automatic)
Upgrade: old-pkg:i386 (1.0, 2.0)
Disappeared: old-pkg (1.0)"
-testfileequal "rootdir/var/lib/apt/extended_states" "" # new-pkg should have get the manual flag from old-pkg
+testmarkedauto # new-pkg should have get the manual flag from old-pkg