From 8020bfa4fea421c9d09b2394da3735e1e23ffe87 Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Jan 28 2013 12:03:33 +0000 Subject: - fix regression on paths shared between a real file/dir and a ghost --- 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 +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 - 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 - 4.11.0-0.beta1.1 - update to 4.11 beta