about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2012-10-17T21·01-0400
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-10-17T21·01-0400
commitc8daeba30328c83328b632f8f45920d85d7d1968 (patch)
tree4503e73cfffa0b2c024413b2151647400c0e788e
parent167e36a5c3127da63d120d9fdaf5e046b829f287 (diff)
nix-push: Add ‘--link’ flag
If ‘--link’ is given, nix-push will create hard links to the NAR files
in the store, rather than copying them.  This is faster and requires
less disk space.  However, it doesn't work if the store is on a
different file system.
-rwxr-xr-xscripts/nix-push.in9
1 files changed, 8 insertions, 1 deletions
diff --git a/scripts/nix-push.in b/scripts/nix-push.in
index 4a88a3a17066..a08a9bca4715 100755
--- a/scripts/nix-push.in
+++ b/scripts/nix-push.in
@@ -23,6 +23,7 @@ my $force = 0;
 my $destDir;
 my $writeManifest = 0;
 my $archivesURL;
+my $link = 0;
 my @roots;
 
 for (my $n = 0; $n < scalar @ARGV; $n++) {
@@ -45,6 +46,8 @@ for (my $n = 0; $n < scalar @ARGV; $n++) {
         $n++;
         die "$0: `$arg' requires an argument\n" unless $n < scalar @ARGV;
         $archivesURL = $ARGV[$n];
+    } elsif ($arg eq "--link") {
+        $link = 1;
     } elsif (substr($arg, 0, 1) eq "-") {
         die "$0: unknown flag `$arg'\n";
     } else {
@@ -209,7 +212,11 @@ for (my $n = 0; $n < scalar @storePaths2; $n++) {
     my $dst = "$destDir/$narName";
     if (! -f $dst) {
         my $tmp = "$destDir/.tmp.$$.$narName";
-        copy($narFile, $tmp) or die "cannot copy $narFile to $tmp: $!\n";
+        if ($link) {
+            link($narFile, $tmp) or die "cannot link $tmp to $narFile: $!\n";
+        } else {
+            copy($narFile, $tmp) or die "cannot copy $narFile to $tmp: $!\n";
+        }
         rename($tmp, $dst) or die "cannot rename $tmp to $dst: $!\n";
     }