RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
______________________________________________________________________
______
Server: rpm5.org Name: Per Øyvind Karlsen
Root: /v/rpm/cvs Email: pkarl...@rpm5.org
Module: rpm Date: 22-Dec-2008
16:46:46
Branch: HEAD Handle: 2008122215464401
Modified files:
rpm CHANGES macros.in
rpm/build files.c pack.c parsePreamble.c
rpm/lib psm.c rpmds.c rpmte.c rpmte.h
transaction.c
rpm/python header-py.c
rpm/rpmdb hdrNVR.c rpmevr.c rpmevr.h rpmtag.h
Log:
add new DistEpoch tag
Summary:
Revision Changes Path
1.2700 +1 -0 rpm/CHANGES
1.349 +1 -0 rpm/build/files.c
2.304 +13 -4 rpm/build/pack.c
2.184 +4 -0 rpm/build/parsePreamble.c
2.342 +2 -0 rpm/lib/psm.c
2.115 +23 -6 rpm/lib/rpmds.c
2.89 +13 -0 rpm/lib/rpmte.c
2.56 +11 -0 rpm/lib/rpmte.h
1.392 +4 -1 rpm/lib/transaction.c
1.265 +6 -2 rpm/macros.in
1.100 +1 -0 rpm/python/header-py.c
1.46 +1 -0 rpm/rpmdb/hdrNVR.c
1.13 +19 -4 rpm/rpmdb/rpmevr.c
1.4 +2 -0 rpm/rpmdb/rpmevr.h
1.56 +2 -0 rpm/rpmdb/rpmtag.h
______________________________________________________________________
______
patch -p0 <<'@@ .'
Index: rpm/CHANGES
======================================================================
======
$ cvs diff -u -r1.2699 -r1.2700 CHANGES
--- rpm/CHANGES 21 Dec 2008 17:16:47 -0000 1.2699
+++ rpm/CHANGES 22 Dec 2008 15:46:45 -0000 1.2700
@@ -1,5 +1,6 @@
5.2a2 -> 5.2a3:
+ - proyvind: add new DistEpoch tag.
- jbj: merge "support-wildcards-in-EVR-comparison" patch
(OpenPKG).
- jbj: invert the sense of a <-> b comparison, change sign
of Mandriva override.
- jbj: bury MDV file triggers under RPM_VENDOR_MANDRIVA.
@@ .
patch -p0 <<'@@ .'
Index: rpm/build/files.c
======================================================================
======
$ cvs diff -u -r1.348 -r1.349 files.c
--- rpm/build/files.c 19 Dec 2008 02:51:10 -0000 1.348
+++ rpm/build/files.c 22 Dec 2008 15:46:44 -0000 1.349
@@ -2537,6 +2537,7 @@
case RPMTAG_NAME:
case RPMTAG_VERSION:
case RPMTAG_RELEASE:
+ case RPMTAG_DISTEPOCH:
case RPMTAG_EPOCH:
case RPMTAG_SUMMARY:
case RPMTAG_DESCRIPTION:
@@ .
patch -p0 <<'@@ .'
Index: rpm/build/pack.c
======================================================================
======
$ cvs diff -u -r2.303 -r2.304 pack.c
--- rpm/build/pack.c 15 Dec 2008 22:43:43 -0000 2.303
+++ rpm/build/pack.c 22 Dec 2008 15:46:44 -0000 2.304
@@ -449,9 +449,9 @@
void providePackageNVR(Header h)
{
HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
- const char *N, *V, *R;
+ const char *N, *V, *R, *D;
rpmuint32_t E;
- int gotE;
+ int gotE, gotD;
const char *pEVR;
char *p;
rpmuint32_t pFlags = RPMSENSE_EQUAL;
@@ -466,7 +466,12 @@
xx = headerNEVRA(h, &N, NULL, &V, &R, NULL);
if (!(N && V && R))
return;
- pEVR = p = alloca(21 + strlen(V) + 1 + strlen(R) + 1);
+
+ he->tag = RPMTAG_DISTEPOCH;
+ gotD = headerGet(h, he, 0);
+ D = (he->p.str ? he->p.str : NULL);
+
+ pEVR = p = alloca(21 + strlen(V) + 1 + strlen(R) + 1 +
(gotD ? strlen(D) + 1 : 0));
*p = '\0';
he->tag = RPMTAG_EPOCH;
gotE = headerGet(h, he, 0);
@@ -476,7 +481,11 @@
sprintf(p, "%d:", E);
p += strlen(p);
}
- (void) stpcpy( stpcpy( stpcpy(p, V) , "-") , R);
+ p = stpcpy( stpcpy( stpcpy(p, V) , "-") , R);
+ if (gotD) {
+ p = stpcpy( stpcpy( p, ":"), D);
+ D = _free(D);
+ }
V = _free(V);
R = _free(R);
@@ .
patch -p0 <<'@@ .'
Index: rpm/build/parsePreamble.c
======================================================================
======
$ cvs diff -u -r2.183 -r2.184 parsePreamble.c
--- rpm/build/parsePreamble.c 19 Dec 2008 01:13:19 -0000 2.183
+++ rpm/build/parsePreamble.c 22 Dec 2008 15:46:44 -0000 2.184
@@ -26,6 +26,7 @@
RPMTAG_EPOCH,
RPMTAG_VERSION,
RPMTAG_RELEASE,
+ RPMTAG_DISTEPOCH,
RPMTAG_LICENSE,
RPMTAG_GROUP, /* XXX permissive. */
RPMTAG_SUMMARY, /* XXX permissive. */
@@ -363,6 +364,7 @@
} optionalTags[] = {
{ RPMTAG_VENDOR, "%{vendor}" },
{ RPMTAG_PACKAGER, "%{packager}" },
+ { RPMTAG_DISTEPOCH, "%{distepoch}" },
{ RPMTAG_DISTRIBUTION, "%{distribution}" },
{ RPMTAG_DISTTAG, "%{disttag}" },
{ RPMTAG_DISTURL, "%{disturl}" },
@@ -609,6 +611,7 @@
case RPMTAG_NAME:
case RPMTAG_VERSION:
case RPMTAG_RELEASE:
+ case RPMTAG_DISTEPOCH:
case RPMTAG_URL:
case RPMTAG_DISTTAG:
case RPMTAG_REPOTAG:
@@ -881,6 +884,7 @@
{RPMTAG_NAME, 0, 0, "name"},
{RPMTAG_VERSION, 0, 0, "version"},
{RPMTAG_RELEASE, 0, 0, "release"},
+ {RPMTAG_DISTEPOCH, 0, 0, "distepoch"},
{RPMTAG_EPOCH, 0, 0, "epoch"},
{RPMTAG_EPOCH, 0, 1, "serial"},
{RPMTAG_SUMMARY, 1, 0, "summary"},
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/psm.c
======================================================================
======
$ cvs diff -u -r2.341 -r2.342 psm.c
--- rpm/lib/psm.c 15 Dec 2008 22:43:44 -0000 2.341
+++ rpm/lib/psm.c 22 Dec 2008 15:46:44 -0000 2.342
@@ -2018,6 +2018,8 @@
rpmteV(psm->te));
xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_RELEASE, RPMMIRE_STRCMP,
rpmteR(psm->te));
+ xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_DISTEPOCH,
RPMMIRE_STRCMP,
+ rpmteD(psm->te));
if (tscolor) {
xx = rpmdbSetIteratorRE(psm->mi,RPMTAG_ARCH, RPMMIRE_STRCMP,
rpmteA(psm->te));
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/rpmds.c
======================================================================
======
$ cvs diff -u -r2.114 -r2.115 rpmds.c
--- rpm/lib/rpmds.c 15 Dec 2008 22:43:44 -0000 2.114
+++ rpm/lib/rpmds.c 22 Dec 2008 15:46:44 -0000 2.115
@@ -524,7 +524,7 @@
HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
rpmds ds = NULL;
const char * Type;
- const char * Name, * V, * R;
+ const char * Name, * V, * R, * D;
rpmuint32_t E;
const char ** N, ** EVR;
char * t;
@@ -540,6 +540,9 @@
E = (he->p.ui32p ? he->p.ui32p[0] : 0);
he->p.ptr = _free(he->p.ptr);
+ he->tag = RPMTAG_DISTEPOCH;
+ xx = headerGet(h, he, 0);
+ D = (he->p.str ? he->p.str : NULL);
/*...@-mods@*/
xx = headerNEVRA(h, &Name, NULL, &V, &R, NULL);
/*...@=mods@*/
@@ -552,14 +555,17 @@
t = stpcpy(t, Name);
Name = _free(Name);
- t = xmalloc(sizeof(*EVR) + 20 + strlen(V) + strlen(R) +
sizeof("-"));
+ t = xmalloc(sizeof(*EVR) + 20 + strlen(V) + strlen(R) +
sizeof("-") + (D ? strlen(D) + sizeof(":") : 0));
EVR = (const char **) t;
t += sizeof(*EVR);
*t = '\0';
EVR[0] = t;
- sprintf(t, "%d:", E);
t += strlen(t);
t = stpcpy( stpcpy( stpcpy( t, V), "-"), R);
+ if (D != NULL) {
+ t = stpcpy( stpcpy( t, ":"), D);
+ D = _free(D);
+ }
V = _free(V);
R = _free(R);
@@ -3638,6 +3644,8 @@
/*...@i@*/ sense = EVRcmp(a->V, b->V);
if (sense == 0 && a->R && *a->R && b->R && *b->R)
/*...@i@*/ sense = EVRcmp(a->R, b->R);
+ if (sense == 0 && a->D && *a->D && b->D && *b->D)
+/*...@i@*/ sense = EVRcmp(a->D, b->D);
}
a->str = _free(a->str);
b->str = _free(b->str);
@@ -3762,9 +3770,9 @@
int rpmdsNVRMatchesDep(const Header h, const rpmds req, int
nopromote)
{
HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
- const char * pkgN, * V, * R;
+ const char * pkgN, * V, * R, * D;
rpmuint32_t E;
- int gotE = 0;
+ int gotE = 0, gotD = 0;
const char * pkgEVR;
char * t;
evrFlags reqFlags = req->ns.Flags;
@@ -3790,16 +3798,25 @@
E = (he->p.ui32p ? he->p.ui32p[0] : 0);
he->p.ptr = _free(he->p.ptr);
+ he->tag = RPMTAG_DISTEPOCH;
+ gotD = headerGet(h, he, 0);
+ D = (he->p.str ? he->p.str : NULL);
+
nb = 21 + 1 + 1;
if (V) nb += strlen(V);
if (R) nb += strlen(R);
+ if (D) nb += strlen(D) + 1;
pkgEVR = t = alloca(nb);
*t = '\0';
if (gotE) {
sprintf(t, "%d:", E);
t += strlen(t);
}
- (void) stpcpy( stpcpy( stpcpy(t, V) , "-") , R);
+ t = stpcpy( stpcpy( stpcpy(t, V) , "-") , R);
+ if (gotD) {
+ t = stpcpy( stpcpy( t, ":"), D);
+ D = _free(D);
+ }
V = _free(V);
R = _free(R);
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/rpmte.c
======================================================================
======
$ cvs diff -u -r2.88 -r2.89 rpmte.c
--- rpm/lib/rpmte.c 2 Aug 2008 00:38:04 -0000 2.88
+++ rpm/lib/rpmte.c 22 Dec 2008 15:46:44 -0000 2.89
@@ -57,6 +57,7 @@
p->name = _free(p->name);
p->version = _free(p->version);
p->release = _free(p->release);
+ p->distepoch = _free(p->distepoch);
p->NEVR = _free(p->NEVR);
p->NEVRA = _free(p->NEVRA);
p->pkgid = _free(p->pkgid);
@@ -164,6 +165,13 @@
} else
p->epoch = NULL;
+ he->tag = RPMTAG_DISTEPOCH;
+ xx = headerGet(h, he, 0);
+ if (he->p.str != NULL) {
+ p->distepoch = (char*)(xx ? he->p.str : xstrdup("?
RPMTAG_DISTEPOCH?"));
+ } else
+ p->distepoch = NULL;
+
p->installed = 0;
p->relocs = rpmfiDupeRelocations(relocs, &p->nrelocs);
@@ -288,6 +296,11 @@
return (te != NULL ? te->release : NULL);
}
+const char * rpmteD(rpmte te)
+{
+ return (te != NULL ? te->distepoch : NULL);
+}
+
const char * rpmteA(rpmte te)
{
return (te != NULL ? te->arch : NULL);
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/rpmte.h
======================================================================
======
$ cvs diff -u -r2.55 -r2.56 rpmte.h
--- rpm/lib/rpmte.h 8 Dec 2008 04:04:24 -0000 2.55
+++ rpm/lib/rpmte.h 22 Dec 2008 15:46:44 -0000 2.56
@@ -112,6 +112,8 @@
/*...@only@*/ /*...@null@*/
char * release; /*!< Release: */
/*...@only@*/ /*...@null@*/
+ char * distepoch;
+/*...@only@*/ /*...@null@*/
const char * arch; /*!< Architecture hint. */
/*...@only@*/ /*...@null@*/
const char * os; /*!< Operating system hint. */
@@ -284,6 +286,15 @@
/*...@*/;
/** \ingroup rpmte
+ * Retrieve distepoch string of transaction element.
+ * @param te transaction element
+ * @return distepoch string
+ */
+/*...@observer@*/ /*...@null@*/
+extern const char * rpmteD(rpmte te)
+ /*...@*/;
+
+/** \ingroup rpmte
* Retrieve arch string of transaction element.
* @param te transaction element
* @return arch string
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/transaction.c
======================================================================
======
$ cvs diff -u -r1.391 -r1.392 transaction.c
--- rpm/lib/transaction.c 20 Dec 2008 23:14:51 -0000 1.391
+++ rpm/lib/transaction.c 22 Dec 2008 15:46:44 -0000 1.392
@@ -619,7 +619,7 @@
if (p == NULL || h == NULL)
return 1;
- nb = strlen(rpmteNEVR(p)) + (rpmteE(p) != NULL ? strlen
(rpmteE(p)) : 0) + 1;
+ nb = strlen(rpmteNEVR(p)) + (rpmteE(p) != NULL ? strlen
(rpmteE(p)) : 0) + (rpmteD(p) != NULL ? strlen(rpmteD(p)) + 1 : 0)
+ 1;
t = alloca(nb);
*t = '\0';
reqEVR = t;
@@ -627,6 +627,7 @@
if (rpmteV(p) != NULL) t = stpcpy(t, rpmteV(p));
*t++ = '-';
if (rpmteR(p) != NULL) t = stpcpy(t, rpmteR(p));
+ if (rpmteD(p) != NULL) *t++ = ':', t = stpcpy(t, rpmteD(p));
req = rpmdsSingle(RPMTAG_REQUIRENAME, rpmteN(p), reqEVR,
reqFlags);
rc = rpmdsNVRMatchesDep(h, req, _rpmds_nopromote);
@@ -1277,6 +1278,8 @@
rpmteV(p));
xx = rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_STRCMP,
rpmteR(p));
+ xx = rpmdbSetIteratorRE(mi, RPMTAG_DISTEPOCH, RPMMIRE_STRCMP,
+ rpmteD(p));
if (tscolor) {
xx = rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_STRCMP,
rpmteA(p));
@@ .
patch -p0 <<'@@ .'
Index: rpm/macros.in
======================================================================
======
$ cvs diff -u -r1.264 -r1.265 macros.in
--- rpm/macros.in 18 Dec 2008 17:11:34 -0000 1.264
+++ rpm/macros.in 22 Dec 2008 15:46:45 -0000 1.265
@@ -1,7 +1,7 @@
#/*! \page config_macros Default configuration: @USRLIBRPM@/macros
# \verbatim
#
-# $Id: macros.in,v 1.264 2008/12/18 17:11:34 afb Exp $
+# $Id: macros.in,v 1.265 2008/12/22 15:46:45 pkarlsen Exp $
#
# This is a global RPM configuration file. All changes made here
will
# be lost when the rpm package is upgraded. Any per-system
configuration
@@ -857,7 +857,7 @@
# binary packages.
#
# XXX Note: escaped %% for use in headerSprintf()
-%_build_name_fmt %%{ARCH}/%{___NVRA}.rpm
+%_build_name_fmt %%{ARCH}/%{___NVRDA}.rpm
# The default transaction color. This value is a set of bits to
# determine file and dependency affinity for this arch.
@@ -1009,6 +1009,10 @@
# Default query format string for displaying package names
everywhere
%___NVRA %%{NAME}-%%{VERSION}-%%{RELEASE}%%|ARCH?{.%%|SOURCERPM?
{%%{ARCH}}:{src}|}:{}|
+# Format string including DistTag & DistEpoch if defined
+%___NVRDA %%{NAME}-%%{VERSION}-%%{RELEASE}%%|DISTTAG?{-%%
{DISTTAG}%%|DISTEPOCH?{%%{DISTEPOCH}}|}|%%|ARCH?{.%%|SOURCERPM?{%%
{ARCH}}:{src}|}:{}|
+
+
# Default headerSprintf() output format string for rpm -qa
#
# XXX Note: escaped %% for use in headerSprintf()
@@ .
patch -p0 <<'@@ .'
Index: rpm/python/header-py.c
======================================================================
======
$ cvs diff -u -r1.99 -r1.100 header-py.c
--- rpm/python/header-py.c 8 Dec 2008 01:46:36 -0000 1.99
+++ rpm/python/header-py.c 22 Dec 2008 15:46:45 -0000 1.100
@@ -405,6 +405,7 @@
case RPMTAG_NAME:
case RPMTAG_VERSION:
case RPMTAG_RELEASE:
+ case RPMTAG_DISTEPOCH:
case RPMTAG_ARCH:
case RPMTAG_OS:
Py_INCREF(Py_None);
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/hdrNVR.c
======================================================================
======
$ cvs diff -u -r1.45 -r1.46 hdrNVR.c
--- rpm/rpmdb/hdrNVR.c 1 Aug 2008 18:24:55 -0000 1.45
+++ rpm/rpmdb/hdrNVR.c 22 Dec 2008 15:46:45 -0000 1.46
@@ -25,6 +25,7 @@
{ "name", RPMTAG_NAME },
{ "version", RPMTAG_VERSION },
{ "release", RPMTAG_RELEASE },
+ { "distepoch", RPMTAG_DISTEPOCH },
{ "epoch", RPMTAG_EPOCH },
{ "arch", RPMTAG_ARCH },
{ "os", RPMTAG_OS },
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/rpmevr.c
======================================================================
======
$ cvs diff -u -r1.12 -r1.13 rpmevr.c
--- rpm/rpmdb/rpmevr.c 21 Dec 2008 17:16:48 -0000 1.12
+++ rpm/rpmdb/rpmevr.c 22 Dec 2008 15:46:45 -0000 1.13
@@ -110,15 +110,15 @@
/*...@modifies evrstr, evr @*/
{
char *s = xstrdup(evrstr);
- char *se;
+ char *se, *se2;
- evr->str = se = s;
+ evr->str = se2 = se = s;
while (*se && xisdigit((int)*se)) se++; /* se points to
epoch terminator */
if (*se == ':') {
evr->E = s;
*se++ = '\0';
- evr->V = se;
+ evr->V = se2 = se;
if (*evr->E == '\0') evr->E = "0";
evr->Elong = strtoul(evr->E, NULL, 10);
} else {
@@ -126,7 +126,14 @@
evr->V = s;
evr->Elong = 0;
}
- se = strrchr(se, '-'); /* se points to version terminator */
+ se = strrchr(se, ':'); /* se points to release terminator */
+ if (se) {
+ *se++ = '\0';
+ evr->D = se;
+ } else {
+ evr->D = NULL;
+ }
+ se = strrchr(se2, '-'); /* se points to version terminator */
if (se) {
*se++ = '\0';
evr->R = se;
@@ -255,6 +262,14 @@
two = he->p.str;
rc = rpmvercmp(one, two);
+ he->tag = RPMTAG_DISTEPOCH;
+ xx = headerGet(first, he, 0);
+ one = he->p.str;
+ he->tag = RPMTAG_DISTEPOCH;
+ xx = headerGet(second, he, 0);
+ two = he->p.str;
+ rc = rpmvercmp(one, two);
+
exit:
one = _free(one);
/*...@-usereleased@*/
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/rpmevr.h
======================================================================
======
$ cvs diff -u -r1.3 -r1.4 rpmevr.h
--- rpm/rpmdb/rpmevr.h 2 Aug 2008 16:36:10 -0000 1.3
+++ rpm/rpmdb/rpmevr.h 22 Dec 2008 15:46:45 -0000 1.4
@@ -88,6 +88,8 @@
const char * V; /*!< Version */
/*...@observer@*/ /*...@null@*/
const char * R; /*!< Release */
+/*...@observer@*/ /*...@null@*/
+ const char * D; /*!< DistEpoch */
evrFlags Flags; /*!< EVR comparison flags. */
};
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/rpmtag.h
======================================================================
======
$ cvs diff -u -r1.55 -r1.56 rpmtag.h
--- rpm/rpmdb/rpmtag.h 11 Dec 2008 23:31:57 -0000 1.55
+++ rpm/rpmdb/rpmtag.h 22 Dec 2008 15:46:45 -0000 1.56
@@ -421,6 +421,8 @@
RPMTAG_PACKAGEDIGEST = 1215, /* s */
RPMTAG_PACKAGESTAT = 1216, /* x */
RPMTAG_PACKAGEBASEURL = 1217, /* s */
+ RPMTAG_DISTEPOCH = 1218, /* s */
+#define RPMTAG_D RPMTAG_DISTEPOCH /* s */
/*...@-enummemuse@*/
RPMTAG_FIRSTFREE_TAG, /*!< internal */
@@ .
______________________________________________________________________
RPM Package Manager http://rpm5.org
CVS Sources Repository rpm-...@rpm5.org