[CVS] RPM: rpm/rpmdb/ rpmdb.c

2009-12-09 Thread Jeff Johnson
  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

2009-12-09 Thread Jeff Johnson
  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

2009-12-09 Thread Jeff Johnson
  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

2009-12-09 Thread Jeff Johnson
  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

2009-12-09 Thread Pinto Elia
  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 ...

2009-12-09 Thread Pinto Elia
  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)