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]