diff options
-rw-r--r-- | URPM/Build.pm | 48 | ||||
-rw-r--r-- | URPM/Query.pm | 191 |
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; |