From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Ivan Shmakov Newsgroups: gmane.emacs.bugs Subject: bug#19865: tar-untar-buffer: should honor default-directory Date: Mon, 16 Feb 2015 05:24:44 +0000 Message-ID: <878ufya0o3.fsf@violet.siamics.net> References: <87a90gd91b.fsf@violet.siamics.net> <87oaowbkgv.fsf@violet.siamics.net> <87bnkwbgr2.fsf@violet.siamics.net> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1424064329 23933 80.91.229.3 (16 Feb 2015 05:25:29 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 16 Feb 2015 05:25:29 +0000 (UTC) To: 19865@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Feb 16 06:25:19 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1YNEBJ-00015o-Ky for geb-bug-gnu-emacs@m.gmane.org; Mon, 16 Feb 2015 06:25:17 +0100 Original-Received: from localhost ([::1]:37655 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNEBI-000085-Nx for geb-bug-gnu-emacs@m.gmane.org; Mon, 16 Feb 2015 00:25:16 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:54588) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNEBB-00005k-0t for bug-gnu-emacs@gnu.org; Mon, 16 Feb 2015 00:25:13 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YNEB5-0002ek-C1 for bug-gnu-emacs@gnu.org; Mon, 16 Feb 2015 00:25:08 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:53839) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNEB5-0002e9-0t for bug-gnu-emacs@gnu.org; Mon, 16 Feb 2015 00:25:03 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1YNEB4-0004VA-Op for bug-gnu-emacs@gnu.org; Mon, 16 Feb 2015 00:25:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Ivan Shmakov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 16 Feb 2015 05:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19865 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 19865-submit@debbugs.gnu.org id=B19865.142406429817291 (code B ref 19865); Mon, 16 Feb 2015 05:25:02 +0000 Original-Received: (at 19865) by debbugs.gnu.org; 16 Feb 2015 05:24:58 +0000 Original-Received: from localhost ([127.0.0.1]:45079 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YNEAz-0004Uo-VL for submit@debbugs.gnu.org; Mon, 16 Feb 2015 00:24:58 -0500 Original-Received: from fely.am-1.org ([78.47.74.50]:44029) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YNEAw-0004Uf-Va for 19865@debbugs.gnu.org; Mon, 16 Feb 2015 00:24:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=siamics.net; s=a2013295; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date:Sender:References:Subject:To:From; bh=O2eoS12DkOJ0eqU3aYi/CDP+Ld+ACTMd1NQy+bOKyvQ=; b=jgq/TvZXdLuknCUT1ooez9Z/l+HNE8nsJBKb0l9bRQsz8BbaTrd9cTWIt6pXgzAo8FR3uW6bQ5ihIX1zURH6tFGf0Vi8R+1K1sVK2cA/R+FIGqAMw6GDsFhaJdRpbR6lp1xBb5OElqOEYWTUVuMaHIxpyU83+XGHOEx424rvLqA=; Original-Received: from [2a02:2560:6d4:26ca::1:1d] (helo=violet.siamics.net) by fely.am-1.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1YNEAu-0006bR-UI for 19865@debbugs.gnu.org; Mon, 16 Feb 2015 05:24:53 +0000 Original-Received: from localhost ([::1] helo=violet.siamics.net) by violet.siamics.net with esmtps (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1YNEAn-00074t-6Y for 19865@debbugs.gnu.org; Mon, 16 Feb 2015 12:24:45 +0700 Mail-Followup-To: 19865@debbugs.gnu.org In-Reply-To: (Stefan Monnier's message of "Sun, 15 Feb 2015 20:48:39 -0500") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:99459 Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable >>>>> Stefan Monnier writes: [=E2=80=A6] >> Please thus consider the revised patch MIMEd, which I=E2=80=99ve tried = to >> make consistent with such an approach. > I think it's better, indeed. I=E2=80=99ve 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. =20=20=20=20 Fixes: debbugs:19865 PS. Should the pending objections be resolved by sometime around 18:00=C2=A0UTC today, I=E2=80=99d happily push the change to =E2=80=98mast= er=E2=80=99. --=20 FSF associate member #7257 http://boycottsystemd.org/ =E2=80=A6 3013 B6A0= 230E 334A --=-=-= Content-Type: text/diff Content-Disposition: inline --- 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." --=-=-=--