build/pyproject: Really merge directories in install phase.

Using rename-file, the destination had to be empty otherwise it would
error out.  By using copy-recursively, a directory can be copied onto a
pre-existing directory, really merging them.  This problem manifested
itself attempting to build the python-pyre package.

Solving #596.

* guix/build/pyproject-build-system.scm (install)
<merge-directories>: Use copy-recursively instead of rename-file.

Change-Id: Iceb8609a86f29b17e5fbe6a9629339d0bc26e11f
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
This commit is contained in:
Maxim Cournoyer 2024-11-28 21:16:39 +09:00 committed by Sharlatan Hellseher
parent e2a42ac5ac
commit beb6357463
No known key found for this signature in database
GPG key ID: 76D727BFF62CD2B5

View file

@ -201,8 +201,13 @@ builder.build_wheel(sys.argv[3], config_settings=config_settings)"
(format #t "~a/~a -> ~a/~a~%"
source file destination file)
(mkdir-p destination)
(rename-file (string-append source "/" file)
(string-append destination "/" file))
;; Use 'copy-recursively' rather than 'rename-file' to guard
;; against the odd case where DESTINATION is a non-empty
;; directory, which may happen when using hybrid Python
;; build systems.
(copy-recursively (string-append source "/" file)
(string-append destination "/" file))
(delete-file-recursively (string-append source "/" file))
(when post-move
(post-move file)))
(scandir source