* 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