|
Panu Matilainen |
8020bf |
commit a712252392eca75443ca45c10a72873cabec7963
|
|
Panu Matilainen |
8020bf |
Author: Panu Matilainen <pmatilai@redhat.com>
|
|
Panu Matilainen |
8020bf |
Date: Mon Jan 28 12:50:39 2013 +0200
|
|
Panu Matilainen |
8020bf |
|
|
Panu Matilainen |
8020bf |
Be more careful about skipping shared file/directory creation
|
|
Panu Matilainen |
8020bf |
|
|
Panu Matilainen |
8020bf |
- Only skip shared file/dir creation if its actually being created
|
|
Panu Matilainen |
8020bf |
by another package. Previously we could've decided to skip an entry
|
|
Panu Matilainen |
8020bf |
where the other file was also being skipped for some other reason.
|
|
Panu Matilainen |
8020bf |
- Ensure %ghost entries always have FA_SKIP on install, previously
|
|
Panu Matilainen |
8020bf |
they often were FA_CREATE which makes no sense for %ghost. We dont
|
|
Panu Matilainen |
8020bf |
encounter %ghosts at all during install in the FSM as they dont
|
|
Panu Matilainen |
8020bf |
exist in the payload, but the file disposition calculations need
|
|
Panu Matilainen |
8020bf |
to take them into account now that we're avoiding redundant creates.
|
|
Panu Matilainen |
8020bf |
- Fixes a regression from commit f7f5f88f9f3d6587e747b034ccb64a3f00ff4e1e
|
|
Panu Matilainen |
8020bf |
which unearthed the %ghost FA_CREATE issue, reported here:
|
|
Panu Matilainen |
8020bf |
http://lists.fedoraproject.org/pipermail/buildsys/2013-January/004047.html
|
|
Panu Matilainen |
8020bf |
|
|
Panu Matilainen |
8020bf |
diff --git a/lib/transaction.c b/lib/transaction.c
|
|
Panu Matilainen |
8020bf |
index 6e9e025..397f23d 100644
|
|
Panu Matilainen |
8020bf |
--- a/lib/transaction.c
|
|
Panu Matilainen |
8020bf |
+++ b/lib/transaction.c
|
|
Panu Matilainen |
8020bf |
@@ -572,7 +572,8 @@ assert(otherFi != NULL);
|
|
Panu Matilainen |
8020bf |
}
|
|
Panu Matilainen |
8020bf |
} else {
|
|
Panu Matilainen |
8020bf |
/* Skip create on all but the first instance of a shared file */
|
|
Panu Matilainen |
8020bf |
- if (rpmfsGetAction(otherFs, otherFileNum) != FA_UNKNOWN)
|
|
Panu Matilainen |
8020bf |
+ rpmFileAction oaction = rpmfsGetAction(otherFs, otherFileNum);
|
|
Panu Matilainen |
8020bf |
+ if (oaction != FA_UNKNOWN && !XFA_SKIPPING(oaction))
|
|
Panu Matilainen |
8020bf |
rpmfsSetAction(fs, i, FA_SKIP);
|
|
Panu Matilainen |
8020bf |
}
|
|
Panu Matilainen |
8020bf |
|
|
Panu Matilainen |
8020bf |
@@ -760,6 +761,17 @@ static void skipInstallFiles(const rpmts ts, rpmte p)
|
|
Panu Matilainen |
8020bf |
ix = rpmfiDX(fi);
|
|
Panu Matilainen |
8020bf |
drc[ix]++;
|
|
Panu Matilainen |
8020bf |
|
|
Panu Matilainen |
8020bf |
+ /*
|
|
Panu Matilainen |
8020bf |
+ * Always skip %ghosts on install.
|
|
Panu Matilainen |
8020bf |
+ * XXX: Should we skip directory creation if there are only
|
|
Panu Matilainen |
8020bf |
+ * %ghosts in it? Traditionally we create the (empty) directory, so
|
|
Panu Matilainen |
8020bf |
+ * preserving that behavior for now at least: leave the refcount alone.
|
|
Panu Matilainen |
8020bf |
+ */
|
|
Panu Matilainen |
8020bf |
+ if (rpmfiFFlags(fi) & RPMFILE_GHOST) {
|
|
Panu Matilainen |
8020bf |
+ rpmfsSetAction(fs, i, FA_SKIP);
|
|
Panu Matilainen |
8020bf |
+ continue;
|
|
Panu Matilainen |
8020bf |
+ }
|
|
Panu Matilainen |
8020bf |
+
|
|
Panu Matilainen |
8020bf |
/* Don't bother with skipped files */
|
|
Panu Matilainen |
8020bf |
if (XFA_SKIPPING(rpmfsGetAction(fs, i))) {
|
|
Panu Matilainen |
8020bf |
drc[ix]--; dff[ix] = 1;
|