git: Guard against git submodules lacking a path.
* guix/git.scm (update-submodules) <directory>: Remove extraneous "/" in file
name. Only recurse when the directory exists.
Fixes: #5579
Change-Id: Ica5e5de196bd1a3d5a0a41c34162c68c0855298d
1 file changed, 11 insertions(+), 5 deletions(-)
guix/git.scm | 16 +++++++++++-----
modified guix/git.scm
@@ -402,11 +402,17 @@ (define* (update-submodules repository
;; Recurse in SUBMODULE.
(let ((directory (string-append
(repository-working-directory repository)
- "/" (submodule-path submodule))))
- (with-repository directory repository
- (update-submodules repository
- #:fetch-options fetch-options
- #:log-port log-port)))))
+ (submodule-path submodule))))
+ ;; libgit2, unlike git, does not discard invalid submodules
+ ;; that lack a path, and instead uses the module name as the
+ ;; path in this case, which would break `with-repository`
+ ;; below (see:
+ ;; <https://github.com/libgit2/libgit2/issues/7194>).
+ (when (file-exists? directory)
+ (with-repository directory repository
+ (update-submodules repository
+ #:fetch-options fetch-options
+ #:log-port log-port))))))
(repository-submodules repository)))
(define-syntax-rule (false-if-git-not-found exp)