aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Othacehe <othacehe@gnu.org>2020-07-28 14:05:09 +0200
committerMathieu Othacehe <othacehe@gnu.org>2020-07-28 14:10:28 +0200
commit8b221b64a552d31e241701aa5c6d339287a7a15b (patch)
treefb0a89652bf0588939ecfc222119f29d869bc716
parent64e8f2ec2dc6301019a5b93a82787ea6adaf8c76 (diff)
downloadguix-8b221b64a552d31e241701aa5c6d339287a7a15b.tar.gz
guix-8b221b64a552d31e241701aa5c6d339287a7a15b.zip
store: deduplication: Handle fs without d_type support.
scandir* uses readdir, which means that the file type property can be 'unknown if the underlying file-system does not support d_type. Make sure to fallback to lstat in that case. Fixes: https://issues.guix.gnu.org/issue/42579. * guix/store/deduplication.scm (deduplicate): Handle the case where properties is 'unknown because the underlying file-system does not support d_type.
-rw-r--r--guix/store/deduplication.scm6
1 files changed, 4 insertions, 2 deletions
diff --git a/guix/store/deduplication.scm b/guix/store/deduplication.scm
index a742a142ee..df959bdd06 100644
--- a/guix/store/deduplication.scm
+++ b/guix/store/deduplication.scm
@@ -164,8 +164,10 @@ under STORE."
((file . properties)
(unless (member file '("." ".."))
(let* ((file (string-append path "/" file))
- (type (or (assq-ref properties 'type)
- (stat:type (lstat file)))))
+ (type (match (assoc-ref properties 'type)
+ ((or 'unknown #f)
+ (stat:type (lstat file)))
+ (type type))))
(loop file type
(and (not (eq? 'directory type))
(nar-sha256 file)))))))