[CVS] RPM: rpm/rpmdb/ rpmdb.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 09-Dec-2009 22:40:20 Branch: HEAD Handle: 2009120921402000 Modified files: rpm/rpmdb rpmdb.c Log: - rpmdb: haul out a layer of trash. Summary: RevisionChanges Path 1.355 +15 -47 rpm/rpmdb/rpmdb.c patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.c $ cvs diff -u -r1.354 -r1.355 rpmdb.c --- rpm/rpmdb/rpmdb.c 9 Dec 2009 20:32:45 - 1.354 +++ rpm/rpmdb/rpmdb.c 9 Dec 2009 21:40:20 - 1.355 @@ -1478,28 +1478,29 @@ /** * Attempt partial matches on name[-version[-release]] strings. - * @param dbiindex database handle (always RPMTAG_NAME) - * @param dbcursor index database cursor - * @param keysearch key/length/flags - * @param data search data/length/flags + * @param dbiindex database handle (always RPMTAG_NVRA) * @param NVRname[-version[-release]] string/pattern * @retval matches set of header instances that match * @return RPMRC_OK on match, RPMRC_NOMATCH or RPMRC_FAIL */ -static rpmRC dbiFindMatches(dbiIndex dbi, DBC * dbcursor, DBT * key, DBT * data, +static rpmRC dbiFindMatches(dbiIndex dbi, const char * NVR, /*...@out@*/ dbiIndexSet * matches) /*...@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ - /*...@modifies dbi, *dbcursor, *key, *data, *matches, + /*...@modifies dbi, *dbcursor, *matches, rpmGlobalMacroContext, fileSystem, internalState @*/ /*...@requires maxSet(matches) >= 0 @*/ { const char * s = NVR; size_t ns = (s ? strlen(s) : 0); +DBC * dbcursor = NULL; rpmRC rc = RPMRC_NOTFOUND; int ret; +int xx; if (ns == 0) goto exit; +xx = dbiCopen(dbi, dbiTxnid(dbi), &dbcursor, 0); + {rpmTag _tag = RPMTAG_NVRA; rpmMireMode _mode = RPMMIRE_PCRE; /* Add ^...$ *RE anchors. Escape pattern characters. */ @@ -1521,6 +1522,9 @@ break; } +xx = dbiCclose(dbi, dbcursor, 0); +dbcursor = NULL; + exit: /*...@-unqualifiedtrans@*/ /* FIX: double indirection */ if (rc != RPMRC_OK && matches && *matches) @@ -1529,41 +1533,6 @@ return rc; } -/** - * Lookup by name, name-version, and finally by name-version-release. - * Both version and release can be patterns. - * @todo Name must be an exact match, as name is a db key. - * @param dbiindex database handle (always RPMTAG_NAME) - * @param NVRname[-version[-release]] string/pattern - * @retval matches set of header instances that match - * @return RPMRC_OK on match, RPMRC_NOMATCH or RPMRC_FAIL - */ -static rpmRC dbiFindByLabel(dbiIndex dbi, /*...@null@*/ const char * NVR, - /*...@out@*/ dbiIndexSet * matches) - /*...@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ - /*...@modifies dbi, *matches, - rpmGlobalMacroContext, fileSystem, internalState @*/ - /*...@requires maxSet(matches) >= 0 @*/ -{ -DBC * dbcursor = NULL; -DBT k = DBT_INIT, *key = &k; -DBT v = DBT_INIT, *data = &v; -rpmRC rc; -int xx; - -if (NVR == NULL || strlen(NVR) == 0) return RPMRC_NOTFOUND; - -xx = dbiCopen(dbi, dbiTxnid(dbi), &dbcursor, 0); - -rc = dbiFindMatches(dbi, dbcursor, key, data, NVR, matches); - -xx = dbiCclose(dbi, dbcursor, 0); -dbcursor = NULL; -/*...@-nullstate@*/ /* FIX: *matches may be NULL. */ -return rc; -/*...@=nullstate@*/ -} - void * dbiStatsAccumulator(dbiIndex dbi, int opx) { void * sw = NULL; @@ -2581,7 +2550,8 @@ default: break; /* XXX HACK to remove rpmdbFindByLabel/findMatches from the API */ case RPMDBI_LABEL: - tag = RPMTAG_NAME; + tag = RPMTAG_NVRA; + /*...@fallthrough@*/ isLabel = 1; break; /* XXX HACK to remove the existing complexity of RPMTAG_BASENAMES */ @@ -2624,13 +2594,11 @@ /* XXX Special case #3: empty iterator with rpmmiGrow() */ assert(keylen == 0); } -else if (isLabel && tag == RPMTAG_NAME) { +else if (isLabel) { /* XXX Special case #4: gather primary keys for a NVR label. */ - int rc; - - rc = dbiFindByLabel(dbi, keyp, &set); + rpmRC rc = dbiFindMatches(dbi, keyp, &set); -
[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ rpmdb.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 09-Dec-2009 21:32:46 Branch: HEAD Handle: 2009120920324401 Modified files: rpm CHANGES rpm/rpmdb rpmdb.c Log: - rpmdb: fold rpmdbMireApply into dbiMireKeys. Summary: RevisionChanges Path 1.3191 +1 -0 rpm/CHANGES 1.354 +90 -91 rpm/rpmdb/rpmdb.c patch -p0 <<'@@ .' Index: rpm/CHANGES $ cvs diff -u -r1.3190 -r1.3191 CHANGES --- rpm/CHANGES 9 Dec 2009 17:52:41 - 1.3190 +++ rpm/CHANGES 9 Dec 2009 20:32:44 - 1.3191 @@ -1,5 +1,6 @@ 5.2b1 -> 5.3a1 +- jbj: rpmdb: fold rpmdbMireApply into dbiMireKeys. - jbj: rpmmi: optimize NVRA range queries using a *RE stem. - jbj: rpmdb: inline rpmdbOpenAll for inplace --rebuilddb. sadly DB->associate(..., DB_CREATE) is not free threaded w -fopenmp. oh well. @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.c $ cvs diff -u -r1.353 -r1.354 rpmdb.c --- rpm/rpmdb/rpmdb.c 9 Dec 2009 17:52:42 - 1.353 +++ rpm/rpmdb/rpmdb.c 9 Dec 2009 20:32:45 - 1.354 @@ -65,6 +65,9 @@ int _rpmdb_debug = 0; /*...@unchecked@*/ +int _rpmmi_debug = 0; + +/*...@unchecked@*/ static int _rebuildinprogress = 0; static int _rebuild_inplace = 1; @@ -1234,64 +1237,6 @@ return rpmdbCount(db, RPMTAG_NAME, name, 0); } -int rpmdbMireApply(rpmdb db, rpmTag tag, rpmMireMode mode, const char * pat, - const char *** argvp) -{ -DBC * dbcursor = NULL; -DBT k = DBT_INIT; -DBT v = DBT_INIT; -dbiIndex dbi; -miRE mire = NULL; -ARGV_t av = NULL; -int ret = 1; /* assume error */ -int rc; -int xx; - -dbi = dbiOpen(db, tag, 0); -if (dbi == NULL) - goto exit; - -if (pat) { - mire = mireNew(mode, 0); - xx = mireRegcomp(mire, pat); -} - -xx = dbiCopen(dbi, dbiTxnid(dbi), &dbcursor, 0); - -/* Iterate over all string keys, collecting pattern matches. */ -while ((rc = dbiGet(dbi, dbcursor, &k, &v, DB_NEXT_NODUP)) == 0) { - size_t ns = k.size; - /* XXX TODO: strdup malloc is necessary solely for argvAdd() */ - char * s = memcpy(xmalloc(ns+1), k.data, ns); - - s[ns] = '\0'; - if (mire == NULL || mireRegexec(mire, s, ns) >= 0) - xx = argvAdd(&av, s); - s = _free(s); -} - -xx = dbiCclose(dbi, dbcursor, 0); -dbcursor = NULL; - -switch (rc) { -case 0: -case DB_NOTFOUND: - ret = 0; - break; -default: - rpmlog(RPMLOG_ERR, _("error(%d) getting keys from %s index\n"), - rc, tagName(dbi->dbi_rpmtag)); - break; -} - -exit: -if (argvp != NULL) - xx = argvAppend(argvp, av); -av = argvFree(av); -mire = mireFree(mire); -return ret; -} - /* Return pointer to first RE character (or NUL terminator) */ static const char * stemEnd(const char * s) /*...@*/ @@ -1354,8 +1299,21 @@ return t; } -static int rpmdbMireKeys(rpmdb db, rpmTag tag, rpmMireMode mode, - const char * pat, dbiIndexSet * matches) +/** + * Retrieve prinary/secondary keys for a pattern match. + * @todo Move to Berkeley DB db3.c when dbiIndexSet is eliminated. + * @param db rpm database + * @param tagrpm tag + * @param mode type of pattern match + * @param patpattern to match (NULL iterates all keys). + * @retval *matches array or primary keys that match (or NULL) + * @retval *argvp array of secondary keys that match (or NULL) + */ +static int dbiMireKeys(rpmdb db, rpmTag tag, rpmMireMode mode, + /*...@null@*/ const char * pat, + /*...@null@*/ dbiIndexSet * matches, + /*...@null@*/ const char *** argvp) + /*...@modifies *matches, *argvp @*/ { DBC * dbcursor = NULL; DBT k = DBT_INIT; @@ -1364,6 +1322,7 @@ dbiIndex dbi; miRE mire = NULL; uint32_t _flags = DB_NEXT; +ARGV_t av = NULL; dbiIndexSet set = NULL; const char * b = NULL; size_t nb = 0; @@ -1375,23 +1334,40 @@ if (dbi == NULL) goto exit; +if (_rpmmi_debug || dbi->dbi_debug) +fprintf(stderr, "--> %s(%p, %s(%u), %d, \"%s\", %p, %p)\n"
[CVS] RPM: rpm/lib/ rpminstall.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 09-Dec-2009 18:55:01 Branch: HEAD Handle: 2009120917550100 Modified files: rpm/lib rpminstall.c Log: - typo. Summary: RevisionChanges Path 1.223 +1 -1 rpm/lib/rpminstall.c patch -p0 <<'@@ .' Index: rpm/lib/rpminstall.c $ cvs diff -u -r1.222 -r1.223 rpminstall.c --- rpm/lib/rpminstall.c 9 Dec 2009 16:02:44 - 1.222 +++ rpm/lib/rpminstall.c 9 Dec 2009 17:55:01 - 1.223 @@ -349,7 +349,7 @@ rc = RPMRC_FAIL; break; } - xx = rpmtsAddEraseElement(ts, h, recOffset); + xx = rpmtsAddEraseElement(ts, h, hdrNum); } mi = rpmmiFree(mi); @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ rpmdb.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 09-Dec-2009 18:52:42 Branch: HEAD Handle: 2009120917524101 Modified files: rpm CHANGES rpm/rpmdb rpmdb.c Log: - rpmmi: optimize NVRA range queries using a *RE stem. Summary: RevisionChanges Path 1.3190 +1 -0 rpm/CHANGES 1.353 +28 -65 rpm/rpmdb/rpmdb.c patch -p0 <<'@@ .' Index: rpm/CHANGES $ cvs diff -u -r1.3189 -r1.3190 CHANGES --- rpm/CHANGES 9 Dec 2009 03:59:57 - 1.3189 +++ rpm/CHANGES 9 Dec 2009 17:52:41 - 1.3190 @@ -1,5 +1,6 @@ 5.2b1 -> 5.3a1 +- jbj: rpmmi: optimize NVRA range queries using a *RE stem. - jbj: rpmdb: inline rpmdbOpenAll for inplace --rebuilddb. sadly DB->associate(..., DB_CREATE) is not free threaded w -fopenmp. oh well. - jbj: rpmts: take checkpoints beroe and after --rebuilddb. @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.c $ cvs diff -u -r1.352 -r1.353 rpmdb.c --- rpm/rpmdb/rpmdb.c 9 Dec 2009 03:59:57 - 1.352 +++ rpm/rpmdb/rpmdb.c 9 Dec 2009 17:52:42 - 1.353 @@ -64,8 +64,6 @@ /*...@unchecked@*/ int _rpmdb_debug = 0; -static int _jbj_debug = 0; - /*...@unchecked@*/ static int _rebuildinprogress = 0; @@ -1294,22 +1292,12 @@ return ret; } -static void prtDBT(const char * msg, DBT * kp) -{ -if (msg) fprintf(stderr, "\t%s", msg); -fprintf(stderr, " %p[%u:%u:%u] flags 0x%x\n", - kp->data, (unsigned)kp->size, (unsigned)kp->doff, (unsigned)kp->dlen, - kp->flags); -} - -#ifdef NOTYET -/* Determine if the regular expression specification has any meta characters. */ +/* Return pointer to first RE character (or NUL terminator) */ static const char * stemEnd(const char * s) - /*...@modifies sxp @*/ + /*...@*/ { int c; -/* Return pointer to first RE character (or NUL terminator) */ while ((c = *s)) { switch (c) { case '.': @@ -1337,7 +1325,6 @@ exit: return s; } -#endif /*...@only@*/ static const char * _str2PCREpat(/*...@null@*/ const char *_pre, const char *s, @@ -1351,9 +1338,6 @@ char * t; char * te; -if (_pre == NULL) _pre = "^"; -if (_post == NULL) _post = "(-[^-]+-[^-]+\\.[^.]+|-[^-]+\\.[^.]+|\\.[^.]+|)$"; - /* Find the PCRE pattern length, including escapes. */ for (se = s; *se != '\0'; se++, nt++) if (strchr(_REchars, *se)) nt++; @@ -1367,8 +1351,6 @@ te = stpcpy(te, _post); *te = '\0'; -if (_jbj_debug) -fprintf(stderr, "<-- %s(\"%s\") ret \"%s\"\n", __FUNCTION__, s, t); return t; } @@ -1377,15 +1359,14 @@ { DBC * dbcursor = NULL; DBT k = DBT_INIT; -#ifdef NOTYET -DBT fk; -#endif DBT p = DBT_INIT; DBT v = DBT_INIT; dbiIndex dbi; miRE mire = NULL; -uint32_t _flags = DB_NEXT; -dbiIndexSet set = NULL; +uint32_t _flags = DB_NEXT; +dbiIndexSet set = NULL; +const char * b = NULL; +size_t nb = 0; int ret = 1; /* assume error */ int rc; int xx; @@ -1395,10 +1376,6 @@ goto exit; if (pat) { - const char * b = pat; -#ifdef NOTYET - const char * be; -#endif mire = mireNew(mode, 0); xx = mireRegcomp(mire, pat); @@ -1407,22 +1384,20 @@ default: break; case RPMMIRE_PCRE: -#ifdef NOTYET - if (*b == '^') k.doff = 1; - be = stemEnd(b + k.doff); + b = pat; + if (*b == '^') b++; + nb = stemEnd(b) - b; /* If partial match on stem won't help, just iterate. */ - if (be == (b + k.doff)) { + if (nb == 0) { k.doff = 0; goto doit; } /* Set stem length for partial match retrieve. */ - k.dlen = (be - b) - k.doff; k.flags = DB_DBT_PARTIAL; + k.dlen = nb; + k.size = nb; k.data = (void *) b; - _flags = DB_SET; -#else - goto doit; -#endif + _flags = DB_SET_RANGE; break; case RPMMIRE_STRCMP: k.size = (UINT32_T) strlen(b); @@ -1430,37 +1405,33 @@ _flags = DB_SET; break;
[CVS] RPM: rpm/lib/ rpminstall.c tgi.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Pinto Elia Root: /v/rpm/cvs Email: devzero2...@rpm5.org Module: rpm Date: 09-Dec-2009 17:02:44 Branch: HEAD Handle: 2009120916024400 Modified files: rpm/lib rpminstall.c tgi.c Log: try to use rpmmiInstance consistently with uint32_t for the return data type and hdrNum. Summary: RevisionChanges Path 1.222 +2 -2 rpm/lib/rpminstall.c 2.27+2 -2 rpm/lib/tgi.c patch -p0 <<'@@ .' Index: rpm/lib/rpminstall.c $ cvs diff -u -r1.221 -r1.222 rpminstall.c --- rpm/lib/rpminstall.c 8 Dec 2009 13:25:05 - 1.221 +++ rpm/lib/rpminstall.c 9 Dec 2009 16:02:44 - 1.222 @@ -343,9 +343,9 @@ return RPMRC_NOTFOUND; while ((h = rpmmiNext(mi)) != NULL) { - unsigned int recOffset = rpmmiInstance(mi); + uint32_t hdrNum = rpmmiInstance(mi); - if (recOffset == 0) { /* XXX can't happen. */ + if (hdrNum == 0) { /* XXX can't happen. */ rc = RPMRC_FAIL; break; } @@ . patch -p0 <<'@@ .' Index: rpm/lib/tgi.c $ cvs diff -u -r2.26 -r2.27 tgi.c --- rpm/lib/tgi.c 15 May 2009 13:40:58 - 2.26 +++ rpm/lib/tgi.c 9 Dec 2009 16:02:44 - 2.27 @@ -59,9 +59,9 @@ return RPMRC_NOTFOUND; while ((h = rpmmiNext(mi)) != NULL) { - unsigned int recOffset = rpmmiInstance(mi); + uint32_t hdrNum = rpmmiInstance(mi); - if (recOffset == 0) { /* XXX can't happen. */ + if (hdrNum == 0) { /* XXX can't happen. */ rc = RPMRC_FAIL; break; } @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm/scripts/ brp-implant-ident-static brp-java-repack-jars ...
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Pinto Elia Root: /v/rpm/cvs Email: devzero2...@rpm5.org Module: rpm Date: 09-Dec-2009 16:00:27 Branch: HEAD Handle: 2009120915002700 Modified files: rpm/scripts brp-implant-ident-static brp-java-repack-jars java.prov.sh java.req.sh javadeps.sh Log: get ride of some useless bashism: probably doesn't harm Summary: RevisionChanges Path 1.2 +3 -2 rpm/scripts/brp-implant-ident-static 1.2 +7 -5 rpm/scripts/brp-java-repack-jars 1.3 +3 -2 rpm/scripts/java.prov.sh 1.3 +3 -2 rpm/scripts/java.req.sh 1.3 +6 -4 rpm/scripts/javadeps.sh patch -p0 <<'@@ .' Index: rpm/scripts/brp-implant-ident-static $ cvs diff -u -r1.1 -r1.2 brp-implant-ident-static --- rpm/scripts/brp-implant-ident-static 20 Jun 2007 16:56:47 - 1.1 +++ rpm/scripts/brp-implant-ident-static 9 Dec 2009 15:00:27 - 1.2 @@ -17,7 +17,8 @@ trap cleanup 0 1 2 3 4 5 6 7 8 9 11 13 14 15 for library in `find $RPM_BUILD_ROOT -type f -exec file \{\} \; | grep 'current ar archive' | sed 's,:.*,,g' ` ; do - pushd $tempdir > /dev/null +PUSHDIR=`pwd` + cd $tempdir > /dev/null if test -n "$RPM_BUILD_ROOT" ; then cleanedlibrary=`echo "$library" | sed s,"$RPM_BUILD_ROOT",,g` else @@ -30,5 +31,5 @@ ar r "$library" "$object" done rm -f *.o - popd > /dev/null + cd $PUSHDIR > /dev/null done @@ . patch -p0 <<'@@ .' Index: rpm/scripts/brp-java-repack-jars $ cvs diff -u -r1.1 -r1.2 brp-java-repack-jars --- rpm/scripts/brp-java-repack-jars 20 Jun 2007 16:56:47 - 1.1 +++ rpm/scripts/brp-java-repack-jars 9 Dec 2009 15:00:27 - 1.2 @@ -30,8 +30,9 @@ TMPDIR=`mktemp -d -p $RPM_BUILD_ROOT/tmp $JARNAME.tmpdir.XX` || exit 1 JARDIR=`mktemp -d -p $RPM_BUILD_ROOT/tmp $JARNAME.jardir.XX` || exit 1 TIMEREF=`mktemp -p $RPM_BUILD_ROOT/tmp $JARNAME.timeref.XX` || exit 1 - - pushd $TMPDIR > /dev/null + +PUSHDIR=`pwd` + cd $TMPDIR > /dev/null /usr/bin/unzip -qq -o $j rm -f $j @@ -66,13 +67,14 @@ cp $f $JARDIR/$f touch --date="$DATE" $JARDIR/$f done - popd > /dev/null + cd $PUSHDIR > /dev/null # Set the times of the directories. touch --date="$DATE" `find $JARDIR -type d` # make the jar - pushd $JARDIR > /dev/null +PUSHDIR=`pwd` + cd $JARDIR > /dev/null if [ -n "`find -type f`" ]; then find -type f -print | LC_ALL=C sort | /usr/bin/zip -q -X -9 $j -@ @@ -80,7 +82,7 @@ # Put the empty jar back touch $j fi - popd > /dev/null + cd $PUSHDIR > /dev/null # Cleanup. rm -rf $TMPDIR @@ . patch -p0 <<'@@ .' Index: rpm/scripts/java.prov.sh $ cvs diff -u -r1.2 -r1.3 java.prov.sh --- rpm/scripts/java.prov.sh 25 May 2007 18:34:16 - 1.2 +++ rpm/scripts/java.prov.sh 9 Dec 2009 15:00:27 - 1.3 @@ -42,9 +42,10 @@ ;; *.jar) if ! $JAR tf "$filename" | grep -q -e '(^..|^/|^\\)' ; then - pushd $classdir > /dev/null +PUSHDIR=`pwd` + cd $classdir > /dev/null $JAR xf "$filename" - popd > /dev/null + cd $PUSHDIR > /dev/null $JAR tf "$filename" | sed "s|^|$classdir/|g" | $0 "$@" rm -fr $classdir/* fi @@ . patch -p0 <<'@@ .' Index: rpm/scripts/java.req.sh $ cvs diff -u -r1.2 -r1.3 java.req.sh --- rpm/scripts/java.req.sh 25 May 2007 18:34:16 - 1.2 +++ rpm/scripts/java.req.sh 9 Dec 2009 15:00:27 - 1.3 @@ -53,9 +53,10 @@ ;; *.jar)