Author: guillem
Date: 2006-08-08 01:43:22 +0000 (Tue, 08 Aug 2006)
New Revision: 498

Modified:
   trunk/ChangeLog
   trunk/debian/changelog
   trunk/lib/dpkg-db.h
   trunk/lib/fields.c
   trunk/lib/parse.c
   trunk/src/depcon.c
   trunk/src/packages.c
   trunk/src/processarc.c
Log:
Add initial support for the Breaks field, by parsing but rejecting it.
Thanks to Ian Jackson <[EMAIL PROTECTED]>. Closes: #375703


Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog     2006-08-07 17:04:16 UTC (rev 497)
+++ trunk/ChangeLog     2006-08-08 01:43:22 UTC (rev 498)
@@ -1,3 +1,20 @@
+2006-08-08  Ian Jackson  <[EMAIL PROTECTED]>
+
+       * lib/dpkg-db.h (deptype): Add dep_breaks.
+       * lib/fields.c (f_dependency): Bail out if the Breaks field has an
+       alternative through a '|'.
+       * lib/parse.c (fieldinfos): Add support for the Breaks field when
+       parsing them as a depedency field.
+       * src/depcon.c (describedepcon): Support displaying the Breaks
+       relationship.
+       (depisok): Ignore the Breaks field by adding dep_breaks to the assert
+       and returning as succeeded.
+       * src/processarc.c (process_archive): Print a message stating that
+       current dpkg does not support the Breaks field. Do not bail out in
+       case the Breaks references packages to ignore for dependency handling.
+       * src/packages.c (dependencies_ok): Add a place holder comment to
+       be replaced by the code to prevent configuration of Broken packages.
+
 2006-07-07  Nicolas François  <[EMAIL PROTECTED]>
 
        * dpkg-deb/build.c: Specify --null before the -T option to avoid

Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog      2006-08-07 17:04:16 UTC (rev 497)
+++ trunk/debian/changelog      2006-08-08 01:43:22 UTC (rev 498)
@@ -1,5 +1,9 @@
 dpkg (1.13.23~) UNRELEASED; urgency=low
 
+  [ Guillem Jover ]
+  * Add initial support for the Breaks field, by parsing but rejecting it.
+    Thanks to Ian Jackson <[EMAIL PROTECTED]>. Closes: #375703
+
   [ Added dpkg Translations ]
   * Dzongkha (Kinley Tshering)
 

Modified: trunk/lib/dpkg-db.h
===================================================================
--- trunk/lib/dpkg-db.h 2006-08-07 17:04:16 UTC (rev 497)
+++ trunk/lib/dpkg-db.h 2006-08-08 01:43:22 UTC (rev 498)
@@ -38,6 +38,7 @@
   dep_recommends,
   dep_depends,
   dep_predepends,
+  dep_breaks,
   dep_conflicts,
   dep_provides,
   dep_replaces,

Modified: trunk/lib/fields.c
===================================================================
--- trunk/lib/fields.c  2006-08-07 17:04:16 UTC (rev 497)
+++ trunk/lib/fields.c  2006-08-08 01:43:22 UTC (rev 498)
@@ -439,6 +439,7 @@
                  " error after reference to package `%.255s'"),
                  fip->name, dop->ed->name);
       if (fip->integer == dep_conflicts ||
+          fip->integer == dep_breaks ||
           fip->integer == dep_provides ||
           fip->integer == dep_replaces)
         parseerr(NULL,filename,lno, warnto,warncount,pigp,0,

Modified: trunk/lib/parse.c
===================================================================
--- trunk/lib/parse.c   2006-08-07 17:04:16 UTC (rev 497)
+++ trunk/lib/parse.c   2006-08-08 01:43:22 UTC (rev 498)
@@ -61,6 +61,7 @@
   { "Pre-Depends",      f_dependency,      w_dependency,     dep_predepends    
       },
   { "Recommends",       f_dependency,      w_dependency,     dep_recommends    
       },
   { "Suggests",         f_dependency,      w_dependency,     dep_suggests      
       },
+  { "Breaks",           f_dependency,      w_dependency,     dep_breaks        
       },
   { "Conflicts",        f_dependency,      w_dependency,     dep_conflicts     
       },
   { "Enhances",         f_dependency,      w_dependency,     dep_enhances      
       },
   { "Conffiles",        f_conffiles,       w_conffiles                         
       },

Modified: trunk/src/depcon.c
===================================================================
--- trunk/src/depcon.c  2006-08-07 17:04:16 UTC (rev 497)
+++ trunk/src/depcon.c  2006-08-08 01:43:22 UTC (rev 498)
@@ -153,6 +153,7 @@
   case dep_depends:     varbufaddstr(addto, _(" depends on "));     break;
   case dep_predepends:  varbufaddstr(addto, _(" pre-depends on ")); break;
   case dep_recommends:  varbufaddstr(addto, _(" recommends "));     break;
+  case dep_breaks:      varbufaddstr(addto, _(" breaks "));         break;
   case dep_conflicts:   varbufaddstr(addto, _(" conflicts with ")); break;
   case dep_suggests:    varbufaddstr(addto, _(" suggests ")); break;
   case dep_enhances:    varbufaddstr(addto, _(" enhances "));       break;
@@ -185,8 +186,9 @@
   char linebuf[1024];
 
   assert(dep->type == dep_depends || dep->type == dep_predepends ||
-         dep->type == dep_conflicts || dep->type == dep_recommends ||
-        dep->type == dep_suggests || dep->type == dep_enhances );
+        dep->type == dep_breaks || dep->type == dep_conflicts ||
+        dep->type == dep_recommends || dep->type == dep_suggests ||
+        dep->type == dep_enhances);
   
   /* The dependency is always OK if we're trying to remove the depend*ing*
    * package.
@@ -212,6 +214,16 @@
     internerr("unknown istobe depending");
   }
 
+  if (dep->type == dep_breaks)
+    /* We don't implement this and we can only be in this state
+     * if either a Breaks-ignorant or a Breaks-supporting dpkg
+     * installed the package.  In both cases it's probably too
+     * late to do anything useful about it now in this version
+     * so we just ignore it and hope.
+     * FIXME: implement Breaks
+     */
+    return 1;
+
   /* Describe the dependency, in case we have to moan about it. */
   varbufreset(whynot);
   varbufaddc(whynot, ' ');

Modified: trunk/src/packages.c
===================================================================
--- trunk/src/packages.c        2006-08-07 17:04:16 UTC (rev 497)
+++ trunk/src/packages.c        2006-08-08 01:43:22 UTC (rev 498)
@@ -352,6 +352,9 @@
   debug(dbg_depcon,"checking dependencies of %s (- %s)",
         pkg->name, removing ? removing->name : "<none>");
   assert(pkg->installed.valid);
+  /* To implement Breaks we need to add code here which prevents
+   * configuration of Broken packages.
+   * FIXME: implement Breaks */
   for (dep= pkg->installed.depends; dep; dep= dep->next) {
     if (dep->type != dep_depends && dep->type != dep_predepends) continue;
     debug(dbg_depcondetail,"  checking group ...");

Modified: trunk/src/processarc.c
===================================================================
--- trunk/src/processarc.c      2006-08-07 17:04:16 UTC (rev 497)
+++ trunk/src/processarc.c      2006-08-08 01:43:22 UTC (rev 498)
@@ -252,6 +252,16 @@
         }
       }
       break;
+    case dep_breaks:
+      fprintf(stderr, _("dpkg: regarding %s containing %s:\n"
+                       " package uses Breaks; not supported in this dpkg\n"),
+             pfilename, pkg->name);
+      if (!force_depends(dsearch->list))
+       ohshit(_("unsupported dependency problem - not installing %.250s"),
+              pkg->name);
+      fprintf(stderr, _("dpkg: warning - ignoring Breaks !\n"));
+      /* FIXME: implement Breaks */
+      break;
     case dep_suggests:
     case dep_recommends:
     case dep_depends:


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

Reply via email to