summaryrefslogtreecommitdiff
path: root/lisp/tar-mode.el
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2019-10-14 05:41:45 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2019-10-14 05:41:45 +0200
commitf521225736b2a6ab38bb94298fb4d3ace3d9a9ec (patch)
tree8f7f62005d919fe1991d90e6c640e31f00914bd5 /lisp/tar-mode.el
parenteac531b760aa805c293339eba78e58b5b89fa211 (diff)
downloademacs-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.el17
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)