Author: eelco Date: Tue Jan 3 01:51:38 2012 New Revision: 31221 URL: https://nixos.org/websvn/nix/?rev=31221&sc=1
Log: * Add a test for nix-channel. * Refactor the nix-channel unpacker a bit. Added: nix/trunk/corepkgs/unpack-channel.nix - copied, changed from r31219, nix/trunk/corepkgs/channels/unpack.nix nix/trunk/corepkgs/unpack-channel.sh - copied, changed from r31219, nix/trunk/corepkgs/channels/unpack.sh.in nix/trunk/tests/nix-channel.sh Deleted: nix/trunk/corepkgs/channels/ Modified: nix/trunk/configure.ac nix/trunk/corepkgs/Makefile.am nix/trunk/perl/lib/Nix/Config.pm.in nix/trunk/scripts/nix-channel.in nix/trunk/tests/Makefile.am nix/trunk/tests/config.nix.in nix/trunk/tests/dependencies.nix Modified: nix/trunk/configure.ac ============================================================================== --- nix/trunk/configure.ac Tue Jan 3 00:47:27 2012 (r31220) +++ nix/trunk/configure.ac Tue Jan 3 01:51:38 2012 (r31221) @@ -346,9 +346,6 @@ perl/Makefile scripts/Makefile corepkgs/Makefile - corepkgs/nar/Makefile - corepkgs/buildenv/Makefile - corepkgs/channels/Makefile doc/Makefile doc/manual/Makefile misc/Makefile Modified: nix/trunk/corepkgs/Makefile.am ============================================================================== --- nix/trunk/corepkgs/Makefile.am Tue Jan 3 00:47:27 2012 (r31220) +++ nix/trunk/corepkgs/Makefile.am Tue Jan 3 01:51:38 2012 (r31221) @@ -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) Copied and modified: nix/trunk/corepkgs/unpack-channel.nix (from r31219, nix/trunk/corepkgs/channels/unpack.nix) ============================================================================== --- nix/trunk/corepkgs/channels/unpack.nix Tue Jan 3 00:16:29 2012 (r31219, copy source) +++ nix/trunk/corepkgs/unpack-channel.nix Tue Jan 3 01:51:38 2012 (r31221) @@ -1,7 +1,11 @@ -{system, inputs}: +with import <nix/config.nix>; + +{ system, inputs }: derivation { name = "channels"; - builder = ./unpack.sh; - inherit system inputs; -} \ No newline at end of file + builder = shell; + args = [ "-e" ./unpack-channel.sh ]; + inherit system inputs bzip2 tar tr; + PATH = "${nixBinDir}:${coreutils}"; +} Copied and modified: nix/trunk/corepkgs/unpack-channel.sh (from r31219, nix/trunk/corepkgs/channels/unpack.sh.in) ============================================================================== --- nix/trunk/corepkgs/channels/unpack.sh.in Tue Jan 3 00:16:29 2012 (r31219, copy source) +++ nix/trunk/corepkgs/unpack-channel.sh Tue Jan 3 01:51:38 2012 (r31221) @@ -1,10 +1,5 @@ -#! @shell@ -e - -# Cygwin compatibility hack: bunzip2 expects cygwin.dll in $PATH. -export PATH=@coreutils@ - -@coreutils@/mkdir $out -@coreutils@/mkdir $out/tmp +mkdir $out +mkdir $out/tmp cd $out/tmp inputs=($inputs) @@ -14,22 +9,22 @@ echo "unpacking channel $channelName" - @bzip2@ -d < $channelTarball | @tar@ xf - + $bzip2 -d < $channelTarball | $tar xf - if test -e */channel-name; then - channelName="$(@coreutils@/cat */channel-name)" + channelName="$(cat */channel-name)" fi nr=1 - attrName=$(echo $channelName | @tr@ -- '- ' '__') + attrName=$(echo $channelName | $tr -- '- ' '__') dirName=$attrName while test -e ../$dirName; do nr=$((nr+1)) dirName=$attrName-$nr done - @coreutils@/mv * ../$dirName # !!! hacky + mv * ../$dirName # !!! hacky done cd .. -@coreutils@/rmdir tmp +rmdir tmp Modified: nix/trunk/perl/lib/Nix/Config.pm.in ============================================================================== --- nix/trunk/perl/lib/Nix/Config.pm.in Tue Jan 3 00:47:27 2012 (r31220) +++ nix/trunk/perl/lib/Nix/Config.pm.in Tue Jan 3 01:51:38 2012 (r31221) @@ -2,6 +2,7 @@ $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"; Modified: nix/trunk/scripts/nix-channel.in ============================================================================== --- nix/trunk/scripts/nix-channel.in Tue Jan 3 00:47:27 2012 (r31220) +++ nix/trunk/scripts/nix-channel.in Tue Jan 3 01:51:38 2012 (r31221) @@ -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 @@ 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 @@ 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 @@ 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; Modified: nix/trunk/tests/Makefile.am ============================================================================== --- nix/trunk/tests/Makefile.am Tue Jan 3 00:47:27 2012 (r31220) +++ nix/trunk/tests/Makefile.am Tue Jan 3 01:51:38 2012 (r31221) @@ -8,7 +8,7 @@ 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 @@ secure-drv-outputs.nix \ $(wildcard lang/*.nix) $(wildcard lang/*.exp) $(wildcard lang/*.exp.xml) $(wildcard lang/*.flags) $(wildcard lang/dir*/*.nix) \ common.sh.in - Modified: nix/trunk/tests/config.nix.in ============================================================================== --- nix/trunk/tests/config.nix.in Tue Jan 3 00:47:27 2012 (r31220) +++ nix/trunk/tests/config.nix.in Tue Jan 3 01:51:38 2012 (r31221) @@ -13,5 +13,6 @@ builder = shell; args = ["-e" args.builder]; PATH = path; - } // removeAttrs args ["builder"]); + } // removeAttrs args ["builder" "meta"]) + // { meta = args.meta or {}; }; } Modified: nix/trunk/tests/dependencies.nix ============================================================================== --- nix/trunk/tests/dependencies.nix Tue Jan 3 00:47:27 2012 (r31220) +++ nix/trunk/tests/dependencies.nix Tue Jan 3 01:51:38 2012 (r31221) @@ -17,6 +17,7 @@ builder = ./dependencies.builder0.sh + "/FOOBAR/../."; input1 = input1 + "/."; inherit input2; + meta.description = "Random test package"; }; } Added: nix/trunk/tests/nix-channel.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ nix/trunk/tests/nix-channel.sh Tue Jan 3 01:51:38 2012 (r31221) @@ -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 ] _______________________________________________ nix-commits mailing list nix-comm...@lists.science.uu.nl http://lists.science.uu.nl/mailman/listinfo/nix-commits