The following commit has been merged in the master branch:
commit 667b5fae5710295092744ce4d1a043a2f426b9ef
Author: Raphaël Hertzog <[email protected]>
Date:   Tue Feb 1 11:57:39 2011 +0100

    Update diversions to work with pkgset instead of pkginfo
    
    A diversion is recorded against a package name, thus a pkgset. This is
    due to the fact that different instances of the same pkgset cannot have
    conflicting pathnames, if they do the pathname object should be the
    same.
    
    Sponsored-by: Linaro Limited
    
    Signed-off-by: Guillem Jover <[email protected]>

diff --git a/src/archives.c b/src/archives.c
index 9f09dc0..8294738 100644
--- a/src/archives.c
+++ b/src/archives.c
@@ -114,7 +114,8 @@ filesavespackage(struct fileinlist *file,
                  struct pkginfo *pkgbeinginstalled)
 {
   struct filepackages_iterator *iter;
-  struct pkginfo *divpkg, *thirdpkg;
+  struct pkgset *divpkgset;
+  struct pkginfo *thirdpkg;
 
   debug(dbg_eachfiledetail,"filesavespackage file `%s' package %s",
         file->namenode->name, pkgtobesaved->set->name);
@@ -124,8 +125,8 @@ filesavespackage(struct fileinlist *file,
    * we're installing then they're not actually the same file, so
    * we can't disappear the package - it is saved by this file. */
   if (file->namenode->divert && file->namenode->divert->useinstead) {
-    divpkg= file->namenode->divert->pkg;
-    if (divpkg == pkgtobesaved || divpkg == pkgbeinginstalled) {
+    divpkgset = file->namenode->divert->pkgset;
+    if (divpkgset == pkgtobesaved->set || divpkgset == pkgbeinginstalled->set) 
{
       debug(dbg_eachfiledetail,"filesavespackage ... diverted -- save!");
       return true;
     }
@@ -445,7 +446,8 @@ tarobject(void *ctx, struct tar_entry *ti)
   char databuf[TARBLKSZ];
   struct file_stat *st;
   struct fileinlist *nifd, **oldnifd;
-  struct pkginfo *divpkg, *otherpkg;
+  struct pkgset *divpkgset;
+  struct pkginfo *otherpkg;
 
   ensureobstackinit();
 
@@ -469,14 +471,14 @@ tarobject(void *ctx, struct tar_entry *ti)
         ? nifd->namenode->divert->useinstead->name : "<none>");
 
   if (nifd->namenode->divert && nifd->namenode->divert->camefrom) {
-    divpkg= nifd->namenode->divert->pkg;
+    divpkgset = nifd->namenode->divert->pkgset;
 
-    if (divpkg) {
+    if (divpkgset) {
       forcibleerr(fc_overwritediverted,
                   _("trying to overwrite `%.250s', which is the "
                     "diverted version of `%.250s' (package: %.100s)"),
                   nifd->namenode->name, nifd->namenode->divert->camefrom->name,
-                  divpkg->set->name);
+                  divpkgset->name);
     } else {
       forcibleerr(fc_overwritediverted,
                   _("trying to overwrite `%.250s', which is the "
@@ -577,10 +579,10 @@ tarobject(void *ctx, struct tar_entry *ti)
         /* Right, so we may be diverting this file. This makes the conflict
          * OK iff one of us is the diverting package (we don't need to
          * check for both being the diverting package, obviously). */
-        divpkg = nifd->namenode->divert->pkg;
-        debug(dbg_eachfile, "tarobject ... diverted, divpkg=%s",
-              divpkg ? divpkg->set->name : "<none>");
-        if (otherpkg == divpkg || tc->pkg == divpkg)
+        divpkgset = nifd->namenode->divert->pkgset;
+        debug(dbg_eachfile, "tarobject ... diverted, divpkgset=%s",
+              divpkgset ? divpkgset->name : "<none>");
+        if (otherpkg->set == divpkgset || tc->pkg->set == divpkgset)
           continue;
       }
 
diff --git a/src/divertcmd.c b/src/divertcmd.c
index 01f5a01..1dd32e8 100644
--- a/src/divertcmd.c
+++ b/src/divertcmd.c
@@ -267,10 +267,10 @@ file_rename(struct file *src, struct file *dst)
 static const char *
 diversion_pkg_name(struct diversion *d)
 {
-       if (d->pkg == NULL)
+       if (d->pkgset == NULL)
                return ":";
        else
-               return d->pkg->set->name;
+               return d->pkgset->name;
 }
 
 static const char *
@@ -332,10 +332,10 @@ diversion_describe(struct diversion *d)
                name_to = d->useinstead->name;
        }
 
-       if (d->pkg == NULL)
+       if (d->pkgset == NULL)
                pkgname = NULL;
        else
-               pkgname = d->pkg->set->name;
+               pkgname = d->pkgset->name;
 
        return varbuf_diversion(&str, pkgname, name_from, name_to);
 }
@@ -397,7 +397,7 @@ diversion_add(const char *const *argv)
        struct file file_from, file_to;
        struct diversion *contest, *altname;
        struct filenamenode *fnn_from, *fnn_to;
-       struct pkginfo *pkg;
+       struct pkgset *pkgset;
 
        opt_pkgname_match_any = false;
 
@@ -438,9 +438,9 @@ diversion_add(const char *const *argv)
 
        /* Handle package name. */
        if (opt_pkgname == NULL)
-               pkg = NULL;
+               pkgset = NULL;
        else
-               pkg = pkg_db_find(opt_pkgname);
+               pkgset = pkg_db_find_set(opt_pkgname);
 
        /* Check we are not stomping over an existing diversion. */
        if (fnn_from->divert || fnn_to->divert) {
@@ -448,7 +448,7 @@ diversion_add(const char *const *argv)
                    strcmp(fnn_to->divert->camefrom->name, filename) == 0 &&
                    fnn_from->divert && fnn_from->divert->useinstead &&
                    strcmp(fnn_from->divert->useinstead->name, opt_divertto) == 
0 &&
-                   fnn_from->divert->pkg == pkg) {
+                   fnn_from->divert->pkgset == pkgset) {
                        if (opt_verbose > 0)
                                printf(_("Leaving '%s'\n"),
                                       diversion_describe(fnn_from->divert));
@@ -469,12 +469,12 @@ diversion_add(const char *const *argv)
        altname->camefrom = fnn_from;
        altname->camefrom->divert = contest;
        altname->useinstead = NULL;
-       altname->pkg = pkg;
+       altname->pkgset = pkgset;
 
        contest->useinstead = fnn_to;
        contest->useinstead->divert = altname;
        contest->camefrom = NULL;
-       contest->pkg = pkg;
+       contest->pkgset = pkgset;
 
        /* Update database and file system if needed. */
        if (opt_verbose > 0)
@@ -497,7 +497,7 @@ diversion_remove(const char *const *argv)
        struct filenamenode *namenode;
        struct diversion *contest, *altname;
        struct file file_from, file_to;
-       struct pkginfo *pkg;
+       struct pkgset *pkgset;
 
        if (!filename || argv[1])
                badusage(_("--%s needs a single argument"), cipaction->olong);
@@ -513,9 +513,9 @@ diversion_remove(const char *const *argv)
        }
 
        if (opt_pkgname == NULL)
-               pkg = NULL;
+               pkgset = NULL;
        else
-               pkg = pkg_db_find(opt_pkgname);
+               pkgset = pkg_db_find_set(opt_pkgname);
 
        contest = namenode->divert;
        altname = contest->useinstead->divert;
@@ -528,7 +528,7 @@ diversion_remove(const char *const *argv)
                       diversion_current(filename),
                       diversion_describe(contest));
 
-       if (!opt_pkgname_match_any && pkg != contest->pkg)
+       if (!opt_pkgname_match_any && pkgset != contest->pkgset)
                ohshit(_("mismatch on package\n"
                         "  when removing `%s'\n"
                         "  found `%s'"),
@@ -635,12 +635,12 @@ diversion_listpackage(const char *const *argv)
        if (namenode == NULL)
                return 0;
 
-       if (namenode->divert->pkg == NULL)
+       if (namenode->divert->pkgset == NULL)
                /* Indicate package is local using something not in package
                 * namespace. */
                printf("LOCAL\n");
        else
-               printf("%s\n", namenode->divert->pkg->set->name);
+               printf("%s\n", namenode->divert->pkgset->name);
 
        return 0;
 }
diff --git a/src/divertdb.c b/src/divertdb.c
index c8c0103..74746bb 100644
--- a/src/divertdb.c
+++ b/src/divertdb.c
@@ -105,8 +105,9 @@ ensure_diversions(void)
                oicontest->camefrom = NULL;
 
                fgets_must(linebuf, sizeof(linebuf), file, diversionsname);
-               oicontest->pkg = oialtname->pkg = strcmp(linebuf, ":") ?
-                                                 pkg_db_find(linebuf) : NULL;
+               oicontest->pkgset = strcmp(linebuf, ":") ?
+                                   pkg_db_find_set(linebuf) : NULL;
+               oialtname->pkgset = oicontest->pkgset;
 
                if (oialtname->camefrom->divert ||
                    oicontest->useinstead->divert)
diff --git a/src/filesdb.h b/src/filesdb.h
index 21d14b0..de62aa1 100644
--- a/src/filesdb.h
+++ b/src/filesdb.h
@@ -126,7 +126,7 @@ struct fileinlist {
 struct diversion {
   struct filenamenode *useinstead;
   struct filenamenode *camefrom;
-  struct pkginfo *pkg;
+  struct pkgset *pkgset;
 
   /* The ‘contested’ halves are in this list for easy cleanup. */
   struct diversion *next;
diff --git a/src/help.c b/src/help.c
index c9164aa..1fc934f 100644
--- a/src/help.c
+++ b/src/help.c
@@ -67,14 +67,14 @@ struct filenamenode *namenodetouse(struct filenamenode 
*namenode, struct pkginfo
         namenode->name, pkg->set->name);
 
   r=
-    (namenode->divert->useinstead && namenode->divert->pkg != pkg)
+    (namenode->divert->useinstead && namenode->divert->pkgset != pkg->set)
       ? namenode->divert->useinstead : namenode;
 
   debug(dbg_eachfile,
         "namenodetouse ... useinstead=%s camefrom=%s pkg=%s return %s",
         namenode->divert->useinstead ? namenode->divert->useinstead->name : 
"<none>",
         namenode->divert->camefrom ? namenode->divert->camefrom->name : 
"<none>",
-        namenode->divert->pkg ? namenode->divert->pkg->set->name : "<none>",
+        namenode->divert->pkgset ? namenode->divert->pkgset->name : "<none>",
         r->name);
 
   return r;
diff --git a/src/processarc.c b/src/processarc.c
index e3e3ea0..f8bfb1f 100644
--- a/src/processarc.c
+++ b/src/processarc.c
@@ -395,7 +395,7 @@ void process_archive(const char *filename) {
   int r, i;
   pid_t pid;
   struct pkgiterator *it;
-  struct pkginfo *pkg, *otherpkg, *divpkg;
+  struct pkginfo *pkg, *otherpkg;
   char *cidirrest, *p;
   char conffilenamebuf[MAXCONFFILENAME];
   char *psize;
@@ -1230,11 +1230,12 @@ void process_archive(const char *filename) {
    * have claimed ‘ownership’ of all its files. */
   for (cfile= newfileslist; cfile; cfile= cfile->next) {
     struct filepackages_iterator *iter;
+    struct pkgset *divpkgset;
 
     if (!(cfile->namenode->flags & fnnf_elide_other_lists)) continue;
     if (cfile->namenode->divert && cfile->namenode->divert->useinstead) {
-      divpkg= cfile->namenode->divert->pkg;
-      if (divpkg == pkg) {
+      divpkgset = cfile->namenode->divert->pkgset;
+      if (divpkgset == pkg->set) {
         debug(dbg_eachfile,
               "process_archive not overwriting any `%s' (overriding, `%s')",
               cfile->namenode->name, 
cfile->namenode->divert->useinstead->name);
@@ -1242,10 +1243,10 @@ void process_archive(const char *filename) {
       } else {
         debug(dbg_eachfile,
               "process_archive looking for overwriting `%s' (overridden by 
%s)",
-              cfile->namenode->name, divpkg ? divpkg->set->name : "<local>");
+              cfile->namenode->name, divpkgset ? divpkgset->name : "<local>");
       }
     } else {
-      divpkg = NULL;
+      divpkgset = NULL;
       debug(dbg_eachfile, "process_archive looking for overwriting `%s'",
             cfile->namenode->name);
     }
@@ -1257,7 +1258,7 @@ void process_archive(const char *filename) {
        * and we don't bother with it here, clearly. */
       if (otherpkg == pkg || !otherpkg->clientdata->fileslistvalid)
         continue;
-      if (otherpkg == divpkg) {
+      if (otherpkg->set == divpkgset) {
         debug(dbg_eachfiledetail, "process_archive ... diverted, skipping");
         continue;
       }
diff --git a/src/querycmd.c b/src/querycmd.c
index 3e6c7cc..17f1319 100644
--- a/src/querycmd.c
+++ b/src/querycmd.c
@@ -271,11 +271,11 @@ static int searchoutput(struct filenamenode *namenode) {
     const char *name_to = namenode->divert->useinstead ?
                           namenode->divert->useinstead->name : namenode->name;
 
-    if (namenode->divert->pkg) {
+    if (namenode->divert->pkgset) {
       printf(_("diversion by %s from: %s\n"),
-             namenode->divert->pkg->set->name, name_from);
+             namenode->divert->pkgset->name, name_from);
       printf(_("diversion by %s to: %s\n"),
-             namenode->divert->pkg->set->name, name_to);
+             namenode->divert->pkgset->name, name_to);
     } else {
       printf(_("local diversion from: %s\n"), name_from);
       printf(_("local diversion to: %s\n"), name_to);
@@ -424,15 +424,15 @@ enqperpackage(const char *const *argv)
             namenode= file->namenode;
             puts(namenode->name);
             if (namenode->divert && !namenode->divert->camefrom) {
-              if (!namenode->divert->pkg)
+              if (!namenode->divert->pkgset)
                printf(_("locally diverted to: %s\n"),
                       namenode->divert->useinstead->name);
-              else if (pkg == namenode->divert->pkg)
+              else if (pkg->set == namenode->divert->pkgset)
                printf(_("package diverts others to: %s\n"),
                       namenode->divert->useinstead->name);
               else
                printf(_("diverted by %s to: %s\n"),
-                      namenode->divert->pkg->set->name,
+                      namenode->divert->pkgset->name,
                       namenode->divert->useinstead->name);
             }
             file= file->next;
diff --git a/src/remove.c b/src/remove.c
index 9c8cbf1..ec0e6a3 100644
--- a/src/remove.c
+++ b/src/remove.c
@@ -431,7 +431,7 @@ static void removal_bulk_remove_configfiles(struct pkginfo 
*pkg) {
       } else if (searchfile->namenode->divert &&
                  (searchfile->namenode->divert->camefrom ||
                   (searchfile->namenode->divert->useinstead &&
-                   searchfile->namenode->divert->pkg != pkg))) {
+                   searchfile->namenode->divert->pkgset != pkg->set))) {
         debug(dbg_conff, "removal_bulk conffile '%s' ignored due to diversion",
               conff->name);
         *lconffp= conff->next;

-- 
dpkg's main repository


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

Reply via email to