[rpm/f18] - fix regression on paths shared between a real file/dir and a ghost

Panu Matilainen pmatilai at fedoraproject.org
Mon Jan 28 12:39:09 UTC 2013


commit 91f8c6c095434b880a03ca1c53f8d08f628bd72a
Author: Panu Matilainen <pmatilai at redhat.com>
Date:   Mon Jan 28 14:38:42 2013 +0200

    - fix regression on paths shared between a real file/dir and a ghost

 rpm-4.10.2-skip-ghost.patch |   51 +++++++++++++++++++++++++++++++++++++++++++
 rpm.spec                    |    4 +++
 2 files changed, 55 insertions(+), 0 deletions(-)
---
diff --git a/rpm-4.10.2-skip-ghost.patch b/rpm-4.10.2-skip-ghost.patch
new file mode 100644
index 0000000..5019586
--- /dev/null
+++ b/rpm-4.10.2-skip-ghost.patch
@@ -0,0 +1,51 @@
+commit 2a801924ba62a196f3bf02abe3ebcb525313f2fe
+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
+    - Backported from commit a712252392eca75443ca45c10a72873cabec7963
+
+diff --git a/lib/transaction.c b/lib/transaction.c
+index 74ecc49..0a5f24d 100644
+--- a/lib/transaction.c
++++ b/lib/transaction.c
+@@ -502,7 +502,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);
+ 		    done = 1;
+ 		}
+@@ -695,6 +696,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 1698a1e..51e6434 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -45,6 +45,7 @@ Patch5: rpm-4.9.90-armhfp.patch
 Patch6: rpm-4.9.0-armhfp-logic.patch
 
 # Patches already in upstream
+Patch100: rpm-4.10.2-skip-ghost.patch
 
 # These are not yet upstream
 Patch301: rpm-4.6.0-niagara.patch
@@ -218,6 +219,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
@@ -450,6 +453,7 @@ exit 0
 %changelog
 * Mon Jan 28 2013 Panu Matilainen <pmatilai at redhat.com> - 4.10.2-2
 - armv7hl and armv7hnl should not have -mthumb (#901901)
+- fix regression on paths shared between a real file/dir and a ghost
 
 * Mon Dec 10 2012 Panu Matilainen <pmatilai at redhat.com> - 4.10.2-1
 - update to 4.10.2 (http://rpm.org/wiki/Releases/4.10.2)


More information about the scm-commits mailing list