* A small utility to add the Size and NarHash fields to old manifests.
This commit is contained in:
parent
4bf58d5379
commit
9022cf9adf
1 changed files with 53 additions and 0 deletions
53
scripts/update-manifest.pl
Executable file
53
scripts/update-manifest.pl
Executable file
|
@ -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 = <HASH>;
|
||||||
|
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;
|
Loading…
Reference in a new issue