git-download: 'git-predicate' returns #f on Git errors.

Fixes a regression introduced in
aed0a59405 whereby 'git-predicate' would
throw to 'git-error instead of returning #f as the docstring says.

* guix/git-download.scm (git-predicate): Return #f upon 'git-error'.
master
Ludovic Courtès 2018-09-14 11:11:54 +02:00
parent daa6036fda
commit 13512e1b8f
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 20 additions and 16 deletions

View File

@ -179,24 +179,28 @@ are relative to DIRECTORY, which is not necessarily the root of the checkout."
(define (git-predicate directory)
"Return a predicate that returns true if a file is part of the Git checkout
living at DIRECTORY. Upon Git failure, return #f instead of a predicate.
living at DIRECTORY. If DIRECTORY does not lie within a Git checkout, and
upon Git errors, return #f instead of a predicate.
The returned predicate takes two arguments FILE and STAT where FILE is an
absolute file name and STAT is the result of 'lstat'."
(let* ((files (git-file-list directory))
(inodes (fold (lambda (file result)
(let ((stat
(lstat (string-append directory "/"
file))))
(vhash-consv (stat:ino stat) (stat:dev stat)
result)))
vlist-null
files)))
(lambda (file stat)
;; Comparing file names is always tricky business so we rely on inode
;; numbers instead.
(match (vhash-assv (stat:ino stat) inodes)
((_ . dev) (= dev (stat:dev stat)))
(#f #f)))))
(catch 'git-error
(lambda ()
(let* ((files (git-file-list directory))
(inodes (fold (lambda (file result)
(let ((stat
(lstat (string-append directory "/"
file))))
(vhash-consv (stat:ino stat) (stat:dev stat)
result)))
vlist-null
files)))
(lambda (file stat)
;; Comparing file names is always tricky business so we rely on inode
;; numbers instead.
(match (vhash-assv (stat:ino stat) inodes)
((_ . dev) (= dev (stat:dev stat)))
(#f #f)))))
(const #f)))
;;; git-download.scm ends here