diff options
Diffstat (limited to 'scripts/nix-pull.in')
-rw-r--r-- | scripts/nix-pull.in | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/scripts/nix-pull.in b/scripts/nix-pull.in index 0af036f6f302..c7c20fb9b7cc 100644 --- a/scripts/nix-pull.in +++ b/scripts/nix-pull.in @@ -21,6 +21,9 @@ $libexecDir = "@libexecdir@" unless defined $libexecDir; my $stateDir = $ENV{"NIX_STATE_DIR"}; $stateDir = "@localstatedir@/nix" unless defined $stateDir; +my $storeDir = $ENV{"NIX_STORE_DIR"}; +$storeDir = "@storedir@" unless defined $storeDir; + # Prevent access problems in shared-stored installations. umask 0022; @@ -31,6 +34,8 @@ my %narFiles; my %patches; my %successors; +my $skipWrongStore = 0; + sub processURL { my $url = shift; @@ -45,6 +50,15 @@ sub processURL { die "manifest `$url' is too old (i.e., for Nix <= 0.7)\n"; } + if ($skipWrongStore) { + foreach my $path (keys %narFiles) { + if (substr($path, 0, length($storeDir) + 1) ne "$storeDir/") { + print STDERR "warning: manifest `$url' assumes a Nix store at a different location than $storeDir, skipping...\n"; + exit 0; + } + } + } + my $baseName = "unnamed"; if ($url =~ /\/([^\/]+)\/[^\/]+$/) { # get the forelast component $baseName = $1; @@ -62,7 +76,11 @@ sub processURL { while (@ARGV) { my $url = shift @ARGV; - processURL $url; + if ($url eq "--skip-wrong-store") { + $skipWrongStore = 1; + } else { + processURL $url; + } } |