Store transaction element pointers in the removedPkgs hash
authorPanu Matilainen <pmatilai@redhat.com>
Thu, 30 Aug 2012 05:28:22 +0000 (08:28 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Thu, 30 Aug 2012 05:36:22 +0000 (08:36 +0300)
- Change the hashtype name to something else, its no longer a plain
  int hash. Still needs double definition as its not contained in
  a single source (might want a wrapper similar to rpmal), but
  slightly more contained now than the previous intHash definition.
- This opens up some new possibilities, to be taken advantage of
  in later commits.

lib/backend/dbi.h
lib/depends.c
lib/rpmdb.c
lib/rpmdb_internal.h
lib/rpmts.c
lib/rpmts_internal.h
lib/transaction.c

index 5405ebe..49fa1f1 100644 (file)
@@ -17,15 +17,6 @@ struct dbConfig_s {
     int        db_no_fsync;    /*!< no-op fsync for db */
 };
 
-#undef HASHTYPE
-#undef HTKEYTYPE
-#undef HTDATATYPE
-#define HASHTYPE intHash
-#define HTKEYTYPE unsigned int
-#include "lib/rpmhash.H"
-#undef HASHTYPE
-#undef HTKEYTYPE
-
 /** \ingroup rpmdb
  * Describes the collection of index databases used by rpm.
  */
index 2a13f2c..7350e27 100644 (file)
@@ -41,11 +41,13 @@ static rpmds rpmlibP = NULL;
 #undef HTKEYTYPE
 #undef HTDATATYPE
 
-#define HASHTYPE intHash
+#define HASHTYPE removedHash
 #define HTKEYTYPE unsigned int
+#define HTDATATYPE struct rpmte_s *
 #include "rpmhash.C"
 #undef HASHTYPE
 #undef HTKEYTYPE
+#undef HTDATATYPE
 
 /**
  * Check for supported payload format in header.
@@ -95,7 +97,7 @@ static int removePackage(rpmts ts, Header h, rpmte depends)
     if (dboffset == 0) return 1;
 
     /* Filter out duplicate erasures. */
-    if (intHashHasEntry(tsmem->removedPackages, dboffset)) {
+    if (removedHashHasEntry(tsmem->removedPackages, dboffset)) {
         return 0;
     }
 
@@ -103,7 +105,7 @@ static int removePackage(rpmts ts, Header h, rpmte depends)
     if (p == NULL)
        return 1;
 
-    intHashAddEntry(tsmem->removedPackages, dboffset);
+    removedHashAddEntry(tsmem->removedPackages, dboffset, p);
 
     if (tsmem->orderCount >= tsmem->orderAlloced) {
        tsmem->orderAlloced += (tsmem->orderCount - tsmem->orderAlloced) + tsmem->delta;
index 7b83c8c..434e066 100644 (file)
@@ -1937,9 +1937,9 @@ int rpmdbExtendIterator(rpmdbMatchIterator mi,
     return rc;
 }
 
-int rpmdbPruneIterator(rpmdbMatchIterator mi, intHash hdrNums)
+int rpmdbPruneIterator(rpmdbMatchIterator mi, removedHash hdrNums)
 {
-    if (mi == NULL || hdrNums == NULL || intHashNumKeys(hdrNums) <= 0)
+    if (mi == NULL || hdrNums == NULL || removedHashNumKeys(hdrNums) <= 0)
        return 1;
 
     if (!mi->mi_set)
@@ -1952,7 +1952,7 @@ int rpmdbPruneIterator(rpmdbMatchIterator mi, intHash hdrNums)
     assert(mi->mi_set->count > 0);
 
     for (from = 0; from < num; from++) {
-       if (intHashHasEntry(hdrNums, mi->mi_set->recs[from].hdrNum)) {
+       if (removedHashHasEntry(hdrNums, mi->mi_set->recs[from].hdrNum)) {
            mi->mi_set->count--;
            continue;
        }
index de70282..ce95ce1 100644 (file)
 extern "C" {
 #endif
 
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
+#define HASHTYPE removedHash
+#define HTKEYTYPE unsigned int
+#define HTDATATYPE struct rpmte_s *
+#include "rpmhash.H"
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
+
 /** \ingroup rpmdb
  * Reference a database instance.
  * @param db           rpm database
@@ -125,7 +136,7 @@ void rpmdbSortIterator(rpmdbMatchIterator mi);
  * @param hdrNums      hash of package instances
  * @return             0 on success, 1 on failure (bad args)
  */
-int rpmdbPruneIterator(rpmdbMatchIterator mi, intHash hdrNums);
+int rpmdbPruneIterator(rpmdbMatchIterator mi, removedHash hdrNums);
 
 /** \ingroup rpmdb
  * Create a new, empty match iterator (for purposes of extending it
index 02713d3..61684ec 100644 (file)
@@ -591,7 +591,7 @@ void rpmtsEmpty(rpmts ts)
     }
 
     tsmem->orderCount = 0;
-    intHashEmpty(tsmem->removedPackages);
+    removedHashEmpty(tsmem->removedPackages);
     return;
 }
 
@@ -640,7 +640,7 @@ rpmts rpmtsFree(rpmts ts)
 
     (void) rpmtsCloseDB(ts);
 
-    tsmem->removedPackages = intHashFree(tsmem->removedPackages);
+    tsmem->removedPackages = removedHashFree(tsmem->removedPackages);
     tsmem->order = _free(tsmem->order);
     ts->members = _free(ts->members);
 
@@ -983,7 +983,7 @@ rpmts rpmtsCreate(void)
     tsmem = xcalloc(1, sizeof(*ts->members));
     tsmem->delta = 5;
     tsmem->addedPackages = NULL;
-    tsmem->removedPackages = intHashCreate(128, uintId, uintCmp, NULL);
+    tsmem->removedPackages = removedHashCreate(128, uintId, uintCmp, NULL, NULL);
     tsmem->orderAlloced = 0;
     tsmem->orderCount = 0;
     tsmem->order = NULL;
index e863230..60daf47 100644 (file)
@@ -11,7 +11,7 @@ typedef struct diskspaceInfo_s * rpmDiskSpaceInfo;
 
 /* Transaction set elements information */
 typedef struct tsMembers_s {
-    intHash removedPackages;   /*!< Set of packages being removed. */
+    removedHash removedPackages;       /*!< Set of packages being removed. */
     rpmal addedPackages;       /*!< Set of packages being installed. */
 
     rpmte * order;             /*!< Packages sorted by dependencies. */
index e367c89..ab777e2 100644 (file)
@@ -970,7 +970,7 @@ void checkInstalledFiles(rpmts ts, uint64_t fileCount, rpmFpHash ht, fingerPrint
 
        /* Is this package being removed? */
        installedPkg = rpmdbGetIteratorOffset(mi);
-       beingRemoved = intHashHasEntry(tsmem->removedPackages, installedPkg);
+       beingRemoved = removedHashHasEntry(tsmem->removedPackages, installedPkg);
 
        h = headerLink(h);
        headerGet(h, RPMTAG_BASENAMES, &bnames, hgflags);