Просмотр исходного кода

merged lp:~mvo/apt/conflicts-on-virtuals to better deal with
conflicts/breaks against virtual packages (LP: #614993)

Michael Vogt лет назад: 16
Родитель
Сommit
8877870768

+ 19 - 10
apt-pkg/algorithms.cc

@@ -987,6 +987,23 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
 	       pkgCache::VerIterator Ver(Cache,*V);
 	       pkgCache::PkgIterator Pkg = Ver.ParentPkg();
 
+               /* This is a conflicts, and the version we are looking
+                  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 (Debug) 
+                     clog << "  Conflicts//Breaks against version " 
+                          << Ver.VerStr() << " for " << Pkg.Name() 
+                          << " but that is not InstVer, ignoring"
+                          << endl;
+                  continue;
+               }
+
 	       if (Debug == true)
 		  clog << "  Considering " << Pkg.FullName(false) << ' ' << (int)Scores[Pkg->ID] <<
 		  " as a solution to " << I.FullName(false) << ' ' << (int)Scores[I->ID] << endl;
@@ -1069,22 +1086,14 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
 	       }
 	       else
 	       {
-		  /* This is a conflicts, and the version we are looking
-		     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::Obsoletes))
-		     continue;
-
 		  if (Start->Type == pkgCache::Dep::DpkgBreaks)
 		  {
 		     // first, try upgradring the package, if that
 		     // does not help, the breaks goes onto the
 		     // kill list
+                     //
 		     // FIXME: use DoUpgrade(Pkg) instead?
-		     if (Cache[End] & pkgDepCache::DepGCVer) 
+		     if (Cache[End] & pkgDepCache::DepGCVer)
 		     {
 			if (Debug)
 			   clog << "  Upgrading " << Pkg.FullName(false) << " due to Breaks field in " << I.FullName(false) << endl;

+ 7 - 0
debian/changelog

@@ -1,3 +1,10 @@
+apt (0.8.5) UNRELEASED; urgency=low
+
+  * merged lp:~mvo/apt/conflicts-on-virtuals to better deal with
+    conflicts/breaks against virtual packages (LP: #614993)
+
+ -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 15 Sep 2010 19:53:46 +0200
+
 apt (0.8.4) unstable; urgency=low
 
   [ Michael vogt ]

Разница между файлами не показана из-за своего большого размера
+ 1819 - 0
test/integration/Packages-ubuntu-bug-614993


Разница между файлами не показана из-за своего большого размера
+ 5894 - 0
test/integration/status-ubuntu-bug-614993


+ 59 - 0
test/integration/test-ubuntu-bug-614993

@@ -0,0 +1,59 @@
+#!/bin/sh
+set -e
+
+local TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture "amd64"
+setupaptarchive
+
+# test success
+UPGRADE="Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  libdrm-intel1 libdrm-nouveau1 libmtdev1 libutouch-grail1 libx11-xcb1
+  libxcb-aux0 libxcb-dri2-0 libxfont1 xserver-common xserver-xorg-core
+  xserver-xorg-input-evdev xserver-xorg-input-mouse
+  xserver-xorg-input-synaptics xserver-xorg-input-vmmouse
+  xserver-xorg-input-wacom xserver-xorg-video-all xserver-xorg-video-apm
+  xserver-xorg-video-ark xserver-xorg-video-ati xserver-xorg-video-chips
+  xserver-xorg-video-cirrus xserver-xorg-video-fbdev xserver-xorg-video-i128
+  xserver-xorg-video-intel xserver-xorg-video-mach64 xserver-xorg-video-mga
+  xserver-xorg-video-neomagic xserver-xorg-video-nouveau xserver-xorg-video-nv
+  xserver-xorg-video-openchrome xserver-xorg-video-r128
+  xserver-xorg-video-radeon xserver-xorg-video-rendition xserver-xorg-video-s3
+  xserver-xorg-video-s3virge xserver-xorg-video-savage
+  xserver-xorg-video-siliconmotion xserver-xorg-video-sis
+  xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-trident
+  xserver-xorg-video-tseng xserver-xorg-video-vesa xserver-xorg-video-vmware
+  xserver-xorg-video-voodoo
+Suggested packages:
+  xfonts-scalable gpointing-device-settings touchfreeze firmware-linux
+Recommended packages:
+  xauth intel-gpu-tools
+The following packages will be REMOVED:
+  xserver-xorg-video-v4l
+The following NEW packages will be installed:
+  libmtdev1 libutouch-grail1 libx11-xcb1 libxcb-aux0 libxcb-dri2-0
+The following packages will be upgraded:
+  libdrm-intel1 libdrm-nouveau1 libxfont1 xserver-common xserver-xorg
+  xserver-xorg-core xserver-xorg-input-evdev xserver-xorg-input-mouse
+  xserver-xorg-input-synaptics xserver-xorg-input-vmmouse
+  xserver-xorg-input-wacom xserver-xorg-video-all xserver-xorg-video-apm
+  xserver-xorg-video-ark xserver-xorg-video-ati xserver-xorg-video-chips
+  xserver-xorg-video-cirrus xserver-xorg-video-fbdev xserver-xorg-video-i128
+  xserver-xorg-video-intel xserver-xorg-video-mach64 xserver-xorg-video-mga
+  xserver-xorg-video-neomagic xserver-xorg-video-nouveau xserver-xorg-video-nv
+  xserver-xorg-video-openchrome xserver-xorg-video-r128
+  xserver-xorg-video-radeon xserver-xorg-video-rendition xserver-xorg-video-s3
+  xserver-xorg-video-s3virge xserver-xorg-video-savage
+  xserver-xorg-video-siliconmotion xserver-xorg-video-sis
+  xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-trident
+  xserver-xorg-video-tseng xserver-xorg-video-vesa xserver-xorg-video-vmware
+  xserver-xorg-video-voodoo
+41 upgraded, 5 newly installed, 1 to remove and 3 not upgraded.
+Need to get 0B/5505kB of archives.
+After this operation, 2294kB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation."
+testequal "$UPGRADE" aptget install xserver-xorg --trivial-only
+