all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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).





  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.