[Rpm-maint] [PATCH 3/7] Add RPMTAG_NVRDA and RPMTAG_NEVRDA tag extension

Vladimir D. Seleznev vseleznv at altlinux.org
Tue Oct 23 05:48:20 UTC 2018


These extensions construct name-[epoch:]version-release[-disttag].arch
if RPMTAG_DISTTAG is non-empty, otherwise they work as RPMTAG_NVRA and
RPMTAG_NEVRA respectively.

Signed-off-by: Vladimir D. Seleznev <vseleznv at altlinux.org>
---
 lib/rpmtag.h  |  2 ++
 lib/tagexts.c | 19 ++++++++++++++++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/lib/rpmtag.h b/lib/rpmtag.h
index 973a6b69d..27e888a7d 100644
--- a/lib/rpmtag.h
+++ b/lib/rpmtag.h
@@ -372,6 +372,8 @@ typedef enum rpmTag_e {
     RPMTAG_PAYLOADDIGESTALGO	= 5093, /* i */
     RPMTAG_AUTOINSTALLED	= 5094, /* i reservation (unimplemented) */
     RPMTAG_IDENTITY		= 5095, /* s reservation (unimplemented) */
+    RPMTAG_NVRDA		= 5096, /* s extension */
+    RPMTAG_NEVRDA		= 5097, /* s extension */
 
     RPMTAG_FIRSTFREE_TAG	/*!< internal */
 } rpmTag;
diff --git a/lib/tagexts.c b/lib/tagexts.c
index f72ff60f1..d38103a79 100644
--- a/lib/tagexts.c
+++ b/lib/tagexts.c
@@ -745,7 +745,8 @@ enum nevraFlags_e {
     NEVRA_EPOCH		= (1 << 1),
     NEVRA_VERSION	= (1 << 2),
     NEVRA_RELEASE	= (1 << 3),
-    NEVRA_ARCH		= (1 << 4)
+    NEVRA_ARCH		= (1 << 4),
+    NEVRA_DISTTAG	= (1 << 5)
 };
 typedef rpmFlags nevraFlags;
 
@@ -771,6 +772,10 @@ static int getNEVRA(Header h, rpmtd td, nevraFlags flags)
 	val = headerGetString(h, RPMTAG_RELEASE);
 	if (val) rstrscat(&res, val, NULL);
     }
+    if ((flags & NEVRA_DISTTAG)) {
+	val = headerGetString(h, RPMTAG_DISTTAG);
+	if (val) rstrscat(&res, "-", val, NULL);
+    }
     if ((flags & NEVRA_ARCH)) {
 	val = headerGetString(h, RPMTAG_ARCH);
 	if (headerIsSource(h) && val == NULL) val = "src";
@@ -952,6 +957,16 @@ static int filenlinksTag(Header h, rpmtd td, headerGetFlags hgflags)
     return (fc > 0);
 }
 
+static int nvrdaTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+    return getNEVRA(h, td, NEVRA_NAME|NEVRA_VERSION|NEVRA_RELEASE|NEVRA_DISTTAG|NEVRA_ARCH);
+}
+
+static int nevrdaTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+    return getNEVRA(h, td, NEVRA_NAME|NEVRA_EPOCH|NEVRA_VERSION|NEVRA_RELEASE|NEVRA_DISTTAG|NEVRA_ARCH);
+}
+
 static const struct headerTagFunc_s rpmHeaderTagExtensions[] = {
     { RPMTAG_GROUP,		groupTag },
     { RPMTAG_DESCRIPTION,	descriptionTag },
@@ -990,6 +1005,8 @@ static const struct headerTagFunc_s rpmHeaderTagExtensions[] = {
     { RPMTAG_OBSOLETENEVRS,	obsoletenevrsTag },
     { RPMTAG_CONFLICTNEVRS,	conflictnevrsTag },
     { RPMTAG_FILENLINKS,	filenlinksTag },
+    { RPMTAG_NVRDA,		nvrdaTag },
+    { RPMTAG_NEVRDA,		nevrdaTag },
     { 0, 			NULL }
 };
 
-- 
2.17.2



More information about the Rpm-maint mailing list