guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

253/376: nix-channel: Add --rollback flag


From: Ludovic Courtès
Subject: 253/376: nix-channel: Add --rollback flag
Date: Wed, 28 Jan 2015 22:05:25 +0000

civodul pushed a commit to tag 1.8
in repository guix.

commit 2c1711ae33c0824570dab4651c5aefd273e8eba6
Author: Eelco Dolstra <address@hidden>
Date:   Tue Oct 14 12:07:56 2014 +0200

    nix-channel: Add --rollback flag
    
    Fixes #368.
---
 doc/manual/command-ref/nix-channel.xml |   55 +++++++++++++++++++++++++++++++-
 scripts/nix-channel.in                 |   14 ++++++++
 2 files changed, 68 insertions(+), 1 deletions(-)

diff --git a/doc/manual/command-ref/nix-channel.xml 
b/doc/manual/command-ref/nix-channel.xml
index 63ecba8..c4cc04c 100644
--- a/doc/manual/command-ref/nix-channel.xml
+++ b/doc/manual/command-ref/nix-channel.xml
@@ -24,6 +24,7 @@
       <arg choice='plain'><option>--remove</option> 
<replaceable>url</replaceable></arg>
       <arg choice='plain'><option>--list</option></arg>
       <arg choice='plain'><option>--update</option> <arg 
rep='repeat'><replaceable>names</replaceable></arg></arg>
+      <arg choice='plain'><option>--rollback</option> <arg 
choice='opt'><replaceable>generation</replaceable></arg></arg>
     </group>
   </cmdsynopsis>
 </refsynopsisdiv>
@@ -80,6 +81,14 @@ condition="manual">See also <xref linkend="sec-channels"
 
   </varlistentry>
 
+  <varlistentry><term><option>--rollback</option> 
[<replaceable>generation</replaceable>]</term>
+
+    <listitem><para>Reverts the previous call to <command>nix-channel
+    --update</command>. Optionally, you can specify a specific channel
+    generation number to restore.</para></listitem>
+
+  </varlistentry>
+
 </variablelist>
 
 </para>
@@ -104,10 +113,54 @@ respectively.</para>
 <para>To subscribe to the Nixpkgs channel and install the GNU Hello 
package:</para>
 
 <screen>
-$ nix-channel --add http://nixos.org/channels/nixpkgs-unstable
+$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
 $ nix-channel --update
 $ nix-env -iA nixpkgs.hello</screen>
 
+<para>You can revert channel updates using <option>--rollback</option>:</para>
+
+<screen>
+$ nix-instantiate --eval -E '(import &lt;nixpkgs> {}).lib.nixpkgsVersion'
+"14.04.527.0e935f1"
+
+$ nix-channel --rollback
+switching from generation 483 to 482
+
+$ nix-instantiate --eval -E '(import &lt;nixpkgs> {}).lib.nixpkgsVersion'
+"14.04.526.dbadfad"
+</screen>
+
+</refsection>
+
+<refsection><title>Files</title>
+
+<variablelist>
+
+  
<varlistentry><term><filename>/nix/var/nix/profiles/<replaceable>username</replaceable>/channels</filename></term>
+
+    <listitem><para><command>nix-channel</command> uses a
+    <command>nix-env</command> profile to keep track of previous
+    versions of the subscribed channels. Every time you run
+    <command>nix-channel --update</command>, a new channel generation
+    (that is, a symlink to the channel Nix expressions in the Nix store)
+    is created. This enables <command>nix-channel --rollback</command>
+    to revert to previous versions.</para></listitem>
+
+  </varlistentry>
+
+  <varlistentry><term><filename>~/.nix-defexpr/channels</filename></term>
+
+    <listitem><para>This is a symlink to
+    
<filename>/nix/var/nix/profiles/<replaceable>username</replaceable>/channels</filename>.
 It
+    ensures that <command>nix-env</command> can find your channels. In
+    a multi-user installation, you may also have
+    <filename>~/.nix-defexpr/channels_root</filename>, which links to
+    the channels of the root user.</para></listitem>
+
+  </varlistentry>
+
+</variablelist>
+
 </refsection>
 
 </refentry>
diff --git a/scripts/nix-channel.in b/scripts/nix-channel.in
index 8e07821..b8c93df 100755
--- a/scripts/nix-channel.in
+++ b/scripts/nix-channel.in
@@ -199,6 +199,20 @@ while (scalar @ARGV) {
         last;
     }
 
+    elsif ($arg eq "--rollback") {
+        die "$0: ‘--rollback’ has at most one argument\n" if scalar @ARGV > 1;
+        my $generation = shift @ARGV;
+        my @args = ("$Nix::Config::binDir/nix-env", "--profile", $profile);
+        if (defined $generation) {
+            die "invalid channel generation number ‘$generation’" unless 
$generation =~ /^[0-9]+$/;
+            push @args, "--switch-generation", $generation;
+        } else {
+            push @args, "--rollback";
+        }
+        system(@args) == 0 or exit 1;
+        last;
+    }
+
     elsif ($arg eq "--help") {
         exec "man nix-channel" or die;
     }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]