diff options
author | Ludovic Courtès <ludo@gnu.org> | 2017-05-07 18:05:14 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2017-05-07 18:08:11 +0200 |
commit | ba2260dbbc5a3c915e2cbd54d93f2f3af2a864c3 (patch) | |
tree | c1533555f59cc176b2325a98ea1069fceb4ddaa5 | |
parent | 4da18166282e72680155f7fd638553027af1ed58 (diff) | |
download | guix-ba2260dbbc5a3c915e2cbd54d93f2f3af2a864c3.tar guix-ba2260dbbc5a3c915e2cbd54d93f2f3af2a864c3.tar.gz |
git-download: Fix 'git-predicate' file membership.
Previously, it the predicate would return #t for "m4/ChangeLog" if
"ChangeLog" (in the top-level directory) was in FILES. This commit
fixes the ambiguity.
* guix/git-download.scm (git-predicate): Add 'inodes' variable. Use it
to determine file membership.
-rw-r--r-- | guix/git-download.scm | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/guix/git-download.scm b/guix/git-download.scm index 5d86ab2b62..9f6d20ee38 100644 --- a/guix/git-download.scm +++ b/guix/git-download.scm @@ -145,6 +145,10 @@ absolute file name and STAT is the result of 'lstat'." (reverse lines)) (line (loop (cons line lines)))))) + (inodes (map (lambda (file) + (let ((stat (lstat file))) + (cons (stat:dev stat) (stat:ino stat)))) + files)) (status (close-pipe pipe))) (and (zero? status) (lambda (file stat) @@ -155,8 +159,10 @@ absolute file name and STAT is the result of 'lstat'." (any (lambda (f) (parent-directory? f file)) files)) ((or 'regular 'symlink) - (any (lambda (f) (string-suffix? f file)) - files)) + ;; Comparing file names is always tricky business so we rely on + ;; inode numbers instead + (member (cons (stat:dev stat) (stat:ino stat)) + inodes)) (_ #f)))))) |