From: Eli Zaretskii <eliz@gnu.org>
To: Michael Albinus <michael.albinus@gmx.de>
Cc: vidagabor@gmail.com, 14030@debbugs.gnu.org
Subject: bug#14030: 24.3; expand-file-name expands remote file name on Windows incorrectly
Date: Sun, 24 Mar 2013 18:10:44 +0200 [thread overview]
Message-ID: <83r4j43hiz.fsf@gnu.org> (raw)
In-Reply-To: <87ehf56bmb.fsf@gmx.de>
> From: Michael Albinus <michael.albinus@gmx.de>
> Cc: vidagabor@gmail.com, 14030@debbugs.gnu.org
> Date: Sat, 23 Mar 2013 22:37:48 +0100
>
> >> (let ((directory-sep-char ?/)
> >> (default-directory (tramp-compat-temporary-file-directory)))
> >> (tramp-make-tramp-file-name
> >> method user host
> >> (tramp-drop-volume-letter
> >> (tramp-run-real-handler
> >> 'expand-file-name (list localname)))
> >> hop)))))
> >>
> >> In Emacs 24.3, `tramp-drop-volume-letter' is not executed:
> >>
> >> | | | | 5 -> tramp-run-real-handler: operation=expand-file-name
> >> | | | | args=("/root/")
> >> | | | | 5 <- tramp-run-real-handler: "c:/root/"
> >> | | | | 5 -> tramp-make-tramp-file-name: method="plink" user=nil
> >> | | | | host="ford" localname="c:/root/" hop=nil
> >> | | | | 5 <- tramp-make-tramp-file-name: "/plink:ford:c:/root/"
> >>
> >> When I use Emacs 24.3.50, the latest snapshot, that function is
> >> executed:
> >>
> >> | | | | 5 -> (tramp-run-real-handler expand-file-name ("/root/"))
> >> | | | | 5 <- tramp-run-real-handler: "c:/root/"
> >> | | | | 5 -> (tramp-drop-volume-letter "c:/root/")
> >> | | | | 5 <- tramp-drop-volume-letter: "/root/"
> >> | | | | 5 -> (tramp-make-tramp-file-name "plink" nil "ford" "/root/" nil)
> >> | | | | 5 <- tramp-make-tramp-file-name: "/plink:ford:/root/"
> >>
> >> I have no idea, what prevents `tramp-drop-volume-letter' to be called.
My crystal ball says that your 24.3.50 snapshot was bootstrapped on
MS-Windows, or at least Tramp was compiled on Windows. See below.
> > Or maybe it somehow takes the 'identity route?
>
> No.
>
> (tramp-drop-volume-letter "c:/root/")
> => "/root/"
That's not the same, because the call to tramp-drop-volume-letter in
tramp-sh-handle-expand-file-name could still be expanded to 'identity'
(= nothing) by the byte compiler when tramp-sh.elc was compiled. And
indeed, disassembling tramp-sh-handle-expand-file-name from
tramp-sh.elc provided in the Emacs 24.3 tarball shows this:
336 varbind default-directory
337 varbind directory-sep-char
339 constant tramp-make-tramp-file-name
340 varref method
341 varref user
342 varref host
344 constant tramp-run-real-handler
345 constant expand-file-name
346 varref localname
348 list1
349 call 2
350 varref hop
352 call 5
353 unbind 8
355 return
"Look, ma: no tramp-drop-volume-letter!"
If I now byte-compile tramp-sh.el on MS-Windows, I get this
disassembly:
336 varbind default-directory
337 varbind directory-sep-char
339 constant tramp-make-tramp-file-name
340 varref method
341 varref user
342 varref host
344 constant tramp-drop-volume-letter <<<<<<<<<<<<<<<<<<<<<<<<
345 constant tramp-run-real-handler
346 constant expand-file-name
347 varref localname
349 list1
350 call 2
351 call 1
352 varref hop
354 call 5
355 unbind 8
357 return
(And, btw, the .elc file I get is 50KB smaller than the one in the
tarball -- why?)
If I compile tramp-sh.el on GNU/Linux with the latest trunk, I still
don't see tramp-drop-volume-letter in the disassembly of
tramp-sh-handle-expand-file-name. So the problem is still there in
the current trunk. By contrast, if I compile tramp-sh.el with Emacs
24.2, I do see the call to tramp-drop-volume-letter in the
disassembly.
So, somehow, compiling tramp-sh.el on Unix replaces the call to
tramp-drop-volume-letter with nothing. Perhaps the condition, viz.
(defalias 'tramp-drop-volume-letter
(if (memq system-type '(cygwin windows-nt)) <<<<<<<<<<<<<<<<<<<
(lambda (name)
"Cut off unnecessary drive letter from file NAME.
The functions `tramp-*-handle-expand-file-name' call `expand-file-name'
locally on a remote file name. When the local system is a W32 system
but the remote system is Unix, this introduces a superfluous drive
letter into the file name. This function removes it."
(save-match-data
(if (string-match "\\`[a-zA-Z]:/" name)
(replace-match "/" nil t name)
name)))
'identity))
is expanded at byte-compile time, instead of at run time?
And I guess whatever has this effect was introduced between the
release of 24.2 and 24.3 (which was the trunk until 24.2 release).
next prev parent reply other threads:[~2013-03-24 16:10 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-22 15:17 bug#14030: 24.3; expand-file-name expands remote file name on Windows incorrectly Vida Gábor
2013-03-22 16:02 ` Eli Zaretskii
2013-03-23 12:13 ` Michael Albinus
2013-03-23 20:23 ` Eli Zaretskii
2013-03-23 21:37 ` Michael Albinus
2013-03-24 16:10 ` Eli Zaretskii [this message]
2013-03-24 17:21 ` Michael Albinus
2013-03-24 17:35 ` Eli Zaretskii
2013-03-24 18:32 ` Michael Albinus
2013-03-24 19:23 ` Eli Zaretskii
2013-03-25 8:36 ` Michael Albinus
2013-03-25 9:01 ` Eli Zaretskii
2013-03-25 9:20 ` Michael Albinus
2013-03-25 9:55 ` Eli Zaretskii
2013-03-25 10:06 ` Michael Albinus
2013-03-27 0:11 ` Wolfgang Jenkner
2013-03-27 2:24 ` Stefan Monnier
2013-03-27 6:59 ` Eli Zaretskii
2013-03-26 0:35 ` Wolfgang Jenkner
2013-03-25 14:28 ` Stefan Monnier
2013-03-25 18:49 ` Stefan Monnier
2013-03-25 19:28 ` Michael Albinus
2013-03-25 20:32 ` Eli Zaretskii
2013-03-26 0:23 ` Stefan Monnier
2013-03-26 6:11 ` Eli Zaretskii
2013-03-24 16:11 ` Eli Zaretskii
2013-03-25 8:53 ` Vida Gábor
2020-09-09 13:56 ` Lars Ingebrigtsen
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=83r4j43hiz.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=14030@debbugs.gnu.org \
--cc=michael.albinus@gmx.de \
--cc=vidagabor@gmail.com \
/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.