* Use a proper temporary directory.
This commit is contained in:
		
							parent
							
								
									896c0b92f3
								
							
						
					
					
						commit
						7f384d9c1b
					
				
					 1 changed files with 19 additions and 7 deletions
				
			
		| 
						 | 
					@ -2,6 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
use readmanifest;
 | 
					use readmanifest;
 | 
				
			||||||
 | 
					use POSIX qw(tmpnam);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
my $manifestDir = "@localstatedir@/nix/manifests";
 | 
					my $manifestDir = "@localstatedir@/nix/manifests";
 | 
				
			||||||
my $logFile = "@localstatedir@/log/nix/downloads";
 | 
					my $logFile = "@localstatedir@/log/nix/downloads";
 | 
				
			||||||
| 
						 | 
					@ -9,6 +10,17 @@ my $logFile = "@localstatedir@/log/nix/downloads";
 | 
				
			||||||
open LOGFILE, ">>$logFile" or die "cannot open log file $logFile";
 | 
					open LOGFILE, ">>$logFile" or die "cannot open log file $logFile";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create a temporary directory.
 | 
				
			||||||
 | 
					my $tmpDir;
 | 
				
			||||||
 | 
					do { $tmpDir = tmpnam(); }
 | 
				
			||||||
 | 
					until mkdir $tmpDir, 0700;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					my $tmpNar = "$tmpDir/nar";
 | 
				
			||||||
 | 
					my $tmpNar2 = "$tmpDir/nar2";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END { unlink $tmpNar; unlink $tmpNar2; rmdir $tmpDir; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Check the arguments.
 | 
					# Check the arguments.
 | 
				
			||||||
die unless scalar @ARGV == 1;
 | 
					die unless scalar @ARGV == 1;
 | 
				
			||||||
my $targetPath = $ARGV[0];
 | 
					my $targetPath = $ARGV[0];
 | 
				
			||||||
| 
						 | 
					@ -217,7 +229,7 @@ while (scalar @path > 0) {
 | 
				
			||||||
            # as a base to one or more patches.  So turn the base path
 | 
					            # as a base to one or more patches.  So turn the base path
 | 
				
			||||||
            # into a NAR archive, to which we can apply the patch.
 | 
					            # into a NAR archive, to which we can apply the patch.
 | 
				
			||||||
            print "  packing base path...\n";
 | 
					            print "  packing base path...\n";
 | 
				
			||||||
            system "@bindir@/nix-store --dump $v > /tmp/nar";
 | 
					            system "@bindir@/nix-store --dump $v > $tmpNar";
 | 
				
			||||||
            die "cannot dump `$v'" if ($? != 0);
 | 
					            die "cannot dump `$v'" if ($? != 0);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -235,18 +247,18 @@ while (scalar @path > 0) {
 | 
				
			||||||
        # Apply the patch to the NAR archive produced in step 1 (for
 | 
					        # Apply the patch to the NAR archive produced in step 1 (for
 | 
				
			||||||
        # the already present path) or a later step (for patch sequences).
 | 
					        # the already present path) or a later step (for patch sequences).
 | 
				
			||||||
        print "  applying patch...\n";
 | 
					        print "  applying patch...\n";
 | 
				
			||||||
        system "@libexecdir@/bspatch /tmp/nar /tmp/nar2 $patchPath";
 | 
					        system "@libexecdir@/bspatch $tmpNar $tmpNar2 $patchPath";
 | 
				
			||||||
        die "cannot apply patch `$patchPath' to /tmp/nar" if ($? != 0);
 | 
					        die "cannot apply patch `$patchPath' to $tmpNar" if ($? != 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($curStep < $maxStep) {
 | 
					        if ($curStep < $maxStep) {
 | 
				
			||||||
            # The archive will be used as the base of the next patch.
 | 
					            # The archive will be used as the base of the next patch.
 | 
				
			||||||
            rename "/tmp/nar2", "/tmp/nar" or die "cannot rename NAR archive: $!";
 | 
					            rename "$tmpNar2", "$tmpNar" or die "cannot rename NAR archive: $!";
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            # This was the last patch.  Unpack the final NAR archive
 | 
					            # This was the last patch.  Unpack the final NAR archive
 | 
				
			||||||
            # into the target path.
 | 
					            # into the target path.
 | 
				
			||||||
            print "  unpacking patched archive...\n";
 | 
					            print "  unpacking patched archive...\n";
 | 
				
			||||||
            system "@bindir@/nix-store --restore $v < /tmp/nar2";
 | 
					            system "@bindir@/nix-store --restore $v < $tmpNar2";
 | 
				
			||||||
            die "cannot unpack /tmp/nar2 into `$v'" if ($? != 0);
 | 
					            die "cannot unpack $tmpNar2 into `$v'" if ($? != 0);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -262,7 +274,7 @@ while (scalar @path > 0) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($curStep < $maxStep) {
 | 
					        if ($curStep < $maxStep) {
 | 
				
			||||||
            # The archive will be used a base to a patch.
 | 
					            # The archive will be used a base to a patch.
 | 
				
			||||||
            system "@bunzip2@ < '$narFilePath' > /tmp/nar";
 | 
					            system "@bunzip2@ < '$narFilePath' > $tmpNar";
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            # Unpack the archive into the target path.
 | 
					            # Unpack the archive into the target path.
 | 
				
			||||||
            print "  unpacking archive...\n";
 | 
					            print "  unpacking archive...\n";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue