[rpm] - fix regression on paths shared between a real file/dir and a ghost
Panu Matilainen
pmatilai at fedoraproject.org
Mon Jan 28 12:08:58 UTC 2013
commit 8020bfa4fea421c9d09b2394da3735e1e23ffe87
Author: Panu Matilainen <pmatilai at redhat.com>
Date: Mon Jan 28 14:03:33 2013 +0200
- fix regression on paths shared between a real file/dir and a ghost
rpm-4.11-beta-skip-ghost.patch | 50 ++++++++++++++++++++++++++++++++++++++++
rpm.spec | 4 +++
2 files changed, 54 insertions(+), 0 deletions(-)
---
diff --git a/rpm-4.11-beta-skip-ghost.patch b/rpm-4.11-beta-skip-ghost.patch
new file mode 100644
index 0000000..e5d8a3b
--- /dev/null
+++ b/rpm-4.11-beta-skip-ghost.patch
@@ -0,0 +1,50 @@
+commit a712252392eca75443ca45c10a72873cabec7963
+Author: Panu Matilainen <pmatilai at redhat.com>
+Date: Mon Jan 28 12:50:39 2013 +0200
+
+ Be more careful about skipping shared file/directory creation
+
+ - Only skip shared file/dir creation if its actually being created
+ by another package. Previously we could've decided to skip an entry
+ where the other file was also being skipped for some other reason.
+ - Ensure %ghost entries always have FA_SKIP on install, previously
+ they often were FA_CREATE which makes no sense for %ghost. We dont
+ encounter %ghosts at all during install in the FSM as they dont
+ exist in the payload, but the file disposition calculations need
+ to take them into account now that we're avoiding redundant creates.
+ - Fixes a regression from commit f7f5f88f9f3d6587e747b034ccb64a3f00ff4e1e
+ which unearthed the %ghost FA_CREATE issue, reported here:
+ http://lists.fedoraproject.org/pipermail/buildsys/2013-January/004047.html
+
+diff --git a/lib/transaction.c b/lib/transaction.c
+index 6e9e025..397f23d 100644
+--- a/lib/transaction.c
++++ b/lib/transaction.c
+@@ -572,7 +572,8 @@ assert(otherFi != NULL);
+ }
+ } else {
+ /* Skip create on all but the first instance of a shared file */
+- if (rpmfsGetAction(otherFs, otherFileNum) != FA_UNKNOWN)
++ rpmFileAction oaction = rpmfsGetAction(otherFs, otherFileNum);
++ if (oaction != FA_UNKNOWN && !XFA_SKIPPING(oaction))
+ rpmfsSetAction(fs, i, FA_SKIP);
+ }
+
+@@ -760,6 +761,17 @@ static void skipInstallFiles(const rpmts ts, rpmte p)
+ ix = rpmfiDX(fi);
+ drc[ix]++;
+
++ /*
++ * Always skip %ghosts on install.
++ * XXX: Should we skip directory creation if there are only
++ * %ghosts in it? Traditionally we create the (empty) directory, so
++ * preserving that behavior for now at least: leave the refcount alone.
++ */
++ if (rpmfiFFlags(fi) & RPMFILE_GHOST) {
++ rpmfsSetAction(fs, i, FA_SKIP);
++ continue;
++ }
++
+ /* Don't bother with skipped files */
+ if (XFA_SKIPPING(rpmfsGetAction(fs, i))) {
+ drc[ix]--; dff[ix] = 1;
diff --git a/rpm.spec b/rpm.spec
index 44fc48c..04e2c37 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -46,6 +46,7 @@ Patch5: rpm-4.9.90-armhfp.patch
Patch6: rpm-4.9.0-armhfp-logic.patch
# Patches already in upstream
+Patch100: rpm-4.11-beta-skip-ghost.patch
# These are not yet upstream
Patch301: rpm-4.6.0-niagara.patch
@@ -219,6 +220,8 @@ packages on a system.
%patch3 -p1 -b .no-man-dirs
%patch4 -p1 -b .use-gpg2
+%patch100 -p1 -b .skip-ghost
+
%patch301 -p1 -b .niagara
%patch302 -p1 -b .geode
%patch304 -p1 -b .ldflags
@@ -454,6 +457,7 @@ exit 0
* Mon Jan 28 2013 Panu Matilainen <pmatilai at redhat.com> - 4.11.0-0.beta1.2
- armv7hl and armv7hnl should not have -mthumb (#901901)
- fix duplicate directory ownership between rpm and rpm-build (#894201)
+- fix regression on paths shared between a real file/dir and a ghost
* Mon Dec 10 2012 Panu Matilainen <pmatilai at redhat.com> - 4.11.0-0.beta1.1
- update to 4.11 beta
More information about the scm-commits
mailing list