53 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
| #! /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;
 |