* 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…
	
	Add table
		Add a link
		
	
		Reference in a new issue