The following commit has been merged in the iwj branch:
commit 232dba928205c102cee3dbed3dc20cf82ff3a612
Author: Ian Jackson <[EMAIL PROTECTED]>
Date:   Thu Nov 1 19:57:26 2007 +0000

    Correct broken dselect logic for self-conflicting packages.
    The previous code seems to have had some confusion over the precedence
    of && vs : .  The new rule is that a Conflicts is violated if the
    target package is installed or to be error-preserved ie
    would_like_to_install()!=0 - except that we disregard packages which
    directly Conflict with themselves.

diff --git a/debian/changelog b/debian/changelog
index db30d70..8a11ca8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -69,6 +69,7 @@ dpkg (1.14.8) UNRELEASED; urgency=low
   [ Ian Jackson ]
   * Treat successful calls to the postinst as always making the package
     installed.  Reverts Brian Carlson's patch from  #432893.
+  * Correct broken dselect logic for self-conflicting packages.
 
  -- Raphael Hertzog <[EMAIL PROTECTED]>  Mon, 08 Oct 2007 20:49:51 +0200
 
diff --git a/dselect/pkgdepcon.cc b/dselect/pkgdepcon.cc
index 780d765..194f378 100644
--- a/dselect/pkgdepcon.cc
+++ b/dselect/pkgdepcon.cc
@@ -355,6 +355,8 @@ int packagelist::resolvedepcon(dependency *depends) {
 }
 
 int packagelist::deppossatisfied(deppossi *possi, perpackagestate 
**fixbyupgrade) {
+  // `satisfied' here for Conflicts and Breaks means that the
+  //  restriction is violated ie that the target package is wanted
   int would;
   pkginfo::pkgwant want= pkginfo::want_purge;
   
@@ -365,8 +367,9 @@ int packagelist::deppossatisfied(deppossi *possi, 
perpackagestate **fixbyupgrade
     would= 0;
   }
   
-  if (!(possi->up->type == dep_conflicts && possi->up->up == possi->ed) &&
-      possi->up->type == dep_conflicts ? (would != 0) : (would > 0)) {
+  if (possi->up->type == dep_conflicts
+      ? possi->up->up != possi->ed && would != 0
+      : would > 0) {
     // If it's to be installed or left installed, then either it's of
     // the right version, and therefore OK, or a version must have
     // been specified, in which case we don't need to look at the rest

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to