aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--URPM/Build.pm48
-rw-r--r--URPM/Query.pm191
2 files changed, 237 insertions, 2 deletions
diff --git a/URPM/Build.pm b/URPM/Build.pm
index 0282c8b..88e6d5b 100644
--- a/URPM/Build.pm
+++ b/URPM/Build.pm
@@ -65,13 +65,11 @@ sub parse_rpms_build_headers {
}
}
-
my $pkg = $urpm->{depslist}[$id];
$filename = $pkg->fullname;
"$filename.rpm" eq $pkg->filename or $filename .= ":$key";
- $options{silent} or print STDERR "$dir/$filename\n";
unless (-s "$dir/$filename") {
open F, ">$dir/$filename" or die "unable to open $dir/$filename for writing\n";
$pkg->build_header(fileno *F);
@@ -85,6 +83,11 @@ sub parse_rpms_build_headers {
} else {
$pkg->pack_header;
}
+
+ # Olivier Thauvin <thauvin@aerov.jussieu.fr>
+ # isn't this code better, but maybe it will break some tools:
+ # $options{callback}->($urpm, $id, %options, (file => $_)) if ($options{callback});
+ # $pkg->pack_header;
}
#- keep track of header associated (to avoid rereading rpm filename directly
@@ -127,6 +130,47 @@ sub parse_headers {
defined $id ? ($start, $id) : @{[]};
}
+# parse_rpms, to same bevaviour than parse_{hdlist, synthesis}
+# ie: ($start, $end) = parse_*(filestoparse, %options);
+
+sub parse_rpms {
+ my ($urpm, $rpms, %options) = @_;
+ my ($start, $end);
+ $urpm->parse_rpms_build_headers(
+ rpms => $rpms,
+ %options,
+ callback => sub {
+ my ($urpm, $id) = @_;
+ $start = $id if($start > $id || ! defined($start));
+ $end = $id if($end < $id || ! defined($end));
+ }
+ ) ? ($start, $end) : ();
+}
+
+# fuzzy_parse is a simple wrapper for parse_rpm* function
+# It detect if the file passed is a dir, an hdlist, a synthesis or a rpm
+# it call the good function.
+sub fuzzy_parse {
+ my ($urpm, %options) = @_;
+ my ($start, $end);
+ foreach my $entry (@{$options{paths} || []}) {
+ if (-d $entry) { # it is a dir
+ ($start, $end) = $urpm->parse_rpms([ glob("$entry/*.rpm") ], %options);
+ defined ($start) and return ($start .. $end);
+ } else { # we try some methode to load the file
+ ($start, $end) = $urpm->parse_hdlist($entry);
+ defined ($start) and return ($start .. $end);
+
+ ($start, $end) = $urpm->parse_synthesis($entry);
+ defined ($start) and return ($start .. $end);
+
+ ($start, $end) = $urpm->parse_rpms([ $entry ], %options);
+ defined ($start) and return ($start .. $end);
+ }
+ }
+ ()
+}
+
#- compute dependencies, result in stored in info values of urpm.
#- operations are incremental, it is possible to read just one hdlist, compute
#- dependencies and read another hdlist, and again.
diff --git a/URPM/Query.pm b/URPM/Query.pm
new file mode 100644
index 0000000..6e639c8
--- /dev/null
+++ b/URPM/Query.pm
@@ -0,0 +1,191 @@
+package URPM;
+
+use strict;
+
+# Olivier Thauvin <thauvin@aerov.jussieu.fr>
+# This package extend URPM functions to permit
+# URPM low level query on rpm header
+# $Id$
+
+# RPMTAG_ list from rpmlib.h
+
+my %taglist = (
+ NAME => 1000,
+ VERSION => 1001,
+ RELEASE => 1002,
+ EPOCH => 1003,
+ SUMMARY => 1004,
+ DESCRIPTION => 1005,
+ BUILDTIME => 1006,
+ BUILDHOST => 1007,
+ INSTALLTIME => 1008,
+ SIZE => 1009,
+ DISTRIBUTION => 1010,
+ VENDOR => 1011,
+ GIF => 1012,
+ XPM => 1013,
+ LICENSE => 1014,
+ PACKAGER => 1015,
+ GROUP => 1016,
+
+ CHANGELOG => 1017,
+
+ SOURCE => 1018,
+ PATCH => 1019,
+ URL => 1020,
+ OS => 1021,
+ ARCH => 1022,
+ PREIN => 1023,
+ POSTIN => 1024,
+ PREUN => 1025,
+ POSTUN => 1026,
+ OLDFILENAMES => 1027,
+ FILESIZES => 1028,
+ FILESTATES => 1029,
+ FILEMODES => 1030,
+ FILEUIDS => 1031,
+ FILEGIDS => 1032,
+ FILERDEVS => 1033,
+ FILEMTIMES => 1034,
+ FILEMD5S => 1035,
+ FILELINKTOS => 1036,
+ FILEFLAGS => 1037,
+
+ ROOT => 1038,
+
+ FILEUSERNAME => 1039,
+ FILEGROUPNAME => 1040,
+
+ EXCLUDE => 1041,
+ EXCLUSIVE => 1042,
+
+ ICON => 1043,
+ SOURCERPM => 1044,
+ FILEVERIFYFLAGS => 1045,
+ ARCHIVESIZE => 1046,
+ PROVIDENAME => 1047,
+ REQUIREFLAGS => 1048,
+ REQUIRENAME => 1049,
+ REQUIREVERSION => 1050,
+ NOSOURCE => 1051,
+ NOPATCH => 1052,
+ CONFLICTFLAGS => 1053,
+ CONFLICTNAME => 1054,
+ CONFLICTVERSION => 1055,
+ DEFAULTPREFIX => 1056,
+ BUILDROOT => 1057,
+ INSTALLPREFIX => 1058,
+ EXCLUDEARCH => 1059,
+ EXCLUDEOS => 1060,
+ EXCLUSIVEARCH => 1061,
+ EXCLUSIVEOS => 1062,
+ AUTOREQPROV => 1063,
+ RPMVERSION => 1064,
+ TRIGGERSCRIPTS => 1065,
+ TRIGGERNAME => 1066,
+ TRIGGERVERSION => 1067,
+ TRIGGERFLAGS => 1068,
+ TRIGGERINDEX => 1069,
+ VERIFYSCRIPT => 1079,
+ CHANGELOGTIME => 1080,
+ CHANGELOGNAME => 1081,
+ CHANGELOGTEXT => 1082,
+
+ BROKENMD5 => 1083,
+
+ PREREQ => 1084,
+ PREINPROG => 1085,
+ POSTINPROG => 1086,
+ PREUNPROG => 1087,
+ POSTUNPROG => 1088,
+ BUILDARCHS => 1089,
+ OBSOLETENAME => 1090,
+ VERIFYSCRIPTPROG => 1091,
+ TRIGGERSCRIPTPROG => 1092,
+ DOCDIR => 1093,
+ COOKIE => 1094,
+ FILEDEVICES => 1095,
+ FILEINODES => 1096,
+ FILELANGS => 1097,
+ PREFIXES => 1098,
+ INSTPREFIXES => 1099,
+ TRIGGERIN => 1100,
+ TRIGGERUN => 1101,
+ TRIGGERPOSTUN => 1102,
+ AUTOREQ => 1103,
+ AUTOPROV => 1104,
+
+ CAPABILITY => 1105,
+
+ SOURCEPACKAGE => 1106,
+
+ OLDORIGFILENAMES => 1107,
+
+ BUILDPREREQ => 1108,
+ BUILDREQUIRES => 1109,
+ BUILDCONFLICTS => 1110,
+
+ BUILDMACROS => 1111,
+
+ PROVIDEFLAGS => 1112,
+ PROVIDEVERSION => 1113,
+ OBSOLETEFLAGS => 1114,
+ OBSOLETEVERSION => 1115,
+ DIRINDEXES => 1116,
+ BASENAMES => 1117,
+ DIRNAMES => 1118,
+ ORIGDIRINDEXES => 1119,
+ ORIGBASENAMES => 1120,
+ ORIGDIRNAMES => 1121,
+ OPTFLAGS => 1122,
+ DISTURL => 1123,
+ PAYLOADFORMAT => 1124,
+ PAYLOADCOMPRESSOR => 1125,
+ PAYLOADFLAGS => 1126,
+ INSTALLCOLOR => 1127,
+ INSTALLTID => 1128,
+ REMOVETID => 1129,
+
+ SHA1RHN => 1130,
+
+ RHNPLATFORM => 1131,
+ PLATFORM => 1132,
+ PATCHESNAME => 1133,
+ PATCHESFLAGS => 1134,
+ PATCHESVERSION => 1135,
+ CACHECTIME => 1136,
+ CACHEPKGPATH => 1137,
+ CACHEPKGSIZE => 1138,
+ CACHEPKGMTIME => 1139,
+ FILECOLORS => 1140,
+ FILECLASS => 1141,
+ CLASSDICT => 1142,
+ FILEDEPENDSX => 1143,
+ FILEDEPENDSN => 1144,
+ DEPENDSDICT => 1145,
+ SOURCEPKGID => 1146,
+);
+
+# tag2id
+# INPUT array of rpm tag name
+# Return an array of ID tag
+
+sub tag2id {
+ map { $taglist{uc($_)} || undef } @_;
+}
+
+# id2tag
+# INPUT array of rpm id tag
+# Return an array of tag name
+
+sub id2tag {
+ my @id = @_;
+ my @ret;
+ foreach my $thisid (@id) {
+ my $res = grep { $taglist{$_} == $thisid } keys (%taglist);
+ push (@ret, $res ? $res : undef);
+ }
+ @ret
+}
+
+1;