~ruther/guix-local

69792b285c98dc031d0464a08f84827e3f49c7f2 — Ludovic Courtès 10 years ago 020f3e4
store: Memoize 'add-to-store' based on the result of 'lstat', not 'stat'.

* guix/store.scm (add-to-store): Change 'stat' call to 'lstat'.  Clarify
  docstring.
1 files changed, 6 insertions(+), 5 deletions(-)

M guix/store.scm
M guix/store.scm => guix/store.scm +6 -5
@@ 610,11 610,12 @@ path."
                                 store-path)))
    (lambda (server basename recursive? hash-algo file-name)
      "Add the contents of FILE-NAME under BASENAME to the store.  When
RECURSIVE? is true and FILE-NAME designates a directory, the contents of
FILE-NAME are added recursively; if FILE-NAME designates a flat file and
RECURSIVE? is true, its contents are added, and its permission bits are
kept.  HASH-ALGO must be a string such as \"sha256\"."
      (let* ((st    (stat file-name #f))
RECURSIVE? is false, FILE-NAME must designate a regular file--not a directory
nor a symlink.  When RECURSIVE? is true and FILE-NAME designates a directory,
the contents of FILE-NAME are added recursively; if FILE-NAME designates a
flat file and RECURSIVE? is true, its contents are added, and its permission
bits are kept.  HASH-ALGO must be a string such as \"sha256\"."
      (let* ((st    (false-if-exception (lstat file-name)))
             (args  `(,st ,basename ,recursive? ,hash-algo))
             (cache (nix-server-add-to-store-cache server)))
        (or (and st (hash-ref cache args))