all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Ivan Shmakov <ivan@siamics.net>
To: 19865@debbugs.gnu.org
Subject: bug#19865: tar-untar-buffer: should honor default-directory
Date: Mon, 16 Feb 2015 05:24:44 +0000	[thread overview]
Message-ID: <878ufya0o3.fsf@violet.siamics.net> (raw)
In-Reply-To: <jwvpp9a7hlo.fsf-monnier+emacsbugs@gnu.org> (Stefan Monnier's message of "Sun, 15 Feb 2015 20:48:39 -0500")

[-- Attachment #1: Type: text/plain, Size: 918 bytes --]

>>>>> Stefan Monnier <monnier@IRO.UMontreal.CA> writes:

[…]

 >> Please thus consider the revised patch MIMEd, which I’ve tried to
 >> make consistent with such an approach.

 > I think it's better, indeed.

	I’ve revised the change to apply default-directory just once
	and use the result consistently throughout the function.

 > BTW, the (set-buffer-multibyte nil) should probably just be remove
 > (or replaced by a cl-assert)

	Done.

Fix default-directory handling in tar-untar-buffer.

* lisp/tar-mode.el (tar-untar-buffer): Fixed: use the value of
default-directory local to the tar-mode buffer (was:
tar-data-buffer); clean-up.
    
Fixes: debbugs:19865

PS.  Should the pending objections be resolved by sometime around
	18:00 UTC today, I’d happily push the change to ‘master’.

-- 
FSF associate member #7257  http://boycottsystemd.org/  … 3013 B6A0 230E 334A

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/diff, Size: 2333 bytes --]

--- a/lisp/tar-mode.el
+++ b/lisp/tar-mode.el
@@ -533,27 +533,32 @@
 
 (defun tar-untar-buffer ()
   "Extract all archive members in the tar-file into the current directory."
   (interactive)
   ;; FIXME: make it work even if we're not in tar-mode.
-  (let ((descriptors tar-parse-info))   ;Read the var in its buffer.
-    (with-current-buffer
-        (if (tar-data-swapped-p) tar-data-buffer (current-buffer))
-      (set-buffer-multibyte nil)          ;Hopefully, a no-op.
-      (dolist (descriptor descriptors)
-        (let* ((name (tar-header-name descriptor))
-               (dir (if (eq (tar-header-link-type descriptor) 5)
-                        name
-                      (file-name-directory name)))
-               (start (tar-header-data-start descriptor))
-               (end (+ start (tar-header-size descriptor))))
-          (unless (file-directory-p name)
-            (message "Extracting %s" name)
-            (if (and dir (not (file-exists-p dir)))
-                (make-directory dir t))
-            (unless (file-directory-p name)
+  (let ((data-buf (if (tar-data-swapped-p) tar-data-buffer
+                    (current-buffer))))
+    (with-current-buffer data-buf
+      (cl-assert (not enable-multibyte-characters)))
+    (dolist (descriptor tar-parse-info)
+      (let* ((orig (tar-header-name descriptor))
+	     ;; Note that default-directory may have different values
+	     ;; in the tar-mode and data buffers, so we stick to the
+	     ;; absolute file name from now on.
+	     (name (expand-file-name orig))
+	     (dir (if (eq (tar-header-link-type descriptor) 5)
+		      name
+		    (file-name-directory name)))
+	     (start (tar-header-data-start descriptor))
+	     (end (+ start (tar-header-size descriptor))))
+	(unless (file-directory-p name)
+	  (message "Extracting %s" orig)
+	  (if (and dir (not (file-exists-p dir)))
+	      (make-directory dir t))
+	  (unless (file-directory-p name)
+	    (with-current-buffer data-buf
 	      (let ((coding-system-for-write 'no-conversion))
-		(write-region start end name)))
-            (set-file-modes name (tar-header-mode descriptor))))))))
+		(write-region start end name))))
+	  (set-file-modes name (tar-header-mode descriptor)))))))
 
 (defun tar-summarize-buffer ()
   "Parse the contents of the tar file in the current buffer."

  reply	other threads:[~2015-02-16  5:24 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-14 11:31 bug#19865: tar-untar-buffer: should honor default-directory Ivan Shmakov
2015-02-14 12:16 ` Eli Zaretskii
2015-02-14 12:27   ` Ivan Shmakov
2015-02-14 12:40     ` Eli Zaretskii
2015-02-14 12:47       ` Ivan Shmakov
2015-02-14 13:22         ` Eli Zaretskii
2015-02-14 13:34           ` Ivan Shmakov
2015-02-14 14:56             ` Eli Zaretskii
2015-02-14 15:16               ` Ivan Shmakov
2015-02-14 14:49 ` Stefan Monnier
2015-02-14 15:01   ` Eli Zaretskii
2015-02-16  1:43     ` Stefan Monnier
2015-02-16 15:43       ` Eli Zaretskii
2015-02-16 19:34         ` Stefan Monnier
2015-02-16 19:49           ` Eli Zaretskii
2015-02-16 23:40             ` Stefan Monnier
2015-02-17  3:37               ` Eli Zaretskii
2015-02-18  3:38                 ` Stefan Monnier
2015-02-17 17:03               ` Wolfgang Jenkner
2015-02-17 18:02                 ` Eli Zaretskii
2015-02-17  5:25             ` Ivan Shmakov
2015-02-17 15:46               ` Eli Zaretskii
2015-02-17 18:05                 ` Ivan Shmakov
2015-02-14 15:07   ` Ivan Shmakov
2015-02-14 16:27     ` Ivan Shmakov
2015-02-16  1:48       ` Stefan Monnier
2015-02-16  5:24         ` Ivan Shmakov [this message]
2015-02-16  7:45           ` Stefan Monnier
2015-02-16  8:55             ` Ivan Shmakov
2015-02-16 14:58               ` Stefan Monnier
2016-02-23 11:04           ` Lars Ingebrigtsen
2019-06-25 17:55             ` Lars Ingebrigtsen
2015-02-14 15:57 ` Ivan Shmakov
2015-02-14 16:56   ` Eli Zaretskii
2015-02-14 17:32     ` Ivan Shmakov
2015-02-14 17:44       ` Eli Zaretskii
2015-02-14 18:12         ` Ivan Shmakov
2015-02-14 18:37           ` Eli Zaretskii
2015-02-14 19:12             ` Ivan Shmakov
2015-02-14 19:28               ` Eli Zaretskii
2015-02-14 19:42                 ` Ivan Shmakov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878ufya0o3.fsf@violet.siamics.net \
    --to=ivan@siamics.net \
    --cc=19865@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.