From 9022cf9adfd3504e40d52fa2891663bf33fa2f9d Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 28 Dec 2004 21:12:00 +0000 Subject: [PATCH] * A small utility to add the Size and NarHash fields to old manifests. --- scripts/update-manifest.pl | 53 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 scripts/update-manifest.pl diff --git a/scripts/update-manifest.pl b/scripts/update-manifest.pl new file mode 100755 index 0000000000..bd76f37ad6 --- /dev/null +++ b/scripts/update-manifest.pl @@ -0,0 +1,53 @@ +#! /usr/bin/perl -w -I. + +use strict; +use readmanifest; + +die unless scalar @ARGV == 2; + +my $cache = $ARGV[0]; +my $manifest = $ARGV[1]; +my %narFiles; +my %patches; +my %successors; + +readManifest $manifest, \%narFiles, \%patches, \%successors; + +foreach my $storePath (keys %narFiles) { + my $narFileList = $narFiles{$storePath}; + + foreach my $narFile (@{$narFileList}) { + if (!defined $narFile->{size} or + !defined $narFile->{narHash}) + { + $narFile->{url} =~ /\/([^\/]+)$/; + die unless defined $1; + my $fn = "$cache/$1"; + + my @info = stat $fn or die; + $narFile->{size} = $info[7]; + + my $narHash; + my $hashFile = "$fn.NARHASH"; + if (-e $hashFile) { + open HASH, "<$hashFile" or die; + $narHash = ; + close HASH; + } else { + print "$fn\n"; + $narHash = `bunzip2 < '$fn' | nix-hash --flat /dev/stdin` or die; + open HASH, ">$hashFile" or die; + print HASH $narHash; + close HASH; + } + chomp $narHash; + $narFile->{narHash} = $narHash; + } + } +} + +if (! -e "$manifest.backup") { + system "mv --reply=no '$manifest' '$manifest.backup'"; +} + +writeManifest $manifest, \%narFiles, \%patches, \%successors;