guix system: init: Overwrite the items in the target store.

Fixes <http://bugs.gnu.org/20722>.
Reported by Eric Bavier <ericbavier@openmailbox.org>.

* guix/scripts/system.scm (copy-item): Check whether DEST exists and remove it
  if it does.
This commit is contained in:
Ludovic Courtès 2015-06-10 10:31:47 +02:00
parent aea9b23213
commit 78acff7c11
1 changed files with 7 additions and 0 deletions

View File

@ -76,6 +76,13 @@
(let ((dest (string-append target item)) (let ((dest (string-append target item))
(state (string-append target "/var/guix"))) (state (string-append target "/var/guix")))
(format log-port "copying '~a'...~%" item) (format log-port "copying '~a'...~%" item)
;; Remove DEST if it exists to make sure that (1) we do not fail badly
;; while trying to overwrite it (see <http://bugs.gnu.org/20722>), and
;; (2) we end up with the right contents.
(when (file-exists? dest)
(delete-file-recursively dest))
(copy-recursively item dest (copy-recursively item dest
#:log (%make-void-port "w")) #:log (%make-void-port "w"))