[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