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