diff options
Diffstat (limited to '')
-rw-r--r-- | tests/src/vfs/extfs/helpers-list/misc/rpm/rpm2tags.pl | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/src/vfs/extfs/helpers-list/misc/rpm/rpm2tags.pl b/tests/src/vfs/extfs/helpers-list/misc/rpm/rpm2tags.pl new file mode 100644 index 0000000..c776407 --- /dev/null +++ b/tests/src/vfs/extfs/helpers-list/misc/rpm/rpm2tags.pl @@ -0,0 +1,103 @@ +use strict; +use warnings; +use Data::Dumper; + +my $help = <<EOF; +WHAT +---- + +This script converts an RPM package into what we call a "tags file", +which is simply an associative array listing all the tags and their +values. + +WHY +--- + +For our rpm helper tests we need an RPM file. But we also want the tests +to be able to run on systems where the rpm binary isn't installed. The +solution: our tests work on "tags files" instead of real RPM files. + +HOW +--- + +Use it like this: + + \$ perl $0 /path/to/some/package.rpm > test.input + +You can run this script only on systems where 'rpm' is installed. + +WHEW +---- + +After all was done the author of this script discovered something not +mentioned in rpm's manpage: one can do "rpm -qp --xml pkg.rpm" to +serialize the metadata and get the same effect. But this would just move +the complexity to the test (in handling XML). +EOF + +# Tag variations we're interested in and wish to record as well. +my @formatted_tags = qw( + BUILDTIME:date + CHANGELOGTIME:date + + REQUIREFLAGS:depflags + PROVIDEFLAGS:depflags + OBSOLETEFLAGS:depflags + CONFLICTFLAGS:depflags +); + +# Big tags we want to omit to save space. +my %skip = map {$_ => 1} qw( + HEADERIMMUTABLE +); + +# Make 'rpm' print dates in the format our helper expects. +$ENV{'LC_TIME'} = 'C'; + +sub rpm2tags +{ + my ($rpm_pkg) = @_; + + my %tags = (); + + chomp(my @all_tags = `rpm --querytags`); + @all_tags = grep {!$skip{$_}} @all_tags; + + foreach my $tag (@all_tags, @formatted_tags) { + $tags{$tag} = `rpm -qp --qf "%{$tag}" "$rpm_pkg"`; + } + + # Add pseudo tags: + $tags{'_INFO'} = `rpm -qip "$rpm_pkg"`; + + return %tags; +} + +sub prolog +{ + my $cmdline = join(' ', 'perl', $0, @ARGV); + return <<EOF; +# -*- mode: perl -*- +# vim: filetype=perl +# +# This "tags file" was created by running the following command: +# +# \$ $cmdline +# +# This file is used in our tests instead of the corresponding RPM file. +# This lets us run the tests on systems where 'rpm' is not installed. +EOF +} + +sub main +{ + if (!$ARGV[0] || $ARGV[0] eq "--help" || $ARGV[0] eq "-h") { + print $help; + exit; + } + my %tags = rpm2tags($ARGV[0]); + $Data::Dumper::Terse = 1; + print(prolog(), "\n", '$tags = ', Dumper(\%tags), ";\n"); +} + +main(); |