guix system: If the new system generation already exists, overwrite it.

Fixes <http://bugs.gnu.org/25100>.

Before that, 'guix system reconfigure' would fail if the next generation
already existed.

* guix/scripts/system.scm (switch-to-system): Use 'switch-symlink'
instead of 'symlink'.
* doc/guix.texi (Using the Configuration System, Invoking guix system):
Document the behavior.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Chris Marusich 2016-12-02 01:52:04 -08:00 committed by Ludovic Courtès
parent 4bd391f557
commit 067a2e2de9
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 16 additions and 2 deletions

View File

@ -7174,7 +7174,15 @@ modifying or deleting previous generations. Old system generations get
an entry in the GRUB boot menu, allowing you to boot them in case an entry in the GRUB boot menu, allowing you to boot them in case
something went wrong with the latest generation. Reassuring, no? The something went wrong with the latest generation. Reassuring, no? The
@command{guix system list-generations} command lists the system @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 @unnumberedsubsubsec The Programming Interface
@ -12599,6 +12607,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 attempt to upgrade it since this would not be possible without stopping it
first. 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 It also adds a GRUB menu entry for the new OS configuration, and moves
entries for older configurations to a submenu---unless entries for older configurations to a submenu---unless
@option{--no-grub} is passed. @option{--no-grub} is passed.

View File

@ -326,7 +326,7 @@ it atomically, and then run OS's activation script."
(let* ((system (derivation->output-path drv)) (let* ((system (derivation->output-path drv))
(number (+ 1 (generation-number profile))) (number (+ 1 (generation-number profile)))
(generation (generation-file-name profile number))) (generation (generation-file-name profile number)))
(symlink system generation) (switch-symlinks generation system)
(switch-symlinks profile generation) (switch-symlinks profile generation)
(format #t (_ "activating system...~%")) (format #t (_ "activating system...~%"))