Store pointer to transaction set in transaction elements
authorPanu Matilainen <pmatilai@redhat.com>
Fri, 7 May 2010 11:07:39 +0000 (14:07 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Fri, 7 May 2010 11:16:18 +0000 (14:16 +0300)
- unused now but allows various new things and more element "independency"
- eliminate the unused dboffset argument while at it

lib/depends.c
lib/rpmte.c
lib/rpmte_internal.h

index 549ebc9..d9b392c 100644 (file)
@@ -53,8 +53,9 @@ static rpmds rpmlibP = NULL;
  * @param depends      installed package of pair (or RPMAL_NOMATCH on erase)
  * @return             0 on success
  */
-static int removePackage(tsMembers tsmem, Header h, rpmte depends)
+static int removePackage(rpmts ts, Header h, rpmte depends)
 {
+    tsMembers tsmem = rpmtsMembers(ts);
     rpmte p;
     unsigned int dboffset = headerGetInstance(h);
 
@@ -73,7 +74,7 @@ static int removePackage(tsMembers tsmem, Header h, rpmte depends)
        tsmem->order = xrealloc(tsmem->order, sizeof(*tsmem->order) * tsmem->orderAlloced);
     }
 
-    p = rpmteNew(NULL, h, TR_REMOVED, NULL, NULL, -1);
+    p = rpmteNew(ts, h, TR_REMOVED, NULL, NULL);
     rpmteSetDependsOn(p, depends);
 
     tsmem->order[tsmem->orderCount] = p;
@@ -110,7 +111,7 @@ static void addUpgradeErasures(rpmts ts, tsMembers tsmem, rpm_color_t tscolor,
        if (rpmVersionCompare(h, oh) == 0)
            continue;
 
-       removePackage(tsmem, oh, p);
+       removePackage(ts, oh, p);
     }
     mi = rpmdbFreeIterator(mi);
 }
@@ -152,7 +153,7 @@ static void addObsoleteErasures(rpmts ts, tsMembers tsmem, rpm_color_t tscolor,
                        rpmdsDNEVR(obsoletes)+2, ohNEVRA);
                ohNEVRA = _free(ohNEVRA);
 
-               removePackage(tsmem, oh, p);
+               removePackage(ts, oh, p);
            }
        }
        mi = rpmdbFreeIterator(mi);
@@ -291,7 +292,7 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
                        tsmem->orderAlloced * sizeof(*tsmem->order));
     }
 
-    p = rpmteNew(NULL, h, TR_ADDED, key, relocs, -1);
+    p = rpmteNew(ts, h, TR_ADDED, key, relocs);
 
     tsmem->order[oc] = p;
     if (oc == tsmem->orderCount) {
@@ -322,7 +323,7 @@ exit:
 
 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
 {
-    return removePackage(rpmtsMembers(ts), h, NULL);
+    return removePackage(ts, h, NULL);
 }
 
 /**
index 1b9b167..30acace 100644 (file)
@@ -44,6 +44,7 @@ struct rpmte_s {
     rpmds obsoletes;           /*!< Obsoletes: dependencies. */
     rpmfi fi;                  /*!< File information. */
     rpmps probs;               /*!< Problems (relocations) */
+    rpmts ts;                  /*!< Parent transaction */
 
     rpm_color_t color;         /*!< Color bit(s) from package dependencies. */
     rpm_loff_t pkgFileSize;    /*!< No. of bytes in package file (approx). */
@@ -256,6 +257,7 @@ rpmte rpmteFree(rpmte te)
        rpmfsFree(te->fs);
        rpmpsFree(te->probs);
        rpmteCleanDS(te);
+       rpmtsUnlink(te->ts);
 
        memset(te, 0, sizeof(*te));     /* XXX trash and burn */
        free(te);
@@ -263,14 +265,11 @@ rpmte rpmteFree(rpmte te)
     return NULL;
 }
 
-rpmte rpmteNew(const rpmts ts, Header h,
-               rpmElementType type,
-               fnpyKey key,
-               rpmRelocation * relocs,
-               int dboffset)
+rpmte rpmteNew(rpmts ts, Header h, rpmElementType type, fnpyKey key,
+              rpmRelocation * relocs)
 {
     rpmte p = xcalloc(1, sizeof(*p));
-
+    p->ts = rpmtsLink(ts);
     p->type = type;
     addTE(p, h, key, relocs);
     switch (type) {
index 160409d..cfb0ee5 100644 (file)
@@ -23,19 +23,16 @@ typedef struct tsortInfo_s *                tsortInfo;
 
 /** \ingroup rpmte
  * Create a transaction element.
- * @param ts           unused
+ * @param ts           transaction set
  * @param h            header
  * @param type         TR_ADDED/TR_REMOVED
  * @param key          (TR_ADDED) package retrieval key (e.g. file name)
  * @param relocs       (TR_ADDED) package file relocations
- * @param dboffset     unused
  * @return             new transaction element
  */
 RPM_GNUC_INTERNAL
-rpmte rpmteNew(const rpmts ts, Header h, rpmElementType type,
-               fnpyKey key,
-               rpmRelocation * relocs,
-               int dboffset);
+rpmte rpmteNew(rpmts ts, Header h, rpmElementType type, fnpyKey key,
+              rpmRelocation * relocs);
 
 /** \ingroup rpmte
  * Destroy a transaction element.