aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/nix-channel.in76
-rw-r--r--scripts/nix-push.in12
2 files changed, 63 insertions, 25 deletions
diff --git a/scripts/nix-channel.in b/scripts/nix-channel.in
index 3c99f454c..d75ed6c81 100644
--- a/scripts/nix-channel.in
+++ b/scripts/nix-channel.in
@@ -48,6 +48,19 @@ sub addChannel {
}
+# Remove a channel from the file $channelsList;
+sub removeChannel {
+ my $url = shift;
+ my @left = ();
+ readChannels;
+ foreach my $url2 (@channels) {
+ push @left, $url2 if $url ne $url2;
+ }
+ @channels = @left;
+ writeChannels;
+}
+
+
# Fetch Nix expressions and pull cache manifests from the subscribed
# channels.
sub update {
@@ -76,7 +89,7 @@ sub update {
chomp $hash;
# !!! escaping
$nixExpr .= "((import @datadir@/nix/corepkgs/fetchurl) " .
- "{url = $fullURL; md5 = \"$hash\"; system = \"@system@\";}) "
+ "{url = $fullURL; sha1 = \"$hash\"; system = \"@system@\";}) "
}
$nixExpr .= "]";
@@ -85,33 +98,39 @@ sub update {
"(import @datadir@/nix/corepkgs/channels/unpack.nix) " .
"{inputs = $nixExpr; system = \"@system@\";}";
- # Instantiate the Nix expression.
- my $storeExpr = `echo '$nixExpr' | @bindir@/nix-instantiate -`
- or die "cannot instantiate Nix expression";
- chomp $storeExpr;
-
- # Register the store expression as a root of the garbage
- # collector.
+ # Figure out a name for the GC root.
my $userName = getpwuid($<);
die "who ARE you? go away" unless defined $userName;
- my $rootFile = "$rootsDir/$userName.gcroot";
- my $tmpRootFile = "$rootsDir/$userName-tmp.gcroot";
+ my $rootFile = "$rootsDir/$userName";
- open ROOT, ">$tmpRootFile" or die "cannot create `$tmpRootFile': $!";
- print ROOT "$storeExpr";
- close ROOT;
+ # Instantiate the Nix expression.
+ my $storeExpr = `echo '$nixExpr' | @bindir@/nix-instantiate --add-root '$rootFile'.tmp -`
+ or die "cannot instantiate Nix expression";
+ chomp $storeExpr;
- # Realise the store expression.
- my $outPath = `nix-store -qnf '$storeExpr'`
+ # Build the resulting derivation.
+ my $outPath = `nix-store --add-root '$rootFile' -r '$storeExpr'`
or die "cannot realise store expression";
chomp $outPath;
+ unlink "$rootFile.tmp";
+
# Make it the default Nix expression for `nix-env'.
system "@bindir@/nix-env --import '$outPath'";
die "cannot pull set default Nix expression to `$outPath'" if ($? != 0);
+}
- rename $tmpRootFile, $rootFile or die "cannot rename `$tmpRootFile' to `$rootFile': $!";
+
+sub usageError {
+ print STDERR <<EOF;
+Usage:
+ nix-channel --add URL
+ nix-channel --remove URL
+ nix-channel --list
+ nix-channel --update
+EOF
+ exit 1;
}
@@ -119,18 +138,37 @@ while (scalar @ARGV) {
my $arg = shift @ARGV;
if ($arg eq "--add") {
- die "syntax: nix-channel --add URL" if (scalar @ARGV != 1);
+ usageError if scalar @ARGV != 1;
addChannel (shift @ARGV);
last;
}
+ if ($arg eq "--remove") {
+ usageError if scalar @ARGV != 1;
+ removeChannel (shift @ARGV);
+ last;
+ }
+
+ if ($arg eq "--list") {
+ usageError if scalar @ARGV != 0;
+ readChannels;
+ foreach my $url (@channels) {
+ print "$url\n";
+ }
+ last;
+ }
+
elsif ($arg eq "--update") {
- die "syntax: nix-channel --update" if (scalar @ARGV != 0);
+ usageError if scalar @ARGV != 0;
update;
last;
}
+
+ elsif ($arg eq "--help") {
+ usageError;
+ }
else {
- die "unknown argument `$arg'";
+ die "unknown argument `$arg'; try `--help'";
}
}
diff --git a/scripts/nix-push.in b/scripts/nix-push.in
index 52f4a3012..dd1fd9922 100644
--- a/scripts/nix-push.in
+++ b/scripts/nix-push.in
@@ -154,17 +154,17 @@ for (my $n = 0; $n < scalar @storePaths; $n++) {
(-f $narfile) or die "narfile for $storePath not found";
push @nararchives, $narfile;
- open MD5, "$nardir/narbz2-hash" or die "cannot open narbz2-hash";
- my $narbz2Hash = <MD5>;
+ open SHA1, "$nardir/narbz2-hash" or die "cannot open narbz2-hash";
+ my $narbz2Hash = <SHA1>;
chomp $narbz2Hash;
$narbz2Hash =~ /^[0-9a-z]{32}$/ or die "invalid hash";
- close MD5;
+ close SHA1;
- open MD5, "$nardir/nar-hash" or die "cannot open nar-hash";
- my $narHash = <MD5>;
+ open SHA1, "$nardir/nar-hash" or die "cannot open nar-hash";
+ my $narHash = <SHA1>;
chomp $narHash;
$narHash =~ /^[0-9a-z]{32}$/ or die "invalid hash";
- close MD5;
+ close SHA1;
my $narbz2Size = (stat $narfile)[7];