diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2019-10-14 05:41:45 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2019-10-14 05:41:45 +0200 |
commit | f521225736b2a6ab38bb94298fb4d3ace3d9a9ec (patch) | |
tree | 8f7f62005d919fe1991d90e6c640e31f00914bd5 /lisp/tar-mode.el | |
parent | eac531b760aa805c293339eba78e58b5b89fa211 (diff) | |
download | emacs-f521225736b2a6ab38bb94298fb4d3ace3d9a9ec.tar.gz |
Add a new tar-copy-preserve-time variable
* lisp/tar-mode.el (tar-copy-preserve-time): New variable (bug#11882).
(tar-copy): Use it.
Diffstat (limited to 'lisp/tar-mode.el')
-rw-r--r-- | lisp/tar-mode.el | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el index 8e7e1945cbc..569b01f978b 100644 --- a/lisp/tar-mode.el +++ b/lisp/tar-mode.el @@ -127,6 +127,11 @@ the file never exists on disk." This information is useful, but it takes screen space away from file names." :type 'boolean) +(defcustom tar-copy-preserve-time nil + "Non-nil means that Tar mode preserves the timestamp when copying files." + :type 'boolean + :version "27.1") + (defvar tar-parse-info nil) (defvar tar-superior-buffer nil "Buffer containing the tar archive from which a member was extracted.") @@ -1001,11 +1006,16 @@ actually appear on disk when you save the tar-file's buffer." (defun tar-copy (&optional to-file) "In Tar mode, extract this entry of the tar file into a file on disk. If TO-FILE is not supplied, it is prompted for, defaulting to the name of -the current tar-entry." +the current tar-entry. + +If `tar-copy-preserve-time' is non-nil, the original +timestamp (if present in the tar file) will be used on the +extracted file." (interactive (list (tar-read-file-name))) (let* ((descriptor (tar-get-descriptor)) (name (tar-header-name descriptor)) (size (tar-header-size descriptor)) + (date (tar-header-date descriptor)) (start (tar-header-data-start descriptor)) (end (+ start size)) (inhibit-file-name-handlers inhibit-file-name-handlers) @@ -1024,7 +1034,10 @@ the current tar-entry." inhibit-file-name-handlers)) inhibit-file-name-operation 'write-region)) (let ((coding-system-for-write 'no-conversion)) - (write-region start end to-file nil nil nil t))) + (write-region start end to-file nil nil nil t)) + (when (and tar-copy-preserve-time + date) + (set-file-times to-file date))) (message "Copied tar entry %s to %s" name to-file))) (defun tar-new-entry (filename &optional index) |