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

Reply via email to