]> git.saurik.com Git - apt.git/commitdiff
merged from lp:~donkult/apt/sid
authorMichael Vogt <mvo@debian.org>
Mon, 14 Feb 2011 11:05:35 +0000 (12:05 +0100)
committerMichael Vogt <mvo@debian.org>
Mon, 14 Feb 2011 11:05:35 +0000 (12:05 +0100)
15 files changed:
apt-pkg/contrib/fileutl.cc
apt-pkg/contrib/mmap.cc
apt-pkg/contrib/mmap.h
apt-pkg/depcache.cc
cmdline/apt-get.cc
debian/changelog
doc/apt-get.8.xml
methods/rred.cc
test/integration/framework
test/integration/status-bug-612557-garbage-upgrade [new file with mode: 0644]
test/integration/test-apt-get-autoremove
test/integration/test-bug-604222-new-and-autoremove
test/integration/test-bug-611729-mark-as-manual
test/integration/test-bug-612557-garbage-upgrade [new file with mode: 0755]
test/integration/test-disappearing-packages

index 52f517ee07784ca2578e445b3041a8679a48ef1e..24e3f08d9367ea6f97de2915b5ba60465de55cc4 100644 (file)
 #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");
index 69fb61fca7cd1a1e516d64bc1289deeef1b9b54d..4978446d2f354f9137bbfaed7ba17ebcf395bfa6 100644 (file)
@@ -266,6 +266,8 @@ DynamicMMap::~DynamicMMap()
 {
    if (Fd == 0)
    {
+      if (Base == 0)
+        return;
 #ifdef _POSIX_MAPPED_FILES
       munmap(Base, WorkSpace);
 #else
index 5ca951204b393ab5c2b20045035b48bd94a43f04..e9baa93397d1503661a3d3268a7bde1080e1698a 100644 (file)
@@ -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();
index 7c09d3a38fe4b6965feac4fa194aa43fa5e998cb..0c5b7773290371ef299ec4de91b615d1e867daea 100644 (file)
@@ -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
index 87831321234e6b74fd8d1633d8f40986b7a5ca7c..1211a341176c511b269f70b3254bfc6fd5e9545b 100644 (file)
@@ -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},
index bc7092bb009fb5cc3d34b8a4db32eaee010e0e44..ff0c94119434a308653c7d60d3ab5928c06b421d 100644 (file)
@@ -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 ]
index 1688c91366acd7be046b0a97ed72fa61553bd1f2..18f26e569ad4082fa281906c3761f94ed8ef2175 100644 (file)
      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>
index 1a18a381c803351dd46d56f846a4b8e0277fb794..9ad0e44646db82711c62014ae3a9613fa051c134 100644 (file)
@@ -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)
index 121678d4b02ba30ebad07b1338d904b1065fc67f..7e1d25e616db04e806e7d4607c0fd21e0e94f6d7 100644 (file)
@@ -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 (file)
index 0000000..7403d8c
--- /dev/null
@@ -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
index 9dfab19f56c91427816aef320e33854cc7ac8b1a..c25ce3f585530daa1964c7c5f80b5885c4c84466 100755 (executable)
@@ -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' '
index fa6dcdc70a0b8403cbffac12e7835601cc061140..9187dd1cdacaa416f644ed34dffb29c3bc22d613 100755 (executable)
@@ -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...
index 9c1cd3d1b34dbb6a9757e934d2f18719ae2cbf51..4e3e2fa0b237ba9952b0fa6e62323ae153b4eb31 100755 (executable)
@@ -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 (executable)
index 0000000..e2ffe61
--- /dev/null
@@ -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
index 12d215d7a626cfedf6a0bc224df1dc7867d1d2e8..b5d565c2f13eb3ee839219633eedc3c0032346f3 100755 (executable)
@@ -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