--- Begin Message ---
Subject: |
23.1.92; failed to access zip inside zip when not using tramp |
Date: |
Sun, 07 Feb 2010 19:01:56 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.92 (x86_64-pc-linux-gnu) |
The fix revno#98570 for bug#4929 (with the subject "failed to access file
inside zip archive when using tramp") broke the ability to visit a file
in an archive inside another archive.
The problem is in the following lines in `archive-extract':
;; Just in case an archive occurs inside another archive.
(when (derived-mode-p 'archive-mode)
(setq archive-remote t)
This means that nested archives are treated as remote files.
An example of a patch that fixes this bug for nested archives:
=== modified file 'lisp/arc-mode.el'
--- lisp/arc-mode.el 2010-02-04 18:54:46 +0000
+++ lisp/arc-mode.el 2010-02-07 17:01:18 +0000
@@ -842,7 +842,7 @@ (defun archive-unique-fname (fname dir)
"am"
"arc-mode.")
dir)))
- (if (or alien (file-exists-p fullname))
+ (if (or alien (not (file-exists-p fullname)))
(progn
;; Maked sure all the leading directories in
;; archive-local-name exist under archive-tmpdir, so that
But this patch should NOT be installed, because it causes the original
remote archive to be overwritten! This is just a demonstration of the
logic for nested archives.
I currently don't understand the decision to use archive-remote=t
for nested archives (this is an old decision), but perhaps they
should be distinguished from remote archives with a new variable
or a new value of `archive-remote'?
--
Juri Linkov
http://www.jurta.org/emacs/
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#5540: 23.1.92; failed to access zip inside zip when not using tramp |
Date: |
Fri, 12 Feb 2010 21:45:17 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.92 (x86_64-pc-linux-gnu) |
> The following patch creates the directories for nested archives:
>
> === modified file 'lisp/arc-mode.el'
> --- lisp/arc-mode.el 2010-02-04 19:54:46 +0000
> +++ lisp/arc-mode.el 2010-02-09 21:12:51 +0000
> @@ -850,6 +850,11 @@ (defun archive-unique-fname (fname dir)
> ;; reconstructed in the temporary directory.
> (make-directory (file-name-directory tmpfile) t)
> (make-temp-file tmpfile))
> + ;; Maked sure all the leading directories in `fullname' exist
> + ;; under archive-tmpdir. This is necessary for nested archives
> + ;; (`archive-extract' sets `archive-remote' to t in case
> + ;; an archive occurs inside another archive).
> + (make-directory (file-name-directory fullname) t)
> fullname)))
>
> (defun archive-maybe-copy (archive)
Installed.
--
Juri Linkov
http://www.jurta.org/emacs/
--- End Message ---