diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-11-13 14:20:27 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-11-13 14:59:46 +0100 |
commit | f5a2724ae453f4a4b55ff848f4ad7e30efb6eef8 (patch) | |
tree | d75dc771a1fdd3322ed0c4f266c39b952f149183 /guix | |
parent | 8390869811f56f5b2ff947efb9d48bcf219a0444 (diff) | |
download | gnu-guix-f5a2724ae453f4a4b55ff848f4ad7e30efb6eef8.tar gnu-guix-f5a2724ae453f4a4b55ff848f4ad7e30efb6eef8.tar.gz |
deduplication: Restore directory mtime and permissions after deduplication.
Fixes <https://bugs.gnu.org/33361>.
* guix/store/deduplication.scm (replace-with-link): Call 'set-file-time'
and 'chmod' after 'rename-file'.
* tests/nar.scm ("restore-file-set with directories (signed, valid)"):
New test.
Diffstat (limited to 'guix')
-rw-r--r-- | guix/store/deduplication.scm | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/guix/store/deduplication.scm b/guix/store/deduplication.scm index 53810c680f..21b0c81f3d 100644 --- a/guix/store/deduplication.scm +++ b/guix/store/deduplication.scm @@ -102,11 +102,17 @@ LINK-PREFIX." SWAP-DIRECTORY as the directory to store temporary hard links. Note: TARGET, TO-REPLACE, and SWAP-DIRECTORY must be on the same file system." - (let ((temp-link (get-temp-link target swap-directory))) - (make-file-writable (dirname to-replace)) + (let* ((temp-link (get-temp-link target swap-directory)) + (parent (dirname to-replace)) + (stat (stat parent))) + (make-file-writable parent) (catch 'system-error (lambda () - (rename-file temp-link to-replace)) + (rename-file temp-link to-replace) + + ;; Restore PARENT's mtime and permissions. + (set-file-time parent stat) + (chmod parent (stat:mode stat))) (lambda args (delete-file temp-link) (unless (= EMLINK (system-error-errno args)) |