forked from lix-project/lix
* In `nix-channel --update', skip manifests that assume a Nix store at
a different location than the user's. This makes channels usable as a source deployment mechanism for people who install Nix under non-standard prefixes. (NIX-57)
This commit is contained in:
parent
68ae953d8a
commit
d43565c3e8
|
@ -23,6 +23,7 @@ sub readChannels {
|
|||
open CHANNELS, "<$channelsList" or die "cannot open `$channelsList': $!";
|
||||
while (<CHANNELS>) {
|
||||
chomp;
|
||||
next if /^\s*\#/;
|
||||
push @channels, $_;
|
||||
}
|
||||
close CHANNELS;
|
||||
|
@ -81,7 +82,7 @@ sub update {
|
|||
# Pull cache manifests.
|
||||
foreach my $url (@channels) {
|
||||
print "pulling cache manifest from `$url'\n";
|
||||
system("@bindir@/nix-pull", "$url/MANIFEST") == 0
|
||||
system("@bindir@/nix-pull", "--skip-wrong-store", "$url/MANIFEST") == 0
|
||||
or die "cannot pull cache manifest from `$url'";
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue