-
Notifications
You must be signed in to change notification settings - Fork 95
/
write_repo_susetags_file.pl
executable file
·75 lines (60 loc) · 1.9 KB
/
write_repo_susetags_file.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#! /usr/bin/perl -w
use strict;
use File::Basename;
BEGIN {
my ($wd) = $0 =~ m-(.*)/-;
$wd ||= '.';
unshift @INC, $wd;
}
require CreatePackageDescr;
die "Usage: $0 <output directory> <input directories...>" if scalar(@ARGV) < 2;
my $output_directory = shift @ARGV;
my @directories = @ARGV;
sub write_package {
my ($package, $packages_fd, $directory, $written_names, $sources) = @_;
my $name = basename($package);
if ($name =~ m/^[a-z0-9]{32}-/) { # repo cache
$name =~ s,^[^-]+-(.*)\.rpm,$1,;
} else {
$name =~ s,^(.*)-[^-]+-[^-]+.rpm,$1,;
}
if (defined $written_names->{$name}) {
return;
}
$written_names->{$name} = $directory;
my $out = CreatePackageDescr::package_snippet($package);
if ($out eq "" || $out =~ m/=Pkg: /) {
print STDERR "ERROR: empty package snippet for: $name\n";
exit(126);
}
if ($out =~ m/=Src: ([^ ]*)/) {
$sources->{$name} = $1;
}
print $packages_fd $out;
return $name;
}
open(my $packages_fd, ">", "$output_directory/packages") || die 'can not open';
print $packages_fd "=Ver: 2.0\n";
my %written_names;
my %sources;
for my $directory (@directories) {
my @rpms = glob("$directory/*.rpm");
write_package($_, $packages_fd, $directory, \%written_names, \%sources) for @rpms;
}
close($packages_fd);
# turn around key->value
my %per_directory;
for my $name (keys %written_names) {
$per_directory{$written_names{$name}} ||= [];
push(@{$per_directory{$written_names{$name}}}, $name);
}
open(my $yaml_fd, ">", "$output_directory/catalog.yml") || die 'can not open';
for my $directory (@directories) {
next unless defined($per_directory{$directory});
print $yaml_fd "$directory:\n";
for my $name (@{$per_directory{$directory}}) {
my $source = $sources{$name} || 'unknown';
print $yaml_fd " '$name': '$source'\n";
}
}
close($yaml_fd);