Move file action calculations to rpmfiNew() where possible
authorPanu Matilainen <pmatilai@redhat.com>
Tue, 11 Nov 2008 19:01:02 +0000 (21:01 +0200)
committerPanu Matilainen <pmatilai@redhat.com>
Tue, 11 Nov 2008 19:01:02 +0000 (21:01 +0200)
- for build operations and src.rpm install this is known

build/files.c
lib/psm.c
lib/rpmfi.c

index 5872aa9..09aafc4 100644 (file)
@@ -1313,12 +1313,6 @@ static void genCpioListAndHeader(FileList fl,
            a = stpcpy(a, "./");
        a = stpcpy(a, (flp->cpioPath + skipLen));
        a++;            /* skip apath NUL */
-
-       if (flp->flags & RPMFILE_GHOST) {
-           fi->actions[i] = FA_SKIP;
-           continue;
-       }
-       fi->actions[i] = FA_COPYOUT;
     }
     if (fip)
        *fip = fi;
index 8d279ce..8e514a0 100644 (file)
--- a/lib/psm.c
+++ b/lib/psm.c
@@ -303,9 +303,6 @@ rpmRC rpmInstallSourcePackage(rpmts ts, FD_t fd,
     fi->astriplen = 0;
     fi->striplen = 0;
 
-    for (i = 0; i < fi->fc; i++)
-       fi->actions[i] = FA_CREATE;
-
     i = fi->fc;
 
     if (fi->h != NULL) {       /* XXX can't happen */
index 81a3e19..c41721a 100644 (file)
@@ -1285,7 +1285,18 @@ rpmfi rpmfiNew(const rpmts ts, Header h, rpmTag tagN, rpmfiFlags flags)
     fi->action = FA_UNKNOWN;
     fi->flags = 0;
 
+    /* For build and src.rpm's the file actions are known at this point */
     fi->actions = xcalloc(fi->fc, sizeof(*fi->actions));
+    if (isBuild) {
+       for (int i = 0; i < fi->fc; i++) {
+           int ghost = fi->fflags[i] & RPMFILE_GHOST;
+           fi->actions[i] = ghost ? FA_SKIP : FA_COPYOUT;
+       }
+    } else if (isSource) {
+       for (int i = 0; i < fi->fc; i++) {
+           fi->actions[i] = FA_CREATE;
+       }
+    }
 
     /* XXX TR_REMOVED needs CPIO_MAP_{ABSOLUTE,ADDDOT} CPIO_ALL_HARDLINKS */