forked from lix-project/lix
72 lines
1.5 KiB
Perl
72 lines
1.5 KiB
Perl
use strict;
|
|
|
|
sub processURL {
|
|
my $manifest = shift;
|
|
my $url = shift;
|
|
my $storepaths2urls = shift;
|
|
my $urls2hashes = shift;
|
|
my $successors = shift;
|
|
|
|
$url =~ s/\/$//;
|
|
print "obtaining list of Nix archives at $url...\n";
|
|
|
|
system("curl --fail --silent --show-error " .
|
|
"'$url/MANIFEST' > '$manifest' 2> /dev/null") == 0
|
|
or die "curl failed: $?";
|
|
|
|
open MANIFEST, "<$manifest";
|
|
|
|
my $inside = 0;
|
|
|
|
my $storepath;
|
|
my $narurl;
|
|
my $hash;
|
|
my @preds;
|
|
|
|
while (<MANIFEST>) {
|
|
chomp;
|
|
s/\#.*$//g;
|
|
next if (/^$/);
|
|
|
|
if (!$inside) {
|
|
if (/^\{$/) {
|
|
$inside = 1;
|
|
undef $storepath;
|
|
undef $narurl;
|
|
undef $hash;
|
|
@preds = ();
|
|
}
|
|
else { die "bad line: $_"; }
|
|
} else {
|
|
if (/^\}$/) {
|
|
$inside = 0;
|
|
|
|
$$storepaths2urls{$storepath} = $narurl;
|
|
$$urls2hashes{$narurl} = $hash;
|
|
|
|
foreach my $p (@preds) {
|
|
$$successors{$p} = $storepath;
|
|
}
|
|
|
|
}
|
|
elsif (/^\s*StorePath:\s*(\/\S+)\s*$/) {
|
|
$storepath = $1;
|
|
}
|
|
elsif (/^\s*NarURL:\s*(\S+)\s*$/) {
|
|
$narurl = $1;
|
|
}
|
|
elsif (/^\s*MD5:\s*(\S+)\s*$/) {
|
|
$hash = $1;
|
|
}
|
|
elsif (/^\s*SuccOf:\s*(\/\S+)\s*$/) {
|
|
push @preds, $1;
|
|
}
|
|
else { die "bad line: $_"; }
|
|
}
|
|
}
|
|
|
|
close MANIFEST;
|
|
}
|
|
|
|
|
|
return 1;
|