list-runtime-roots: Canonicalize store items.

Looking at 'addAdditionalRoots' in libstore/gc.cc, it looks like it
should always have been this way.  In practice it probably doesn't make
much of a difference.

* nix/scripts/list-runtime-roots.in (canonicalize-store-item): New
procedure.
<top level>: Use it.
This commit is contained in:
Ludovic Courtès 2017-11-12 22:16:28 +01:00
parent b8f59cdc20
commit fb17a89912
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -26,6 +26,7 @@
(use-modules (ice-9 ftw) (use-modules (ice-9 ftw)
(ice-9 regex) (ice-9 regex)
(ice-9 rdelim) (ice-9 rdelim)
(ice-9 match)
(srfi srfi-1) (srfi srfi-1)
(srfi srfi-26) (srfi srfi-26)
(rnrs io ports)) (rnrs io ports))
@ -126,5 +127,18 @@ or the empty list."
(lambda (a b) (lambda (a b)
(< (string->number a) (string->number b)))))) (< (string->number a) (string->number b))))))
(define canonicalize-store-item
(let ((prefix (+ 1 (string-length %store-directory))))
(lambda (file)
"Return #f if FILE is not a store item; otherwise, return the store file
name without any sub-directory components."
(and (string-prefix? %store-directory file)
(string-append %store-directory "/"
(let ((base (string-drop file prefix)))
(match (string-index base #\/)
(#f base)
(slash (string-take base slash)))))))))
(for-each (cut simple-format #t "~a~%" <>) (for-each (cut simple-format #t "~a~%" <>)
(delete-duplicates (referenced-files))) (delete-duplicates
(filter-map canonicalize-store-item (referenced-files))))