aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac3
-rw-r--r--corepkgs/Makefile.am8
-rw-r--r--corepkgs/channels/Makefile.am11
-rw-r--r--corepkgs/channels/unpack.nix7
-rw-r--r--corepkgs/channels/unpack.sh.in35
-rw-r--r--corepkgs/unpack-channel.nix11
-rw-r--r--corepkgs/unpack-channel.sh30
-rw-r--r--perl/lib/Nix/Config.pm.in1
-rwxr-xr-xscripts/nix-channel.in22
-rw-r--r--tests/Makefile.am3
-rw-r--r--tests/config.nix.in3
-rw-r--r--tests/dependencies.nix1
-rw-r--r--tests/nix-channel.sh43
13 files changed, 103 insertions, 75 deletions
diff --git a/configure.ac b/configure.ac
index 0443fe492..52c92b76b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -346,9 +346,6 @@ AC_CONFIG_FILES([Makefile
perl/Makefile
scripts/Makefile
corepkgs/Makefile
- corepkgs/nar/Makefile
- corepkgs/buildenv/Makefile
- corepkgs/channels/Makefile
doc/Makefile
doc/manual/Makefile
misc/Makefile
diff --git a/corepkgs/Makefile.am b/corepkgs/Makefile.am
index 7f43a700e..86d7027ed 100644
--- a/corepkgs/Makefile.am
+++ b/corepkgs/Makefile.am
@@ -1,11 +1,11 @@
-SUBDIRS = channels
-
all-local: config.nix
+files = nar.nix buildenv.nix buildenv.pl unpack-channel.nix unpack-channel.sh
+
install-exec-local:
$(INSTALL) -d $(DESTDIR)$(datadir)/nix/corepkgs
- $(INSTALL_DATA) config.nix $(srcdir)/nar.nix $(srcdir)/buildenv.nix $(srcdir)/buildenv.pl $(DESTDIR)$(datadir)/nix/corepkgs
+ $(INSTALL_DATA) config.nix $(files) $(DESTDIR)$(datadir)/nix/corepkgs
include ../substitute.mk
-EXTRA_DIST = config.nix.in nar.nix buildenv.nix buildenv.pl
+EXTRA_DIST = config.nix.in $(files)
diff --git a/corepkgs/channels/Makefile.am b/corepkgs/channels/Makefile.am
deleted file mode 100644
index d4d478f0e..000000000
--- a/corepkgs/channels/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-all-local: unpack.sh
-
-install-exec-local:
- $(INSTALL) -d $(DESTDIR)$(datadir)/nix/corepkgs
- $(INSTALL) -d $(DESTDIR)$(datadir)/nix/corepkgs/channels
- $(INSTALL_DATA) $(srcdir)/unpack.nix $(DESTDIR)$(datadir)/nix/corepkgs/channels
- $(INSTALL_PROGRAM) unpack.sh $(DESTDIR)$(datadir)/nix/corepkgs/channels
-
-include ../../substitute.mk
-
-EXTRA_DIST = unpack.nix unpack.sh.in
diff --git a/corepkgs/channels/unpack.nix b/corepkgs/channels/unpack.nix
deleted file mode 100644
index 80ca4a371..000000000
--- a/corepkgs/channels/unpack.nix
+++ /dev/null
@@ -1,7 +0,0 @@
-{system, inputs}:
-
-derivation {
- name = "channels";
- builder = ./unpack.sh;
- inherit system inputs;
-} \ No newline at end of file
diff --git a/corepkgs/channels/unpack.sh.in b/corepkgs/channels/unpack.sh.in
deleted file mode 100644
index 6e5939f4f..000000000
--- a/corepkgs/channels/unpack.sh.in
+++ /dev/null
@@ -1,35 +0,0 @@
-#! @shell@ -e
-
-# Cygwin compatibility hack: bunzip2 expects cygwin.dll in $PATH.
-export PATH=@coreutils@
-
-@coreutils@/mkdir $out
-@coreutils@/mkdir $out/tmp
-cd $out/tmp
-
-inputs=($inputs)
-for ((n = 0; n < ${#inputs[*]}; n += 2)); do
- channelName=${inputs[n]}
- channelTarball=${inputs[n+1]}
-
- echo "unpacking channel $channelName"
-
- @bzip2@ -d < $channelTarball | @tar@ xf -
-
- if test -e */channel-name; then
- channelName="$(@coreutils@/cat */channel-name)"
- fi
-
- nr=1
- attrName=$(echo $channelName | @tr@ -- '- ' '__')
- dirName=$attrName
- while test -e ../$dirName; do
- nr=$((nr+1))
- dirName=$attrName-$nr
- done
-
- @coreutils@/mv * ../$dirName # !!! hacky
-done
-
-cd ..
-@coreutils@/rmdir tmp
diff --git a/corepkgs/unpack-channel.nix b/corepkgs/unpack-channel.nix
new file mode 100644
index 000000000..5e6ccf23f
--- /dev/null
+++ b/corepkgs/unpack-channel.nix
@@ -0,0 +1,11 @@
+with import <nix/config.nix>;
+
+{ system, inputs }:
+
+derivation {
+ name = "channels";
+ builder = shell;
+ args = [ "-e" ./unpack-channel.sh ];
+ inherit system inputs bzip2 tar tr;
+ PATH = "${nixBinDir}:${coreutils}";
+}
diff --git a/corepkgs/unpack-channel.sh b/corepkgs/unpack-channel.sh
new file mode 100644
index 000000000..7c244a6a8
--- /dev/null
+++ b/corepkgs/unpack-channel.sh
@@ -0,0 +1,30 @@
+mkdir $out
+mkdir $out/tmp
+cd $out/tmp
+
+inputs=($inputs)
+for ((n = 0; n < ${#inputs[*]}; n += 2)); do
+ channelName=${inputs[n]}
+ channelTarball=${inputs[n+1]}
+
+ echo "unpacking channel $channelName"
+
+ $bzip2 -d < $channelTarball | $tar xf -
+
+ if test -e */channel-name; then
+ channelName="$(cat */channel-name)"
+ fi
+
+ nr=1
+ attrName=$(echo $channelName | $tr -- '- ' '__')
+ dirName=$attrName
+ while test -e ../$dirName; do
+ nr=$((nr+1))
+ dirName=$attrName-$nr
+ done
+
+ mv * ../$dirName # !!! hacky
+done
+
+cd ..
+rmdir tmp
diff --git a/perl/lib/Nix/Config.pm.in b/perl/lib/Nix/Config.pm.in
index b657683be..c88854daf 100644
--- a/perl/lib/Nix/Config.pm.in
+++ b/perl/lib/Nix/Config.pm.in
@@ -2,6 +2,7 @@ package Nix::Config;
$binDir = $ENV{"NIX_BIN_DIR"} || "@bindir@";
$libexecDir = $ENV{"NIX_LIBEXEC_DIR"} || "@libexecdir@";
+$stateDir = $ENV{"NIX_STATE_DIR"} || "@localstatedir@/nix";
$manifestDir = $ENV{"NIX_MANIFESTS_DIR"} || "@localstatedir@/nix/manifests";
$logDir = $ENV{"NIX_LOG_DIR"} || "@localstatedir@/log/nix";
$confDir = $ENV{"NIX_CONF_DIR"} || "@sysconfdir@/nix";
diff --git a/scripts/nix-channel.in b/scripts/nix-channel.in
index 3688063cb..9bfa04722 100755
--- a/scripts/nix-channel.in
+++ b/scripts/nix-channel.in
@@ -1,15 +1,13 @@
#! @perl@ -w
use strict;
+use Nix::Config;
-my $rootsDir = "@localstatedir@/nix/gcroots";
-
-my $stateDir = $ENV{"NIX_STATE_DIR"};
-$stateDir = "@localstatedir@/nix" unless defined $stateDir;
+my $manifestDir = $Nix::Config::manifestDir;
# Turn on caching in nix-prefetch-url.
-my $channelCache = "$stateDir/channel-cache";
+my $channelCache = "$Nix::Config::stateDir/channel-cache";
mkdir $channelCache, 0755 unless -e $channelCache;
$ENV{'NIX_DOWNLOAD_CACHE'} = $channelCache if -W $channelCache;
@@ -79,19 +77,19 @@ sub update {
readChannels;
# Create the manifests directory if it doesn't exist.
- mkdir "$stateDir/manifests", 0755 unless -e "$stateDir/manifests";
+ mkdir $manifestDir, 0755 unless -e $manifestDir;
# Do we have write permission to the manifests directory? If not,
# then just skip pulling the manifest and just download the Nix
# expressions. If the user is a non-privileged user in a
# multi-user Nix installation, he at least gets installation from
# source.
- if (-W "$stateDir/manifests") {
+ if (-W $manifestDir) {
# Pull cache manifests.
foreach my $url (@channels) {
#print "pulling cache manifest from `$url'\n";
- system("@bindir@/nix-pull", "--skip-wrong-store", "$url/MANIFEST") == 0
+ system("$Nix::Config::binDir/nix-pull", "--skip-wrong-store", "$url/MANIFEST") == 0
or die "cannot pull cache manifest from `$url'";
}
@@ -110,7 +108,7 @@ sub update {
print "downloading Nix expressions from `$fullURL'...\n";
$ENV{"PRINT_PATH"} = 1;
$ENV{"QUIET"} = 1;
- my ($hash, $path) = `@bindir@/nix-prefetch-url '$fullURL'`;
+ my ($hash, $path) = `$Nix::Config::binDir/nix-prefetch-url '$fullURL'`;
die "cannot fetch `$fullURL'" if $? != 0;
chomp $path;
$inputs .= '"' . $channelName . '"' . " " . $path . " ";
@@ -121,13 +119,13 @@ sub update {
my $userName = getpwuid($<);
die "who ARE you? go away" unless defined $userName;
- my $rootFile = "$rootsDir/per-user/$userName/channels";
+ my $rootFile = "$Nix::Config::stateDir/gcroots/per-user/$userName/channels";
# Build the Nix expression.
print "unpacking channel Nix expressions...\n";
my $outPath = `\\
- @bindir@/nix-build --out-link '$rootFile' --drv-link '$rootFile'.tmp \\
- @datadir@/nix/corepkgs/channels/unpack.nix \\
+ $Nix::Config::binDir/nix-build --out-link '$rootFile' --drv-link '$rootFile'.tmp \\
+ '<nix/unpack-channel.nix>' \\
--argstr system @system@ --arg inputs '$inputs'`
or die "cannot unpack the channels";
chomp $outPath;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 38bfa139d..dbafd553a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -8,7 +8,7 @@ TESTS = init.sh hash.sh lang.sh add.sh simple.sh dependencies.sh \
referrers.sh user-envs.sh logging.sh nix-build.sh misc.sh fixed.sh \
gc-runtime.sh install-package.sh check-refs.sh filter-source.sh \
remote-store.sh export.sh export-graph.sh negative-caching.sh \
- binary-patching.sh timeout.sh secure-drv-outputs.sh
+ binary-patching.sh timeout.sh secure-drv-outputs.sh nix-channel.sh
XFAIL_TESTS =
@@ -37,4 +37,3 @@ EXTRA_DIST = $(TESTS) \
secure-drv-outputs.nix \
$(wildcard lang/*.nix) $(wildcard lang/*.exp) $(wildcard lang/*.exp.xml) $(wildcard lang/*.flags) $(wildcard lang/dir*/*.nix) \
common.sh.in
-
diff --git a/tests/config.nix.in b/tests/config.nix.in
index 2bfee8b44..db3da1451 100644
--- a/tests/config.nix.in
+++ b/tests/config.nix.in
@@ -13,5 +13,6 @@ rec {
builder = shell;
args = ["-e" args.builder];
PATH = path;
- } // removeAttrs args ["builder"]);
+ } // removeAttrs args ["builder" "meta"])
+ // { meta = args.meta or {}; };
}
diff --git a/tests/dependencies.nix b/tests/dependencies.nix
index 00717ae98..6f6a7e46f 100644
--- a/tests/dependencies.nix
+++ b/tests/dependencies.nix
@@ -17,6 +17,7 @@ let {
builder = ./dependencies.builder0.sh + "/FOOBAR/../.";
input1 = input1 + "/.";
inherit input2;
+ meta.description = "Random test package";
};
}
diff --git a/tests/nix-channel.sh b/tests/nix-channel.sh
new file mode 100644
index 000000000..1d7724e93
--- /dev/null
+++ b/tests/nix-channel.sh
@@ -0,0 +1,43 @@
+source common.sh
+
+clearProfiles
+clearManifests
+
+rm -f $TEST_ROOT/.nix-channels
+
+# Override location of ~/.nix-channels.
+export HOME=$TEST_ROOT
+
+# Test add/list/remove.
+nix-channel --add http://foo/bar
+nix-channel --list | grep -q http://foo/bar
+nix-channel --remove http://foo/bar
+
+[ -e $TEST_ROOT/.nix-channels ]
+[ "$(cat $TEST_ROOT/.nix-channels)" = '' ]
+
+# Create a channel.
+rm -rf $TEST_ROOT/foo
+mkdir -p $TEST_ROOT/foo
+nix-push --copy $TEST_ROOT/foo $TEST_ROOT/foo/MANIFEST $(nix-store -r $(nix-instantiate dependencies.nix))
+rm -rf $TEST_ROOT/nixexprs
+mkdir -p $TEST_ROOT/nixexprs
+cp config.nix dependencies.nix dependencies.builder*.sh $TEST_ROOT/nixexprs/
+ln -s dependencies.nix $TEST_ROOT/nixexprs/default.nix
+(cd $TEST_ROOT && tar cv nixexprs) | bzip2 > $TEST_ROOT/foo/nixexprs.tar.bz2
+
+# Test the update action.
+nix-channel --add file://$TEST_ROOT/foo
+nix-channel --update
+
+# Do a query.
+nix-env -qa \* --meta --xml --out-path > $TEST_ROOT/meta.xml
+if [ "$xmllint" != false ]; then
+ $xmllint --noout $TEST_ROOT/meta.xml || fail "malformed XML"
+fi
+grep -q 'meta.*description.*Random test package' $TEST_ROOT/meta.xml
+grep -q 'item.*attrPath="foo".*name="dependencies"' $TEST_ROOT/meta.xml
+
+# Do an install.
+nix-env -i dependencies
+[ -e $TEST_ROOT/var/nix/profiles/default/foobar ]