RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm-4_5: rpm/lib/ depends.c

From: Jeff Johnson <jbj@rpm5.org>
Date: Mon 30 Jul 2007 - 03:26:00 CEST
Message-Id: <20070730012600.C49FA348447@rpm5.org>
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  Module: rpm                              Date:   30-Jul-2007 03:26:00
  Branch: rpm-4_5                          Handle: 2007073002260000

  Modified files:           (Branch: rpm-4_5)
    rpm/lib                 depends.c

  Log:
    permit upgrades/obsoletes by pkg name.
    enable Depends to be turned off.

  Summary:
    Revision    Changes     Path
    1.327.2.5   +33 -3      rpm/lib/depends.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/lib/depends.c
  ============================================================================
  $ cvs diff -u -r1.327.2.4 -r1.327.2.5 depends.c
  --- rpm/lib/depends.c	9 Jun 2007 19:08:50 -0000	1.327.2.4
  +++ rpm/lib/depends.c	30 Jul 2007 01:26:00 -0000	1.327.2.5
  @@ -11,7 +11,11 @@
   #include <envvar.h>
   #include <ugid.h>		/* XXX user()/group() probes */
   
  +/* XXX CACHE_DEPENDENCY_RESULT deprecated, functionality being reimplemented */
  +#define CACHE_DEPENDENCY_RESULT	1
  +#if defined(CACHE_DEPNDENCY_RESULT) 
   #define	_RPMDB_INTERNAL		/* XXX response cache needs dbiOpen et al. */
  +#endif
   #include "rpmdb.h"
   
   #define	_RPMEVR_INTERNAL
  @@ -47,7 +51,9 @@
   };
   
   /*@unchecked@*/
  -int _cacheDependsRC = 1;
  +#if defined(CACHE_DEPNDENCY_RESULT) 
  +int _cacheDependsRC = CACHE_DEPENDENCY_RESULT;
  +#endif
   
   /*@observer@*/ /*@unchecked@*/
   const char *rpmNAME = PACKAGE;
  @@ -174,6 +180,9 @@
       return rc;
   }
   
  +static rpmTag _upgrade_tag;
  +static rpmTag _obsolete_tag;
  +
   int rpmtsAddInstallElement(rpmts ts, Header h,
   			fnpyKey key, int upgrade, rpmRelocation relocs)
   {
  @@ -391,9 +400,14 @@
       }
   
       /* On upgrade, erase older packages of same color (if any). */
  +    if (_upgrade_tag == 0) {
  +	const char *t = rpmExpand("%{?_upgrade_tag}", NULL);
  +	_upgrade_tag = (!strcmp(t, "name") ? RPMTAG_NAME : RPMTAG_PROVIDENAME);
  +	t = _free(t);
  +    }
   
     if (!(depFlags & RPMDEPS_FLAG_NOUPGRADE)) {
  -    mi = rpmtsInitIterator(ts, RPMTAG_PROVIDENAME, rpmteN(p), 0);
  +    mi = rpmtsInitIterator(ts, _upgrade_tag, rpmteN(p), 0);
       while((oh = rpmdbNextIterator(mi)) != NULL) {
   	int lastx;
   	rpmte q;
  @@ -424,6 +438,12 @@
       mi = rpmdbFreeIterator(mi);
     }
   
  +    if (_obsolete_tag == 0) {
  +	const char *t = rpmExpand("%{?_obsolete_tag}", NULL);
  +	_obsolete_tag = (!strcmp(t, "name") ? RPMTAG_NAME : RPMTAG_PROVIDENAME);
  +	t = _free(t);
  +    }
  +
     if (!(depFlags & RPMDEPS_FLAG_NOOBSOLETES)) {
       obsoletes = rpmdsLink(rpmteDS(p, RPMTAG_OBSOLETENAME), "Obsoletes");
       obsoletes = rpmdsInit(obsoletes);
  @@ -452,7 +472,7 @@
   	if (Name[0] == '/')
   	    mi = rpmtsInitIterator(ts, RPMTAG_BASENAMES, Name, 0);
   	else
  -	    mi = rpmtsInitIterator(ts, RPMTAG_PROVIDENAME, Name, 0);
  +	    mi = rpmtsInitIterator(ts, _obsolete_tag, Name, 0);
   
   	xx = rpmdbPruneIterator(mi,
   	    ts->removedPackages, ts->numRemovedPackages, 1);
  @@ -534,7 +554,9 @@
       const char * Name;
       int_32 Flags;
       Header h;
  +#if defined(CACHE_DEPNDENCY_RESULT) 
       int _cacheThisRC = 1;
  +#endif
       int rc;
       int xx;
       int retries = 10;
  @@ -547,6 +569,7 @@
       /*
        * Check if dbiOpen/dbiPut failed (e.g. permissions), we can't cache.
        */
  +#if defined(CACHE_DEPNDENCY_RESULT) 
       if (_cacheDependsRC) {
   	dbiIndex dbi;
   	dbi = dbiOpen(rpmtsGetRdb(ts), RPMDBI_DEPENDS, 0);
  @@ -593,6 +616,7 @@
   	    }
   	}
       }
  +#endif
   
   retry:
       rc = 0;	/* assume dependency is satisfied */
  @@ -958,12 +982,14 @@
   
       /* Search added packages for the dependency. */
       if (rpmalSatisfiesDepend(ts->addedPackages, dep, NULL) != NULL) {
  +#if defined(CACHE_DEPNDENCY_RESULT) 
   	/*
   	 * XXX Ick, context sensitive answers from dependency cache.
   	 * XXX Always resolve added dependencies within context to disambiguate.
   	 */
   	if (_rpmds_nopromote)
   	    _cacheThisRC = 0;
  +#endif
   	goto exit;
       }
   
  @@ -1030,6 +1056,7 @@
       /*
        * If dbiOpen/dbiPut fails (e.g. permissions), we can't cache.
        */
  +#if defined(CACHE_DEPNDENCY_RESULT) 
       if (_cacheDependsRC && _cacheThisRC) {
   	dbiIndex dbi;
   	dbi = dbiOpen(rpmtsGetRdb(ts), RPMDBI_DEPENDS, 0);
  @@ -1062,6 +1089,7 @@
   		_cacheDependsRC = 0;
   	}
       }
  +#endif
   
       return rpmdsNegateRC(dep, rc);
   }
  @@ -2453,8 +2481,10 @@
       /*@-branchstate@*/
       if (closeatexit)
   	xx = rpmtsCloseDB(ts);
  +#if defined(CACHE_DEPNDENCY_RESULT) 
       else if (_cacheDependsRC)
   	xx = rpmdbCloseDBI(rpmtsGetRdb(ts), RPMDBI_DEPENDS);
  +#endif
       /*@=branchstate@*/
   
   #ifdef	NOTYET
  @@ .
Received on Mon Jul 30 03:26:00 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.