Move netsharedpaths to per-transaction level
authorPanu Matilainen <pmatilai@redhat.com>
Sun, 30 Nov 2008 11:51:32 +0000 (13:51 +0200)
committerPanu Matilainen <pmatilai@redhat.com>
Sun, 30 Nov 2008 11:51:32 +0000 (13:51 +0200)
- netsharedpaths is clearly a per-transaction thing, avoid checking
  and splitting etc over and over for every package

lib/rpmts.c
lib/rpmts_internal.h
lib/transaction.c

index 4d3bf03..498ee66 100644 (file)
@@ -599,6 +599,7 @@ rpmts rpmtsFree(rpmts ts)
     ts->orderAlloced = 0;
 
     ts->keyring = rpmKeyringFree(ts->keyring);
+    ts->netsharedPaths = argvFree(ts->netsharedPaths);
 
     if (_rpmts_stats)
        rpmtsPrintStats(ts);
@@ -1108,6 +1109,14 @@ rpmts rpmtsCreate(void)
     ts->color = rpmExpandNumeric("%{?_transaction_color}");
     ts->prefcolor = rpmExpandNumeric("%{?_prefer_color}")?:2;
 
+    ts->netsharedPaths = NULL;
+    {  char *tmp = rpmExpand("%{_netsharedpath}", NULL);
+       if (tmp && *tmp != '%') {
+           argvSplit(&ts->netsharedPaths, tmp, ":");
+       }
+       free(tmp);
+    }
+
     ts->numRemovedPackages = 0;
     ts->allocedRemovedPackages = ts->delta;
     ts->removedPackages = xcalloc(ts->allocedRemovedPackages,
index 3bf597d..f138d87 100644 (file)
@@ -88,6 +88,8 @@ struct rpmts_s {
 
     rpmKeyring keyring;                /*!< Keyring in use. */
 
+    ARGV_t netsharedPaths;     /*!< From %{_netsharedpath} */
+
     struct rpmop_s ops[RPMTS_OP_MAX];
 
     rpmSpec spec;              /*!< Spec file control structure. */
index d4465cb..a76b1a8 100644 (file)
@@ -394,7 +394,6 @@ static void skipFiles(const rpmts ts, rpmfi fi)
     rpm_color_t FColor;
     int noConfigs = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONFIGS);
     int noDocs = (rpmtsFlags(ts) & RPMTRANS_FLAG_NODOCS);
-    ARGV_t netsharedPaths = NULL;
     ARGV_t languages = NULL;
     const char * dn, * bn;
     size_t dnlen, bnlen;
@@ -407,13 +406,6 @@ static void skipFiles(const rpmts ts, rpmfi fi)
     if (!noDocs)
        noDocs = rpmExpandNumeric("%{_excludedocs}");
 
-    {  char *tmpPath = rpmExpand("%{_netsharedpath}", NULL);
-       if (tmpPath && *tmpPath != '%') {
-           argvSplit(&netsharedPaths, tmpPath, ":");
-       }
-       tmpPath = _free(tmpPath);
-    }
-
     s = rpmExpand("%{_install_langs}", NULL);
     if (!(s && *s != '%'))
        s = _free(s);
@@ -464,7 +456,7 @@ static void skipFiles(const rpmts ts, rpmfi fi)
         * Net shared paths are not relative to the current root (though
         * they do need to take package relocations into account).
         */
-       for (nsp = netsharedPaths; nsp && *nsp; nsp++) {
+       for (nsp = ts->netsharedPaths; nsp && *nsp; nsp++) {
            size_t len;
 
            len = strlen(*nsp);
@@ -597,7 +589,6 @@ static void skipFiles(const rpmts ts, rpmfi fi)
        }
     }
 
-    if (netsharedPaths) argvFree(netsharedPaths);
     if (languages) argvFree(languages);
     free(drc);
     free(dff);