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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
#!/usr/bin/perl
# Add an item to the manifests, or update an existing item.
# Also cleans manifests of any items that do not exist any longer.
# May be run with no parameters to only clear old stuff.
my $file=shift;
my $desc=shift;
my @udeblists=@ARGV;
if (length $file && ! length $desc) {
print STDERR "warning: no manifest info for $file\n";
}
my $sep=" -- ";
my %manifest;
if (-e "dest/MANIFEST") {
open (IN, "dest/MANIFEST") || die $!;
while (<IN>) {
chomp;
my ($key, $value)=split(/\s*$sep/, $_, 2);
$manifest{$key}=$value;
}
close IN;
}
if (-e "dest/MANIFEST.udebs") {
my $file;
open (IN, "dest/MANIFEST.udebs") || die $!;
while (<IN>) {
chomp;
if (/^([\S]+)/) {
$file=$1;
}
elsif (defined $file) {
s/^\s+//;
push @{$manifest_udebs{$file}}, $_;
$seen{$_}=1;
}
}
}
if (length $file) {
$file=~s!(\./)?dest/!!;
$manifest{$file}=$desc;
delete $manifest_udebs{$file};
foreach my $udeblist (@udeblists) {
if (-e $udeblist) {
my %seen;
open (IN, "$udeblist") || die $!;
while (<IN>) {
chomp;
push @{$manifest_udebs{$file}}, $_ unless $seen{$_};
}
}
}
}
my $longest=0;
foreach my $item (keys %manifest, keys %manifest_udebs) {
if (! -e "dest/$item") {
delete $manifest{$item};
delete $manifest_udebs{$item};
next;
}
if (length $item > $longest) {
$longest=length $item;
}
}
if (! %manifest) {
unlink "dest/MANIFEST";
unlink "dest/MANIFEST.udebs";
exit;
}
open (OUT, ">dest/MANIFEST") || die "write dest/MANIFEST: $!";
foreach my $item (sort keys %manifest) {
print OUT $item.(" " x ($longest - length $item))."$sep$manifest{$item}\n";
}
close OUT;
open (OUT, ">dest/MANIFEST.udebs") || die "write dest/MANIFEST.udebs: $!";
foreach my $file (sort keys %manifest_udebs) {
print OUT "$file\n";
foreach my $i (@{$manifest_udebs{$file}}) {
print OUT "\t$i\n";
}
}
|