From 526f78a38dabeb12196a21cebe174f073c217c12 Mon Sep 17 00:00:00 2001 From: Chris Marusich Date: Fri, 2 Dec 2016 01:52:04 -0800 Subject: [PATCH] system: If the new system generation already exists, overwrite it. * guix/scripts/system.scm (switch-to-system): Create the symlink to the new system generation using the procedure "switch-symlink" instead of "symlink". That way, if the link already exists, we update it instead of failing. * doc/guix.texi (Using the Configuration System, Invoking guix system): Document the behavior. --- doc/guix.texi | 16 +++++++++++++++- guix/scripts/system.scm | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 3b4ba48..45d8dfe 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -7155,7 +7155,15 @@ modifying or deleting previous generations. Old system generations get an entry in the GRUB boot menu, allowing you to boot them in case something went wrong with the latest generation. Reassuring, no? The @command{guix system list-generations} command lists the system -generations available on disk. +generations available on disk. It is also possible to roll back the +system via the commands @command{guix system roll-back} and +@command{guix system switch-generation}. + +Although the command @command{guix system reconfigure} will not modify +previous generations, must take care when the current generation is not +the latest (e.g., after invoking @command{guix system roll-back}), since +the operation might overwrite a later generation @pxref{Invoking guix +system}. @unnumberedsubsubsec The Programming Interface @@ -12487,6 +12495,12 @@ currently running; if a service is currently running, it does not attempt to upgrade it since this would not be possible without stopping it first. +This command creates a new generation whose number is one greater than +the current generation (as reported by @command{guix system +list-generations}). If that generation already exists, it will be +overwritten. This behavior mirrors that of @command{guix package} +@pxref{Invoking guix package}. + It also adds a GRUB menu entry for the new OS configuration, and moves entries for older configurations to a submenu---unless @option{--no-grub} is passed. diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index bb373a6..144a7fd 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -326,7 +326,7 @@ it atomically, and then run OS's activation script." (let* ((system (derivation->output-path drv)) (number (+ 1 (generation-number profile))) (generation (generation-file-name profile number))) - (symlink system generation) + (switch-symlinks generation system) (switch-symlinks profile generation) (format #t (_ "activating system...~%")) -- 2.10.2