Subject: bug#9311: 23.3.50; Can't load some byte-compiled files on Windows

From: Michael Albinus <[email-masked]>
Date: Tue, 30 Aug 2011 17:26:38 +0200

Stefan Monnier <[email-masked]> writes:

>> In the discussion of bug#5303 there was the proposal to remove the
>> volume letter from `tramp-completion-file-name-regexp'. This was
>> postponed, because we were in pretest phase.
>> But we haven't done it after that release.
>> Shall we try it now? Somehow, we are still before a pretest ...
>
> Coulf you post a sample patch, together with a discussion of the impact?

Sometimes (I cannot reproduce it persistently), there are situations
that `expand-file-name' prefixes a remote file name by a volume
letter. Happens on win32 only, of course, and confuses Tramp.

In order to let Tramp continue its work, we have accepted remote file
names with a leading volume letter, which are removed by Tramp
then. This worked almost OK, except such cases as discussed in the
current (and earlier) bug reports.

Eli did suggest to remove this hack from Tramp, and to see during the
test where the unexpected volume letter prefix happens. Problems shall
be fixed there.

The following patch does it, in its final version there could be some
additional minor polishing.

--8<---------------cut here---------------start------------->8---
*** /home/albinus/src/tramp/lisp/tramp.el.~2.843~	2011-08-30 17:10:16.058151065 +0200
--- /home/albinus/src/tramp/lisp/tramp.el	2011-08-30 17:07:38.841961797 +0200
***************
*** 861,873 ****
  Also see `tramp-file-name-structure'.")
  
  ;;;###autoload
! (defconst tramp-root-regexp
!   (if (memq system-type '(cygwin windows-nt))
!       "\\`\\([a-zA-Z]:\\)?/"
!     "\\`/")
!   "Beginning of an incomplete Tramp file name.
! Usually, it is just \"\\\\`/\".  On W32 systems, there might be a
! volume letter, which will be removed by `tramp-drop-volume-letter'.")
  
  ;;;###autoload
  (defconst tramp-completion-file-name-regexp-unified
--- 861,868 ----
  Also see `tramp-file-name-structure'.")
  
  ;;;###autoload
! (defconst tramp-root-regexp "\\`/"
!   "Beginning of an incomplete Tramp file name.")
  
  ;;;###autoload
  (defconst tramp-completion-file-name-regexp-unified
***************
*** 1503,1509 ****
  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 tramp-root-regexp name)
  	      (replace-match "/" nil t name)
  	    name)))
  
--- 1498,1504 ----
  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)))
  
--8<---------------cut here---------------end--------------->8---

>         Stefan

Best regards, Michael.