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

This commit is contained in:
Panu Matilainen 2013-01-28 14:03:33 +02:00
parent 3b3e157787
commit 8020bfa4fe
2 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,50 @@
commit a712252392eca75443ca45c10a72873cabec7963
Author: Panu Matilainen <pmatilai@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;

View File

@ -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@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@redhat.com> - 4.11.0-0.beta1.1
- update to 4.11 beta