diff options
-rw-r--r-- | URPM.pm | 7 | ||||
-rw-r--r-- | URPM.xs | 34 | ||||
-rw-r--r-- | URPM/Query.pm | 2 |
3 files changed, 41 insertions, 2 deletions
@@ -441,6 +441,13 @@ Returns a string NAME-VERSION-RELEASE.ARCH in scalar context. Returns an array containing values of $tagid. $tagid is the numerical value of rpm tags. See rpmlib.h. +=item $package->queryformat($format) + +Querying the package like rpm --queryformat do. + +The function call directlly the rpmlib, then use headers informations, so it +silently failed if you use synthesis instead hdlist/rpms/headers files or rpmdb. + =item $package->get_tag_modifiers($tagid) Return an array of human readable view of tag values. $tagid is the numerical value of rpm tags. @@ -2305,6 +2305,18 @@ Pkg_changelog_text(pkg) SPAGAIN; void +Pkg_queryformat(pkg, fmt) + URPM::Package pkg; + char *fmt + PPCODE: + char *s; + if (pkg->h) { + s = headerSprintf(pkg->h, fmt, + rpmTagTable, rpmHeaderFormats, NULL); + XPUSHs(sv_2mortal(newSVpv(s,0))); + } + +void Pkg_get_tag(pkg, tagname) URPM::Package pkg int tagname; @@ -3185,13 +3197,33 @@ Urpm_list_rpm_tag(urpm=Nullsv) SV *urpm PREINIT: int i = 0; + const struct headerSprintfExtension_s * ext = rpmHeaderFormats; PPCODE: read_config_files(0); + + + for (i = 0; i < rpmTagTableSize; i++) { - XPUSHs(sv_2mortal(newSVpv(rpmTagTable[i].name, 0))); + XPUSHs(sv_2mortal(newSVpv(rpmTagTable[i].name + 7, 0))); XPUSHs(sv_2mortal(newSViv(rpmTagTable[i].val))); } + while (ext->name != NULL) { + if (ext->type == HEADER_EXT_MORE) { + ext = ext->u.more; + continue; + } + for (i = 0; i < rpmTagTableSize; i++) { + if (!strcmp(rpmTagTable[i].name, ext->name)) + break; + } + if (i >= rpmTagTableSize && ext->type == HEADER_EXT_TAG) { + XPUSHs(sv_2mortal(newSVpv(ext->name + 7, 0))); + XPUSHs(sv_newmortal()); + } + ext++; + } + int Urpm_ranges_overlap(a, b, b_nopromote=0) char *a diff --git a/URPM/Query.pm b/URPM/Query.pm index c249470..8900355 100644 --- a/URPM/Query.pm +++ b/URPM/Query.pm @@ -14,7 +14,7 @@ use strict; sub tag2id { my @l = @_; my %taglist = URPM::list_rpm_tag; - map { $taglist{uc("RPMTAG_$_")} || undef } @l; + map { $taglist{uc($_)} || undef } @l; } sub query_pkg { |