From 06c5a7075d85636ba1fedce1fc5b131cdcffd5f8 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 5 Dec 2003 11:25:38 +0000 Subject: * Refactoring: put the manifest-reading code in a separate file. --- scripts/readmanifest.pm.in | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 scripts/readmanifest.pm.in (limited to 'scripts/readmanifest.pm.in') diff --git a/scripts/readmanifest.pm.in b/scripts/readmanifest.pm.in new file mode 100644 index 000000000000..e8819d8b81ea --- /dev/null +++ b/scripts/readmanifest.pm.in @@ -0,0 +1,72 @@ +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 "wget --cache=off '$url'/MANIFEST -O '$manifest' 2> /dev/null"; # !!! escape + if ($?) { die "`wget' failed"; } + + open MANIFEST, "<$manifest"; + + my $inside = 0; + + my $storepath; + my $narname; + my $hash; + my @preds; + + while () { + chomp; + s/\#.*$//g; + next if (/^$/); + + if (!$inside) { + if (/^\{$/) { + $inside = 1; + undef $storepath; + undef $narname; + undef $hash; + @preds = (); + } + else { die "bad line: $_"; } + } else { + if (/^\}$/) { + $inside = 0; + my $fullurl = "$url/$narname"; + + $$storepaths2urls{$storepath} = $fullurl; + $$urls2hashes{$fullurl} = $hash; + + foreach my $p (@preds) { + $$successors{$p} = $storepath; + } + + } + elsif (/^\s*StorePath:\s*(\/\S+)\s*$/) { + $storepath = $1; + } + elsif (/^\s*NarName:\s*(\S+)\s*$/) { + $narname = $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; -- cgit 1.4.1