From: Tim <li...@he...> - 2002-05-30 20:41:02
|
Enter your bug report in this message, including as much detail as you possibly can about the problem, what you did to cause it and what the local and remote machines are. If you can give a simple set of instructions to make this bug happen reliably, please include those. Thank you for helping kill bugs in TRAMP. --bug report follows this line-- I am using "cygwin-mount.el" from Klaus Berndl <be...@sd...> to handle unix style paths under NT. When I try to use tramp, cygwin-mount seems to confuse it, causing the following error: tramp: Finding command to check if file exists tramp-find-file-exists-command: Couldn't find command to check if file exists. The tramp debug buffer looks like this: # Finding command to check if file exists $ ls -d /cygwin/ 2>/dev/null; echo tramp_exit_status $? tramp_exit_status 1 $ test -e /cygwin/ 2>/dev/null; echo tramp_exit_status $? tramp_exit_status 1 $ /bin/test -e /cygwin/ 2>/dev/null; echo tramp_exit_status $? tramp_exit_status 127 $ /usr/bin/test -e /cygwin/ 2>/dev/null; echo tramp_exit_status $? tramp_exit_status 1 As you can see, somehow tramp is getting the value "/cygwin/" as the base directory. I tried to debug this myself, but couldn't figure out what was going on. Guess I'm not enough of a Lisp weenie. To duplicate: 1. Load "cygwin-mount.el" (http://www.emacswiki.org/elisp/cygwin-mount.el) 2. attempt to open a file using tramp. By the way, my mount table under cygwin looks as follows. Not too out of the ordinary, I don't think: C:\cygwin\bin on /usr/bin type system (binmode) C:\cygwin\lib on /usr/lib type system (binmode) C:\cygwin on / type system (binmode) c: on /c type user (textmode) d: on /d type user (textmode) Thanks, Tim Emacs : GNU Emacs 21.2.1 (i386-msvc-nt5.0.2195) of 2002-03-19 on buffy Package: tramp ($Id: tramp.el,v 2.97 2002/04/14 15:52:38 kaig Exp $) current state: ============== (setq tramp-ls-command nil tramp-test-groks-nt nil tramp-file-exists-command nil tramp-current-multi-method nil tramp-current-method nil tramp-current-user nil tramp-current-host nil tramp-auto-save-directory nil tramp-default-method "tm" tramp-rsh-end-of-line "\n" tramp-remote-path '("/bin" "/usr/bin" "/usr/sbin" "/usr/local/bin" "/usr/ccs/bin" "/local/bin" "/local/freeware/bin" "/local/gnu/bin" "/usr/freeware/bin" "/usr/pkg/bin" "/usr/contrib/bin") tramp-login-prompt-regexp ".*ogin: *$" tramp-password-prompt-regexp "^.*\\([pP]assword\\|passphrase.*\\): |
From: Kai.Grossjohann@CS.Uni-Dortmund.DE (K. ) - 2002-05-31 08:42:33
|
Tim <li...@he...> writes: > I am using "cygwin-mount.el" from Klaus Berndl <be...@sd...> to > handle unix style paths under NT. > > When I try to use tramp, cygwin-mount seems to confuse it, causing the > following error: > > tramp: Finding command to check if file exists > tramp-find-file-exists-command: Couldn't find command to check if > file exists. > > The tramp debug buffer looks like this: > > # Finding command to check if file exists > $ ls -d /cygwin/ 2>/dev/null; echo tramp_exit_status $? > tramp_exit_status 1 Where does that string come from? Hm. It's really strange. Before I can do anything about this, I've got to find out where the string comes from and possibly how to change this. One piece of code which is executed is (tramp-make-tramp-file-name nil "scp" "user" "host" "/") Instead of scp, put in your real method name. Instead of user and host, put in the right values for the file that you wanted to access. You can eval this expression via M-x ielm RET and then entering it at the prompt. What happens? Another piece of code is tramp-handle-file-exists-p. Hm. Yes. I think you should do this: position point inside the defun of tramp-find-file-exists-command and type M-x edebug-defun RET. Then position point inside the defun of tramp-handle-file-exists-p and do the same. Then do C-x C-f /[method/user@host]/path/to/file RET and use the debugger to single-step the process. You can use SPC for single-stepping. At each step, the echo area (last line) will show the result of evaluating that expression (for example, hitting SPC when point is after (+ 3 4) will show 7 in the echo area). I think you can get some idea what the code is supposed to be doing. But at the very least, you can see where does "/cygwin/" show up. Post your findings. Fellow Tramp users: some of you have been using cygwin-mount.el -- can you help? kai -- Silence is foo! |
From: Kai.Grossjohann@CS.Uni-Dortmund.DE (K. ) - 2002-05-31 08:44:45
|
Another node: I won't be available in the next couple of days due to a family festivity. So my replies might take longer. kai -- Silence is foo! |
From: <li...@he...> - 2002-05-31 20:10:54
|
Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai\ writes: > Another piece of code is tramp-handle-file-exists-p. Hm. Yes. I > think you should do this: position point inside the defun of > tramp-find-file-exists-command and type M-x edebug-defun RET. Then > position point inside the defun of tramp-handle-file-exists-p and do > the same. Then do C-x C-f /[method/user@host]/path/to/file RET and > use the debugger to single-step the process. So it looks like "tramp-handle-file-exists-p" calls "tramp-handle-expand-file-name" with the tramp file name, say "/[user@host]file". This translates the filename portion into the Cygwin base, i.e. "c:/cygwin/home/user/file". This function then hands the root directory "/" off to "tramp-run-real-handler" with a "expand-file-name" operation. That's when I get confused. It looks like there should be a call to a cygwin mount hook function (much as there used to be calls to efs or ange-ftp ones). Regardless, it comes back from there with "/" expanded to "/cygwin". It looks like Kai is right. Between tramp and cygwin-mount, there needs to be some way of knowing which file is local and which remote, and which to "cygwin'ize". Hopefully between the two, it can work. Tim |
From: Kai.Grossjohann@CS.Uni-Dortmund.DE (K. ) - 2002-06-02 08:45:20
|
<li...@he...> writes: > So it looks like "tramp-handle-file-exists-p" calls > "tramp-handle-expand-file-name" with the tramp file name, say > "/[user@host]file". > > This translates the filename portion into the Cygwin base, > i.e. "c:/cygwin/home/user/file". I think it shouldn't do that, as the host is running Unix, not Cygwin, right? So why does tramp-handle-expand-file-name change file into c:/cygwin/home/user/file? Ah. tramp-handle-expand-file-name runs the real expand-file-name operation. I guess that this does the wrong thing. Is this correct? Maybe tramp-handle-expand-file-name should do all the hard work itself, rather than relying on the regular function. In fact, it seems that by reusing existing filename operations, I get into trouble. So I think that in the long run I will need to just reimplement all the functions myself. It's a pity, though. kai -- Silence is foo! |