path can be created by copying it from another location in the file system. This is useful in the NixOS installation.
		
			
				
	
	
		
			76 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
| #! /usr/bin/perl -w -I. -I..
 | |
| 
 | |
| use strict;
 | |
| use readmanifest;
 | |
| use readcache;
 | |
| 
 | |
| 
 | |
| my %allNarFiles;
 | |
| my %allLocalPaths;
 | |
| my %allPatches;
 | |
| 
 | |
| foreach my $manifest (glob "/data/webserver/dist/*/*/MANIFEST") {
 | |
|     print STDERR "loading $manifest\n";
 | |
|     readManifest($manifest, \%allNarFiles, \%allLocalPaths, \%allPatches, 1);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| foreach my $manifest (@ARGV) {
 | |
| 
 | |
|     print STDERR "shrinking manifest $manifest...\n";
 | |
| 
 | |
|     my %narFiles;
 | |
|     my %patches;
 | |
| 
 | |
|     if (readManifest($manifest, \%narFiles, \%patches, 1) < 3) {
 | |
|         print STDERR "manifest `$manifest' is too old (i.e., for Nix <= 0.7)\n";
 | |
| 	next;
 | |
|     }
 | |
| 
 | |
|     my %done;
 | |
| 
 | |
|     sub traverse {
 | |
| 	my $p = shift;
 | |
| 	my $prefix = shift;
 | |
| 	print "$prefix$p\n";
 | |
| 
 | |
| 	my $reachesNAR = 0;
 | |
| 
 | |
| 	foreach my $patch (@{$patches{$p}}) {
 | |
| 	    next if defined $done{$patch->{url}};
 | |
| 	    $done{$patch->{url}} = 1;
 | |
| 	    $reachesNAR = 1 if traverse ($patch->{basePath}, $prefix . "  ");
 | |
| 	}
 | |
| 
 | |
| 	$reachesNAR = 1 if defined $allNarFiles{$p};
 | |
| 
 | |
| 	print "  $prefix$reachesNAR\n";
 | |
| 	return $reachesNAR;
 | |
|     }
 | |
| 
 | |
| #    foreach my $p (keys %narFiles) {
 | |
| #	traverse ($p, "");
 | |
| #    }
 | |
| 
 | |
|     my %newPatches;
 | |
| 
 | |
|     foreach my $p (keys %patches) {
 | |
| 	my $patchList = $patches{$p};
 | |
| 	my @newList;
 | |
| 	foreach my $patch (@{$patchList}) {
 | |
| 	    if (! defined $allNarFiles{$patch->{basePath}} || 
 | |
| 		! defined $allNarFiles{$p} ) 
 | |
| 	    {
 | |
| #		print "REMOVING PATCH ", $patch->{basePath}, " -> ", $p, "\n";
 | |
| 	    } else {
 | |
| #		print "KEEPING PATCH ", $patch->{basePath}, " -> ", $p, "\n";
 | |
| 		push @newList, $patch;
 | |
| 	    }
 | |
| 	}
 | |
| 	$newPatches{$p} = \@newList;
 | |
|     }
 | |
| 
 | |
|     writeManifest ($manifest, \%narFiles, \%newPatches);
 | |
| }
 | |
| 
 |