[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