mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2025-01-21 01:26:43 +01:00
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'.
This commit is contained in:
parent
daa6036fda
commit
13512e1b8f
1 changed files with 20 additions and 16 deletions
|
@ -179,24 +179,28 @@ (define (git-file-list directory)
|
|||
|
||||
(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
|
||||
|
|
Loading…
Reference in a new issue