annotate lisp/net/tramp-sh.el @ 112451:98ad7c9e56a3

gnus-html.el (gnus-html-image-fetched): Don't kill the temporary buffer after being called. It's apparently being killed by url.el, and killing it made point move to end-of-buffer in a random buffer. shr.el (shr-image-fetched): Ditto. shr.el (shr-image-fetched): Avoid having point move in the article buffer. gnus-html.el (gnus-html-image-fetched): Kill the buffer anyway, and fix the bug in url-http.el instead. shr.el (shr-image-fetched): Ditto. gravatar.el (gravatar-retrieve): Be silent when retrieving. gnus-gravatar.el (gnus-gravatar-insert): Don't move point around in the article buffer. (gnus-gravatar-insert): Use blank space from the current buffer to avoid breaking text properties. This makes X-Sent updating work again. gnus-art.el (gnus-article-read-summary-keys): Don't call disabled commands.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Mon, 24 Jan 2011 04:10:19 +0000
parents c29a17e02c5b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1 ;;; tramp-sh.el --- Tramp access functions for (s)sh-like connections
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2
112357
c29a17e02c5b Add missing copyright years.
Michael Albinus <michael.albinus@gmx.de>
parents: 112284
diff changeset
3 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
c29a17e02c5b Add missing copyright years.
Michael Albinus <michael.albinus@gmx.de>
parents: 112284
diff changeset
4 ;; 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
6 ;; (copyright statements below in code to be updated with the above notice)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
7
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
8 ;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
9 ;; Michael Albinus <michael.albinus@gmx.de>
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
10 ;; Keywords: comm, processes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
11 ;; Package: tramp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
12
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
13 ;; This file is part of GNU Emacs.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
14
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
15 ;; GNU Emacs is free software: you can redistribute it and/or modify
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
16 ;; it under the terms of the GNU General Public License as published by
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
17 ;; the Free Software Foundation, either version 3 of the License, or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
18 ;; (at your option) any later version.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
19
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
20 ;; GNU Emacs is distributed in the hope that it will be useful,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
23 ;; GNU General Public License for more details.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
24
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
25 ;; You should have received a copy of the GNU General Public License
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
26 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
27
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
28 ;;; Code:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
29
110374
932697ced7aa * net/tramp-compat.el (tramp-compat-with-temp-message)
Michael Albinus <michael.albinus@gmx.de>
parents: 110321
diff changeset
30 (eval-when-compile (require 'cl)) ; ignore-errors
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
31 (require 'tramp)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
32 (require 'shell)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
33
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
34 ;; Pacify byte-compiler. The function is needed on XEmacs only. I'm
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
35 ;; not sure at all that this is the right way to do it, but let's hope
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
36 ;; it works for now, and wait for a guru to point out the Right Way to
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
37 ;; achieve this.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
38 ;;(eval-when-compile
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
39 ;; (unless (fboundp 'dired-insert-set-properties)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
40 ;; (fset 'dired-insert-set-properties 'ignore)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
41 ;; Gerd suggests this:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
42 (eval-when-compile (require 'dired))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
43 ;; Note that dired is required at run-time, too, when it is needed.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
44 ;; It is only needed on XEmacs for the function
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
45 ;; `dired-insert-set-properties'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
46
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
47 (defcustom tramp-inline-compress-start-size 4096
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
48 "*The minimum size of compressing where inline transfer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
49 When inline transfer, compress transfered data of file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
50 whose size is this value or above (up to `tramp-copy-size-limit').
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
51 If it is nil, no compression at all will be applied."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
52 :group 'tramp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
53 :type '(choice (const nil) integer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
54
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
55 (defcustom tramp-copy-size-limit 10240
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
56 "*The maximum file size where inline copying is preferred over an out-of-the-band copy.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
57 If it is nil, inline out-of-the-band copy will be used without a check."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
58 :group 'tramp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
59 :type '(choice (const nil) integer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
60
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
61 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
62 (defcustom tramp-terminal-type "dumb"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
63 "*Value of TERM environment variable for logging in to remote host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
64 Because Tramp wants to parse the output of the remote shell, it is easily
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
65 confused by ANSI color escape sequences and suchlike. Often, shell init
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
66 files conditionalize this setup based on the TERM environment variable."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
67 :group 'tramp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
68 :type 'string)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
69
111079
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
70 ;; ksh on OpenBSD 4.5 requires, that $PS1 contains a `#' character for
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
71 ;; root users. It uses the `$' character for other users. In order
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
72 ;; to guarantee a proper prompt, we use "#$" for the prompt.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
73
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
74 (defvar tramp-end-of-output
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
75 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
76 "///%s#$"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
77 (md5 (concat (prin1-to-string process-environment) (current-time-string))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
78 "String used to recognize end of output.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
79 The '$' character at the end is quoted; the string cannot be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
80 detected as prompt when being sent on echoing hosts, therefore.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
81
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
82 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
83 (defconst tramp-initial-end-of-output "#$ "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
84 "Prompt when establishing a connection.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
85
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
86 ;; Initialize `tramp-methods' with the supported methods.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
87 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
88 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
89 '("rcp"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
90 (tramp-login-program "rsh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
91 (tramp-login-args (("%h") ("-l" "%u")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
92 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
93 (tramp-copy-program "rcp")
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
94 (tramp-copy-args (("%k" "-p") ("-r")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
95 (tramp-copy-keep-date t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
96 (tramp-copy-recursive t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
97 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
98 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
99 '("remcp"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
100 (tramp-login-program "remsh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
101 (tramp-login-args (("%h") ("-l" "%u")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
102 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
103 (tramp-copy-program "rcp")
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
104 (tramp-copy-args (("%k" "-p")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
105 (tramp-copy-keep-date t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
106 ;;;###tramp-autoload
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
107 (add-to-list 'tramp-methods
111647
7d109d8678c8 Sync with Tramp 2.2.0.
Michael Albinus <michael.albinus@gmx.de>
parents: 111525
diff changeset
108 '("scp"
7d109d8678c8 Sync with Tramp 2.2.0.
Michael Albinus <michael.albinus@gmx.de>
parents: 111525
diff changeset
109 (tramp-login-program "ssh")
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
110 (tramp-login-args (("-l" "%u") ("-p" "%p") ("-e" "none") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
111 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
112 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
113 (tramp-copy-program "scp")
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
114 (tramp-copy-args (("-P" "%p") ("%k" "-p") ("-q") ("-r")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
115 (tramp-copy-keep-date t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
116 (tramp-copy-recursive t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
117 (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
118 ("-o" "UserKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
119 ("-o" "StrictHostKeyChecking=no")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
120 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
121 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
122 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
123 '("scp1"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
124 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
125 (tramp-login-args (("-l" "%u") ("-p" "%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
126 ("-1") ("-e" "none") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
127 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
128 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
129 (tramp-copy-program "scp")
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
130 (tramp-copy-args (("-1") ("-P" "%p") ("%k" "-p") ("-q") ("-r")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
131 (tramp-copy-keep-date t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
132 (tramp-copy-recursive t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
133 (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
134 ("-o" "UserKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
135 ("-o" "StrictHostKeyChecking=no")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
136 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
137 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
138 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
139 '("scp2"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
140 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
141 (tramp-login-args (("-l" "%u") ("-p" "%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
142 ("-2") ("-e" "none") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
143 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
144 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
145 (tramp-copy-program "scp")
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
146 (tramp-copy-args (("-2") ("-P" "%p") ("%k" "-p") ("-q") ("-r")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
147 (tramp-copy-keep-date t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
148 (tramp-copy-recursive t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
149 (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
150 ("-o" "UserKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
151 ("-o" "StrictHostKeyChecking=no")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
152 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
153 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
154 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
155 '("scpc"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
156 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
157 (tramp-login-args (("-l" "%u") ("-p" "%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
158 ("-o" "ControlPath=%t.%%r@%%h:%%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
159 ("-o" "ControlMaster=yes")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
160 ("-e" "none") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
161 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
162 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
163 (tramp-copy-program "scp")
112042
c92bc8723d4b * net/tramp-sh.el (tramp-methods): Add recursive options to "scpc"
Michael Albinus <michael.albinus@gmx.de>
parents: 112032
diff changeset
164 (tramp-copy-args (("-P" "%p") ("%k" "-p") ("-q") ("-r")
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
165 ("-o" "ControlPath=%t.%%r@%%h:%%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
166 ("-o" "ControlMaster=auto")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
167 (tramp-copy-keep-date t)
112042
c92bc8723d4b * net/tramp-sh.el (tramp-methods): Add recursive options to "scpc"
Michael Albinus <michael.albinus@gmx.de>
parents: 112032
diff changeset
168 (tramp-copy-recursive t)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
169 (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
170 ("-o" "UserKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
171 ("-o" "StrictHostKeyChecking=no")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
172 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
173 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
174 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
175 '("scpx"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
176 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
177 (tramp-login-args (("-l" "%u") ("-p" "%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
178 ("-e" "none") ("-t" "-t")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
179 ("%h") ("/bin/sh")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
180 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
181 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
182 (tramp-copy-program "scp")
112042
c92bc8723d4b * net/tramp-sh.el (tramp-methods): Add recursive options to "scpc"
Michael Albinus <michael.albinus@gmx.de>
parents: 112032
diff changeset
183 (tramp-copy-args (("-P" "%p") ("%k" "-p") ("-q") ("-r")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
184 (tramp-copy-keep-date t)
112042
c92bc8723d4b * net/tramp-sh.el (tramp-methods): Add recursive options to "scpc"
Michael Albinus <michael.albinus@gmx.de>
parents: 112032
diff changeset
185 (tramp-copy-recursive t)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
186 (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
187 ("-o" "UserKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
188 ("-o" "StrictHostKeyChecking=no")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
189 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
190 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
191 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
192 '("sftp"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
193 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
194 (tramp-login-args (("-l" "%u") ("-p" "%p") ("-e" "none") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
195 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
196 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
197 (tramp-copy-program "sftp")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
198 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
199 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
200 '("rsync"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
201 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
202 (tramp-login-args (("-l" "%u") ("-p" "%p") ("-e" "none") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
203 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
204 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
205 (tramp-copy-program "rsync")
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
206 (tramp-copy-args (("-e" "ssh") ("%k" "-t") ("-r")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
207 (tramp-copy-keep-date t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
208 (tramp-copy-keep-tmpfile t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
209 (tramp-copy-recursive t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
210 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
211 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
212 `("rsyncc"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
213 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
214 (tramp-login-args (("-l" "%u") ("-p" "%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
215 ("-o" "ControlPath=%t.%%r@%%h:%%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
216 ("-o" "ControlMaster=yes")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
217 ("-e" "none") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
218 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
219 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
220 (tramp-copy-program "rsync")
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
221 (tramp-copy-args (("%k" "-t") ("-r")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
222 (tramp-copy-env (("RSYNC_RSH")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
223 (,(concat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
224 "ssh"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
225 " -o ControlPath=%t.%%r@%%h:%%p"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
226 " -o ControlMaster=auto"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
227 (tramp-copy-keep-date t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
228 (tramp-copy-keep-tmpfile t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
229 (tramp-copy-recursive t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
230 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
231 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
232 '("rsh"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
233 (tramp-login-program "rsh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
234 (tramp-login-args (("%h") ("-l" "%u")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
235 (tramp-remote-sh "/bin/sh")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
236 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
237 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
238 '("remsh"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
239 (tramp-login-program "remsh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
240 (tramp-login-args (("%h") ("-l" "%u")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
241 (tramp-remote-sh "/bin/sh")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
242 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
243 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
244 '("ssh"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
245 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
246 (tramp-login-args (("-l" "%u") ("-p" "%p") ("-e" "none") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
247 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
248 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
249 (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
250 ("-o" "UserKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
251 ("-o" "StrictHostKeyChecking=no")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
252 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
253 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
254 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
255 '("ssh1"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
256 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
257 (tramp-login-args (("-l" "%u") ("-p" "%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
258 ("-1") ("-e" "none") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
259 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
260 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
261 (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
262 ("-o" "UserKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
263 ("-o" "StrictHostKeyChecking=no")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
264 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
265 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
266 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
267 '("ssh2"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
268 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
269 (tramp-login-args (("-l" "%u") ("-p" "%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
270 ("-2") ("-e" "none") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
271 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
272 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
273 (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
274 ("-o" "UserKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
275 ("-o" "StrictHostKeyChecking=no")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
276 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
277 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
278 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
279 '("sshx"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
280 (tramp-login-program "ssh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
281 (tramp-login-args (("-l" "%u") ("-p" "%p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
282 ("-e" "none") ("-t" "-t")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
283 ("%h") ("/bin/sh")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
284 (tramp-async-args (("-q")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
285 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
286 (tramp-gw-args (("-o" "GlobalKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
287 ("-o" "UserKnownHostsFile=/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
288 ("-o" "StrictHostKeyChecking=no")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
289 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
290 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
291 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
292 '("telnet"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
293 (tramp-login-program "telnet")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
294 (tramp-login-args (("%h") ("%p")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
295 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
296 (tramp-default-port 23)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
297 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
298 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
299 '("su"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
300 (tramp-login-program "su")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
301 (tramp-login-args (("-") ("%u")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
302 (tramp-remote-sh "/bin/sh")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
303 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
304 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
305 '("sudo"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
306 (tramp-login-program "sudo")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
307 (tramp-login-args (("-u" "%u") ("-s") ("-H") ("-p" "Password:")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
308 (tramp-remote-sh "/bin/sh")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
309 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
310 (add-to-list 'tramp-methods
111964
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
311 '("ksu"
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
312 (tramp-login-program "ksu")
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
313 (tramp-login-args (("%u") ("-q")))
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
314 (tramp-remote-sh "/bin/sh")))
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
315 ;;;###tramp-autoload
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
316 (add-to-list 'tramp-methods
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
317 '("krlogin"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
318 (tramp-login-program "krlogin")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
319 (tramp-login-args (("%h") ("-l" "%u") ("-x")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
320 (tramp-remote-sh "/bin/sh")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
321 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
322 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
323 '("plink"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
324 (tramp-login-program "plink")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
325 (tramp-login-args (("-l" "%u") ("-P" "%p") ("-ssh") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
326 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
327 (tramp-password-end-of-line "xy") ;see docstring for "xy"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
328 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
329 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
330 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
331 '("plink1"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
332 (tramp-login-program "plink")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
333 (tramp-login-args (("-l" "%u") ("-P" "%p") ("-1" "-ssh") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
334 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
335 (tramp-password-end-of-line "xy") ;see docstring for "xy"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
336 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
337 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
338 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
339 `("plinkx"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
340 (tramp-login-program "plink")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
341 ;; ("%h") must be a single element, see
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
342 ;; `tramp-compute-multi-hops'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
343 (tramp-login-args (("-load") ("%h") ("-t")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
344 (,(format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
345 "env 'TERM=%s' 'PROMPT_COMMAND=' 'PS1=%s'"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
346 tramp-terminal-type
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
347 tramp-initial-end-of-output))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
348 ("/bin/sh")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
349 (tramp-remote-sh "/bin/sh")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
350 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
351 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
352 '("pscp"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
353 (tramp-login-program "plink")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
354 (tramp-login-args (("-l" "%u") ("-P" "%p") ("-ssh") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
355 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
356 (tramp-copy-program "pscp")
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
357 (tramp-copy-args (("-P" "%p") ("-scp") ("%k" "-p")
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
358 ("-q") ("-r")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
359 (tramp-copy-keep-date t)
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
360 (tramp-copy-recursive t)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
361 (tramp-password-end-of-line "xy") ;see docstring for "xy"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
362 (tramp-default-port 22)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
363 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
364 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
365 '("psftp"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
366 (tramp-login-program "plink")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
367 (tramp-login-args (("-l" "%u") ("-P" "%p") ("-ssh") ("%h")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
368 (tramp-remote-sh "/bin/sh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
369 (tramp-copy-program "pscp")
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
370 (tramp-copy-args (("-P" "%p") ("-sftp") ("%k" "-p")
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
371 ("-q") ("-r")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
372 (tramp-copy-keep-date t)
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
373 (tramp-copy-recursive t)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
374 (tramp-password-end-of-line "xy"))) ;see docstring for "xy"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
375 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
376 (add-to-list 'tramp-methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
377 '("fcp"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
378 (tramp-login-program "fsh")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
379 (tramp-login-args (("%h") ("-l" "%u") ("sh" "-i")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
380 (tramp-remote-sh "/bin/sh -i")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
381 (tramp-copy-program "fcp")
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
382 (tramp-copy-args (("%k" "-p")))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
383 (tramp-copy-keep-date t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
384
112032
209df3f0dcc6 * net/tramp.el (tramp-default-method-alist)
Michael Albinus <michael.albinus@gmx.de>
parents: 112020
diff changeset
385 ;;;###tramp-autoload
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
386 (add-to-list 'tramp-default-method-alist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
387 `(,tramp-local-host-regexp "\\`root\\'" "su"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
388
112032
209df3f0dcc6 * net/tramp.el (tramp-default-method-alist)
Michael Albinus <michael.albinus@gmx.de>
parents: 112020
diff changeset
389 ;;;###tramp-autoload
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
390 (add-to-list 'tramp-default-user-alist
111964
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
391 `(,(concat "\\`" (regexp-opt '("su" "sudo" "ksu")) "\\'")
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
392 nil "root"))
112020
9780afa403a4 * net/tramp.el (tramp-default-user-alist): Do not add "ssh" based
Michael Albinus <michael.albinus@gmx.de>
parents: 111964
diff changeset
393 ;; Do not add "ssh" based methods, otherwise ~/.ssh/config would be ignored.
112032
209df3f0dcc6 * net/tramp.el (tramp-default-method-alist)
Michael Albinus <michael.albinus@gmx.de>
parents: 112020
diff changeset
394 ;;;###tramp-autoload
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
395 (add-to-list 'tramp-default-user-alist
111964
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
396 `(,(concat
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
397 "\\`"
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
398 (regexp-opt
112020
9780afa403a4 * net/tramp.el (tramp-default-user-alist): Do not add "ssh" based
Michael Albinus <michael.albinus@gmx.de>
parents: 111964
diff changeset
399 '("rcp" "remcp" "rsh" "telnet" "krlogin"
9780afa403a4 * net/tramp.el (tramp-default-user-alist): Do not add "ssh" based
Michael Albinus <michael.albinus@gmx.de>
parents: 111964
diff changeset
400 "plink" "plink1" "pscp" "psftp" "fcp"))
111964
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
401 "\\'")
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
402 nil ,(user-login-name)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
403
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
404 (defconst tramp-completion-function-alist-rsh
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
405 '((tramp-parse-rhosts "/etc/hosts.equiv")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
406 (tramp-parse-rhosts "~/.rhosts"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
407 "Default list of (FUNCTION FILE) pairs to be examined for rsh methods.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
408
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
409 (defconst tramp-completion-function-alist-ssh
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
410 '((tramp-parse-rhosts "/etc/hosts.equiv")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
411 (tramp-parse-rhosts "/etc/shosts.equiv")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
412 (tramp-parse-shosts "/etc/ssh_known_hosts")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
413 (tramp-parse-sconfig "/etc/ssh_config")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
414 (tramp-parse-shostkeys "/etc/ssh2/hostkeys")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
415 (tramp-parse-sknownhosts "/etc/ssh2/knownhosts")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
416 (tramp-parse-rhosts "~/.rhosts")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
417 (tramp-parse-rhosts "~/.shosts")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
418 (tramp-parse-shosts "~/.ssh/known_hosts")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
419 (tramp-parse-sconfig "~/.ssh/config")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
420 (tramp-parse-shostkeys "~/.ssh2/hostkeys")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
421 (tramp-parse-sknownhosts "~/.ssh2/knownhosts"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
422 "Default list of (FUNCTION FILE) pairs to be examined for ssh methods.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
423
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
424 (defconst tramp-completion-function-alist-telnet
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
425 '((tramp-parse-hosts "/etc/hosts"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
426 "Default list of (FUNCTION FILE) pairs to be examined for telnet methods.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
427
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
428 (defconst tramp-completion-function-alist-su
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
429 '((tramp-parse-passwd "/etc/passwd"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
430 "Default list of (FUNCTION FILE) pairs to be examined for su methods.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
431
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
432 (defconst tramp-completion-function-alist-putty
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
433 '((tramp-parse-putty
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
434 "HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\Sessions"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
435 "Default list of (FUNCTION REGISTRY) pairs to be examined for putty methods.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
436
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
437 (tramp-set-completion-function "rcp" tramp-completion-function-alist-rsh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
438 (tramp-set-completion-function "remcp" tramp-completion-function-alist-rsh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
439 (tramp-set-completion-function "scp" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
440 (tramp-set-completion-function "scp1" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
441 (tramp-set-completion-function "scp2" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
442 (tramp-set-completion-function "scpc" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
443 (tramp-set-completion-function "scpx" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
444 (tramp-set-completion-function "sftp" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
445 (tramp-set-completion-function "rsync" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
446 (tramp-set-completion-function "rsyncc" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
447 (tramp-set-completion-function "rsh" tramp-completion-function-alist-rsh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
448 (tramp-set-completion-function "remsh" tramp-completion-function-alist-rsh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
449 (tramp-set-completion-function "ssh" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
450 (tramp-set-completion-function "ssh1" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
451 (tramp-set-completion-function "ssh2" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
452 (tramp-set-completion-function "ssh1_old" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
453 (tramp-set-completion-function "ssh2_old" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
454 (tramp-set-completion-function "sshx" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
455 (tramp-set-completion-function "telnet" tramp-completion-function-alist-telnet)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
456 (tramp-set-completion-function "su" tramp-completion-function-alist-su)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
457 (tramp-set-completion-function "sudo" tramp-completion-function-alist-su)
111964
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
458 (tramp-set-completion-function "ksu" tramp-completion-function-alist-su)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
459 (tramp-set-completion-function "krlogin" tramp-completion-function-alist-rsh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
460 (tramp-set-completion-function "plink" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
461 (tramp-set-completion-function "plink1" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
462 (tramp-set-completion-function "plinkx" tramp-completion-function-alist-putty)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
463 (tramp-set-completion-function "pscp" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
464 (tramp-set-completion-function "fcp" tramp-completion-function-alist-ssh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
465
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
466 ;; "getconf PATH" yields:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
467 ;; HP-UX: /usr/bin:/usr/ccs/bin:/opt/ansic/bin:/opt/langtools/bin:/opt/fortran/bin
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
468 ;; Solaris: /usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
469 ;; GNU/Linux (Debian, Suse): /bin:/usr/bin
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
470 ;; FreeBSD: /usr/bin:/bin:/usr/sbin:/sbin: - beware trailing ":"!
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
471 ;; IRIX64: /usr/bin
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
472 (defcustom tramp-remote-path
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
473 '(tramp-default-remote-path "/usr/sbin" "/usr/local/bin"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
474 "/local/bin" "/local/freeware/bin" "/local/gnu/bin"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
475 "/usr/freeware/bin" "/usr/pkg/bin" "/usr/contrib/bin")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
476 "*List of directories to search for executables on remote host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
477 For every remote host, this variable will be set buffer local,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
478 keeping the list of existing directories on that host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
479
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
480 You can use `~' in this list, but when searching for a shell which groks
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
481 tilde expansion, all directory names starting with `~' will be ignored.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
482
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
483 `Default Directories' represent the list of directories given by
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
484 the command \"getconf PATH\". It is recommended to use this
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
485 entry on top of this list, because these are the default
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
486 directories for POSIX compatible commands.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
487
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
488 `Private Directories' are the settings of the $PATH environment,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
489 as given in your `~/.profile'."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
490 :group 'tramp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
491 :type '(repeat (choice
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
492 (const :tag "Default Directories" tramp-default-remote-path)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
493 (const :tag "Private Directories" tramp-own-remote-path)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
494 (string :tag "Directory"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
495
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
496 (defcustom tramp-remote-process-environment
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
497 `("HISTFILE=$HOME/.tramp_history" "HISTSIZE=1" "LC_ALL=C"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
498 ,(format "TERM=%s" tramp-terminal-type)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
499 "EMACS=t" ;; Deprecated.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
500 ,(format "INSIDE_EMACS='%s,tramp:%s'" emacs-version tramp-version)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
501 "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH="
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
502 "autocorrect=" "correct=")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
503
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
504 "*List of environment variables to be set on the remote host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
505
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
506 Each element should be a string of the form ENVVARNAME=VALUE. An
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
507 entry ENVVARNAME= diables the corresponding environment variable,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
508 which might have been set in the init files like ~/.profile.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
509
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
510 Special handling is applied to the PATH environment, which should
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
511 not be set here. Instead of, it should be set via `tramp-remote-path'."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
512 :group 'tramp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
513 :type '(repeat string))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
514
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
515 (defcustom tramp-sh-extra-args '(("/bash\\'" . "-norc -noprofile"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
516 "*Alist specifying extra arguments to pass to the remote shell.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
517 Entries are (REGEXP . ARGS) where REGEXP is a regular expression
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
518 matching the shell file name and ARGS is a string specifying the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
519 arguments.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
520
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
521 This variable is only used when Tramp needs to start up another shell
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
522 for tilde expansion. The extra arguments should typically prevent the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
523 shell from reading its init file."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
524 :group 'tramp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
525 ;; This might be the wrong way to test whether the widget type
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
526 ;; `alist' is available. Who knows the right way to test it?
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
527 :type (if (get 'alist 'widget-type)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
528 '(alist :key-type string :value-type string)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
529 '(repeat (cons string string))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
530
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
531 (defconst tramp-actions-before-shell
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
532 '((tramp-login-prompt-regexp tramp-action-login)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
533 (tramp-password-prompt-regexp tramp-action-password)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
534 (tramp-wrong-passwd-regexp tramp-action-permission-denied)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
535 (shell-prompt-pattern tramp-action-succeed)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
536 (tramp-shell-prompt-pattern tramp-action-succeed)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
537 (tramp-yesno-prompt-regexp tramp-action-yesno)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
538 (tramp-yn-prompt-regexp tramp-action-yn)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
539 (tramp-terminal-prompt-regexp tramp-action-terminal)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
540 (tramp-process-alive-regexp tramp-action-process-alive))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
541 "List of pattern/action pairs.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
542 Whenever a pattern matches, the corresponding action is performed.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
543 Each item looks like (PATTERN ACTION).
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
544
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
545 The PATTERN should be a symbol, a variable. The value of this
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
546 variable gives the regular expression to search for. Note that the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
547 regexp must match at the end of the buffer, \"\\'\" is implicitly
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
548 appended to it.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
549
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
550 The ACTION should also be a symbol, but a function. When the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
551 corresponding PATTERN matches, the ACTION function is called.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
552
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
553 (defconst tramp-actions-copy-out-of-band
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
554 '((tramp-password-prompt-regexp tramp-action-password)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
555 (tramp-wrong-passwd-regexp tramp-action-permission-denied)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
556 (tramp-copy-failed-regexp tramp-action-permission-denied)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
557 (tramp-process-alive-regexp tramp-action-out-of-band))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
558 "List of pattern/action pairs.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
559 This list is used for copying/renaming with out-of-band methods.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
560
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
561 See `tramp-actions-before-shell' for more info.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
562
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
563 (defconst tramp-uudecode
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
564 "(echo begin 600 /tmp/tramp.$$; tail +2) | uudecode
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
565 cat /tmp/tramp.$$
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
566 rm -f /tmp/tramp.$$"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
567 "Shell function to implement `uudecode' to standard output.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
568 Many systems support `uudecode -o /dev/stdout' or `uudecode -o -'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
569 for this or `uudecode -p', but some systems don't, and for them
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
570 we have this shell function.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
571
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
572 (defconst tramp-perl-file-truename
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
573 "%s -e '
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
574 use File::Spec;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
575 use Cwd \"realpath\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
576
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
577 sub recursive {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
578 my ($volume, @dirs) = @_;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
579 my $real = realpath(File::Spec->catpath(
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
580 $volume, File::Spec->catdir(@dirs), \"\"));
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
581 if ($real) {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
582 my ($vol, $dir) = File::Spec->splitpath($real, 1);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
583 return ($vol, File::Spec->splitdir($dir));
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
584 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
585 else {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
586 my $last = pop(@dirs);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
587 ($volume, @dirs) = recursive($volume, @dirs);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
588 push(@dirs, $last);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
589 return ($volume, @dirs);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
590 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
591 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
592
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
593 $result = realpath($ARGV[0]);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
594 if (!$result) {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
595 my ($vol, $dir) = File::Spec->splitpath($ARGV[0], 1);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
596 ($vol, @dirs) = recursive($vol, File::Spec->splitdir($dir));
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
597
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
598 $result = File::Spec->catpath($vol, File::Spec->catdir(@dirs), \"\");
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
599 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
600
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
601 if ($ARGV[0] =~ /\\/$/) {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
602 $result = $result . \"/\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
603 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
604
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
605 print \"\\\"$result\\\"\\n\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
606 ' \"$1\" 2>/dev/null"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
607 "Perl script to produce output suitable for use with `file-truename'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
608 on the remote file system.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
609 Escape sequence %s is replaced with name of Perl binary.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
610 This string is passed to `format', so percent characters need to be doubled.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
611
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
612 (defconst tramp-perl-file-name-all-completions
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
613 "%s -e 'sub case {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
614 my $str = shift;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
615 if ($ARGV[2]) {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
616 return lc($str);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
617 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
618 else {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
619 return $str;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
620 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
621 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
622 opendir(d, $ARGV[0]) || die(\"$ARGV[0]: $!\\nfail\\n\");
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
623 @files = readdir(d); closedir(d);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
624 foreach $f (@files) {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
625 if (case(substr($f, 0, length($ARGV[1]))) eq case($ARGV[1])) {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
626 if (-d \"$ARGV[0]/$f\") {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
627 print \"$f/\\n\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
628 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
629 else {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
630 print \"$f\\n\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
631 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
632 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
633 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
634 print \"ok\\n\"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
635 ' \"$1\" \"$2\" \"$3\" 2>/dev/null"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
636 "Perl script to produce output suitable for use with
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
637 `file-name-all-completions' on the remote file system. Escape
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
638 sequence %s is replaced with name of Perl binary. This string is
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
639 passed to `format', so percent characters need to be doubled.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
640
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
641 ;; Perl script to implement `file-attributes' in a Lisp `read'able
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
642 ;; output. If you are hacking on this, note that you get *no* output
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
643 ;; unless this spits out a complete line, including the '\n' at the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
644 ;; end.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
645 ;; The device number is returned as "-1", because there will be a virtual
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
646 ;; device number set in `tramp-sh-handle-file-attributes'.
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
647 (defconst tramp-perl-file-attributes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
648 "%s -e '
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
649 @stat = lstat($ARGV[0]);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
650 if (!@stat) {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
651 print \"nil\\n\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
652 exit 0;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
653 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
654 if (($stat[2] & 0170000) == 0120000)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
655 {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
656 $type = readlink($ARGV[0]);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
657 $type = \"\\\"$type\\\"\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
658 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
659 elsif (($stat[2] & 0170000) == 040000)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
660 {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
661 $type = \"t\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
662 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
663 else
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
664 {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
665 $type = \"nil\"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
666 };
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
667 $uid = ($ARGV[1] eq \"integer\") ? $stat[4] : \"\\\"\" . getpwuid($stat[4]) . \"\\\"\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
668 $gid = ($ARGV[1] eq \"integer\") ? $stat[5] : \"\\\"\" . getgrgid($stat[5]) . \"\\\"\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
669 printf(
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
670 \"(%%s %%u %%s %%s (%%u %%u) (%%u %%u) (%%u %%u) %%u.0 %%u t (%%u . %%u) -1)\\n\",
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
671 $type,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
672 $stat[3],
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
673 $uid,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
674 $gid,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
675 $stat[8] >> 16 & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
676 $stat[8] & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
677 $stat[9] >> 16 & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
678 $stat[9] & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
679 $stat[10] >> 16 & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
680 $stat[10] & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
681 $stat[7],
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
682 $stat[2],
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
683 $stat[1] >> 16 & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
684 $stat[1] & 0xffff
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
685 );' \"$1\" \"$2\" 2>/dev/null"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
686 "Perl script to produce output suitable for use with `file-attributes'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
687 on the remote file system.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
688 Escape sequence %s is replaced with name of Perl binary.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
689 This string is passed to `format', so percent characters need to be doubled.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
690
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
691 (defconst tramp-perl-directory-files-and-attributes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
692 "%s -e '
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
693 chdir($ARGV[0]) or printf(\"\\\"Cannot change to $ARGV[0]: $''!''\\\"\\n\"), exit();
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
694 opendir(DIR,\".\") or printf(\"\\\"Cannot open directory $ARGV[0]: $''!''\\\"\\n\"), exit();
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
695 @list = readdir(DIR);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
696 closedir(DIR);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
697 $n = scalar(@list);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
698 printf(\"(\\n\");
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
699 for($i = 0; $i < $n; $i++)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
700 {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
701 $filename = $list[$i];
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
702 @stat = lstat($filename);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
703 if (($stat[2] & 0170000) == 0120000)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
704 {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
705 $type = readlink($filename);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
706 $type = \"\\\"$type\\\"\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
707 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
708 elsif (($stat[2] & 0170000) == 040000)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
709 {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
710 $type = \"t\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
711 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
712 else
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
713 {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
714 $type = \"nil\"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
715 };
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
716 $uid = ($ARGV[1] eq \"integer\") ? $stat[4] : \"\\\"\" . getpwuid($stat[4]) . \"\\\"\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
717 $gid = ($ARGV[1] eq \"integer\") ? $stat[5] : \"\\\"\" . getgrgid($stat[5]) . \"\\\"\";
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
718 printf(
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
719 \"(\\\"%%s\\\" %%s %%u %%s %%s (%%u %%u) (%%u %%u) (%%u %%u) %%u.0 %%u t (%%u . %%u) (%%u . %%u))\\n\",
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
720 $filename,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
721 $type,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
722 $stat[3],
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
723 $uid,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
724 $gid,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
725 $stat[8] >> 16 & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
726 $stat[8] & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
727 $stat[9] >> 16 & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
728 $stat[9] & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
729 $stat[10] >> 16 & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
730 $stat[10] & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
731 $stat[7],
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
732 $stat[2],
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
733 $stat[1] >> 16 & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
734 $stat[1] & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
735 $stat[0] >> 16 & 0xffff,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
736 $stat[0] & 0xffff);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
737 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
738 printf(\")\\n\");' \"$1\" \"$2\" 2>/dev/null"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
739 "Perl script implementing `directory-files-attributes' as Lisp `read'able
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
740 output.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
741 Escape sequence %s is replaced with name of Perl binary.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
742 This string is passed to `format', so percent characters need to be doubled.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
743
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
744 ;; These two use base64 encoding.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
745 (defconst tramp-perl-encode-with-module
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
746 "%s -MMIME::Base64 -0777 -ne 'print encode_base64($_)' 2>/dev/null"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
747 "Perl program to use for encoding a file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
748 Escape sequence %s is replaced with name of Perl binary.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
749 This string is passed to `format', so percent characters need to be doubled.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
750 This implementation requires the MIME::Base64 Perl module to be installed
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
751 on the remote host.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
752
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
753 (defconst tramp-perl-decode-with-module
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
754 "%s -MMIME::Base64 -0777 -ne 'print decode_base64($_)' 2>/dev/null"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
755 "Perl program to use for decoding a file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
756 Escape sequence %s is replaced with name of Perl binary.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
757 This string is passed to `format', so percent characters need to be doubled.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
758 This implementation requires the MIME::Base64 Perl module to be installed
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
759 on the remote host.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
760
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
761 (defconst tramp-perl-encode
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
762 "%s -e '
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
763 # This script contributed by Juanma Barranquero <lektu@terra.es>.
112357
c29a17e02c5b Add missing copyright years.
Michael Albinus <michael.albinus@gmx.de>
parents: 112284
diff changeset
764 # Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
c29a17e02c5b Add missing copyright years.
Michael Albinus <michael.albinus@gmx.de>
parents: 112284
diff changeset
765 # 2011 Free Software Foundation, Inc.
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
766 use strict;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
767
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
768 my %%trans = do {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
769 my $i = 0;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
770 map {(substr(unpack(q(B8), chr $i++), 2, 6), $_)}
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
771 split //, q(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
772 };
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
773
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
774 binmode(\\*STDIN);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
775
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
776 # We read in chunks of 54 bytes, to generate output lines
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
777 # of 72 chars (plus end of line)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
778 $/ = \\54;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
779
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
780 while (my $data = <STDIN>) {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
781 my $pad = q();
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
782
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
783 # Only for the last chunk, and only if did not fill the last three-byte packet
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
784 if (eof) {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
785 my $mod = length($data) %% 3;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
786 $pad = q(=) x (3 - $mod) if $mod;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
787 }
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
788
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
789 # Not the fastest method, but it is simple: unpack to binary string, split
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
790 # by groups of 6 bits and convert back from binary to byte; then map into
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
791 # the translation table
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
792 print
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
793 join q(),
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
794 map($trans{$_},
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
795 (substr(unpack(q(B*), $data) . q(00000), 0, 432) =~ /....../g)),
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
796 $pad,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
797 qq(\\n);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
798 }' 2>/dev/null"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
799 "Perl program to use for encoding a file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
800 Escape sequence %s is replaced with name of Perl binary.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
801 This string is passed to `format', so percent characters need to be doubled.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
802
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
803 (defconst tramp-perl-decode
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
804 "%s -e '
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
805 # This script contributed by Juanma Barranquero <lektu@terra.es>.
112357
c29a17e02c5b Add missing copyright years.
Michael Albinus <michael.albinus@gmx.de>
parents: 112284
diff changeset
806 # Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
c29a17e02c5b Add missing copyright years.
Michael Albinus <michael.albinus@gmx.de>
parents: 112284
diff changeset
807 # 2011 Free Software Foundation, Inc.
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
808 use strict;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
809
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
810 my %%trans = do {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
811 my $i = 0;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
812 map {($_, substr(unpack(q(B8), chr $i++), 2, 6))}
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
813 split //, q(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
814 };
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
815
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
816 my %%bytes = map {(unpack(q(B8), chr $_), chr $_)} 0 .. 255;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
817
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
818 binmode(\\*STDOUT);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
819
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
820 # We are going to accumulate into $pending to accept any line length
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
821 # (we do not check they are <= 76 chars as the RFC says)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
822 my $pending = q();
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
823
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
824 while (my $data = <STDIN>) {
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
825 chomp $data;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
826
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
827 # If we find one or two =, we have reached the end and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
828 # any following data is to be discarded
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
829 my $finished = $data =~ s/(==?).*/$1/;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
830 $pending .= $data;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
831
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
832 my $len = length($pending);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
833 my $chunk = substr($pending, 0, $len & ~3);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
834 $pending = substr($pending, $len & ~3 + 1);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
835
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
836 # Easy method: translate from chars to (pregenerated) six-bit packets, join,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
837 # split in 8-bit chunks and convert back to char.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
838 print join q(),
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
839 map $bytes{$_},
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
840 ((join q(), map {$trans{$_} || q()} split //, $chunk) =~ /......../g);
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
841
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
842 last if $finished;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
843 }' 2>/dev/null"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
844 "Perl program to use for decoding a file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
845 Escape sequence %s is replaced with name of Perl binary.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
846 This string is passed to `format', so percent characters need to be doubled.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
847
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
848 (defconst tramp-vc-registered-read-file-names
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
849 "echo \"(\"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
850 while read file; do
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
851 if %s \"$file\"; then
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
852 echo \"(\\\"$file\\\" \\\"file-exists-p\\\" t)\"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
853 else
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
854 echo \"(\\\"$file\\\" \\\"file-exists-p\\\" nil)\"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
855 fi
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
856 if %s \"$file\"; then
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
857 echo \"(\\\"$file\\\" \\\"file-readable-p\\\" t)\"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
858 else
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
859 echo \"(\\\"$file\\\" \\\"file-readable-p\\\" nil)\"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
860 fi
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
861 done
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
862 echo \")\""
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
863 "Script to check existence of VC related files.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
864 It must be send formatted with two strings; the tests for file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
865 existence, and file readability. Input shall be read via
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
866 here-document, otherwise the command could exceed maximum length
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
867 of command line.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
868
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
869 (defconst tramp-file-mode-type-map
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
870 '((0 . "-") ; Normal file (SVID-v2 and XPG2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
871 (1 . "p") ; fifo
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
872 (2 . "c") ; character device
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
873 (3 . "m") ; multiplexed character device (v7)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
874 (4 . "d") ; directory
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
875 (5 . "?") ; Named special file (XENIX)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
876 (6 . "b") ; block device
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
877 (7 . "?") ; multiplexed block device (v7)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
878 (8 . "-") ; regular file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
879 (9 . "n") ; network special file (HP-UX)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
880 (10 . "l") ; symlink
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
881 (11 . "?") ; ACL shadow inode (Solaris, not userspace)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
882 (12 . "s") ; socket
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
883 (13 . "D") ; door special (Solaris)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
884 (14 . "w")) ; whiteout (BSD)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
885 "A list of file types returned from the `stat' system call.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
886 This is used to map a mode number to a permission string.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
887
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
888 ;; New handlers should be added here. The following operations can be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
889 ;; handled using the normal primitives: file-name-sans-versions,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
890 ;; get-file-buffer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
891 (defconst tramp-sh-file-name-handler-alist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
892 '((load . tramp-handle-load)
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
893 (make-symbolic-link . tramp-sh-handle-make-symbolic-link)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
894 (file-name-as-directory . tramp-handle-file-name-as-directory)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
895 (file-name-directory . tramp-handle-file-name-directory)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
896 (file-name-nondirectory . tramp-handle-file-name-nondirectory)
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
897 (file-truename . tramp-sh-handle-file-truename)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
898 (file-exists-p . tramp-sh-handle-file-exists-p)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
899 (file-directory-p . tramp-sh-handle-file-directory-p)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
900 (file-executable-p . tramp-sh-handle-file-executable-p)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
901 (file-readable-p . tramp-sh-handle-file-readable-p)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
902 (file-regular-p . tramp-handle-file-regular-p)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
903 (file-symlink-p . tramp-handle-file-symlink-p)
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
904 (file-writable-p . tramp-sh-handle-file-writable-p)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
905 (file-ownership-preserved-p . tramp-sh-handle-file-ownership-preserved-p)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
906 (file-newer-than-file-p . tramp-sh-handle-file-newer-than-file-p)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
907 (file-attributes . tramp-sh-handle-file-attributes)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
908 (file-modes . tramp-handle-file-modes)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
909 (directory-files . tramp-handle-directory-files)
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
910 (directory-files-and-attributes
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
911 . tramp-sh-handle-directory-files-and-attributes)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
912 (file-name-all-completions . tramp-sh-handle-file-name-all-completions)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
913 (file-name-completion . tramp-handle-file-name-completion)
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
914 (add-name-to-file . tramp-sh-handle-add-name-to-file)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
915 (copy-file . tramp-sh-handle-copy-file)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
916 (copy-directory . tramp-sh-handle-copy-directory)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
917 (rename-file . tramp-sh-handle-rename-file)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
918 (set-file-modes . tramp-sh-handle-set-file-modes)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
919 (set-file-times . tramp-sh-handle-set-file-times)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
920 (make-directory . tramp-sh-handle-make-directory)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
921 (delete-directory . tramp-sh-handle-delete-directory)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
922 (delete-file . tramp-sh-handle-delete-file)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
923 (directory-file-name . tramp-handle-directory-file-name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
924 ;; `executable-find' is not official yet.
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
925 (executable-find . tramp-sh-handle-executable-find)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
926 (start-file-process . tramp-sh-handle-start-file-process)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
927 (process-file . tramp-sh-handle-process-file)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
928 (shell-command . tramp-sh-handle-shell-command)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
929 (insert-directory . tramp-sh-handle-insert-directory)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
930 (expand-file-name . tramp-sh-handle-expand-file-name)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
931 (substitute-in-file-name . tramp-handle-substitute-in-file-name)
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
932 (file-local-copy . tramp-sh-handle-file-local-copy)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
933 (file-remote-p . tramp-handle-file-remote-p)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
934 (insert-file-contents . tramp-handle-insert-file-contents)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
935 (insert-file-contents-literally
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
936 . tramp-sh-handle-insert-file-contents-literally)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
937 (write-region . tramp-sh-handle-write-region)
110789
12ce8eb76d37 * net/tramp-sh.el (tramp-sh-file-name-handler-alist): Use
Michael Albinus <michael.albinus@gmx.de>
parents: 110776
diff changeset
938 (find-backup-file-name . tramp-handle-find-backup-file-name)
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
939 (make-auto-save-file-name . tramp-sh-handle-make-auto-save-file-name)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
940 (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
941 (dired-compress-file . tramp-sh-handle-dired-compress-file)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
942 (dired-recursive-delete-directory
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
943 . tramp-sh-handle-dired-recursive-delete-directory)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
944 (dired-uncache . tramp-handle-dired-uncache)
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
945 (set-visited-file-modtime . tramp-sh-handle-set-visited-file-modtime)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
946 (verify-visited-file-modtime . tramp-sh-handle-verify-visited-file-modtime)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
947 (file-selinux-context . tramp-sh-handle-file-selinux-context)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
948 (set-file-selinux-context . tramp-sh-handle-set-file-selinux-context)
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
949 (vc-registered . tramp-sh-handle-vc-registered))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
950 "Alist of handler functions.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
951 Operations not mentioned here will be handled by the normal Emacs functions.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
952
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
953 ;; This must be the last entry, because `identity' always matches.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
954 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
955 (add-to-list 'tramp-foreign-file-name-handler-alist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
956 '(identity . tramp-sh-file-name-handler) 'append)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
957
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
958 ;;; File Name Handler Functions:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
959
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
960 (defun tramp-sh-handle-make-symbolic-link
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
961 (filename linkname &optional ok-if-already-exists)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
962 "Like `make-symbolic-link' for Tramp files.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
963 If LINKNAME is a non-Tramp file, it is used verbatim as the target of
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
964 the symlink. If LINKNAME is a Tramp file, only the localname component is
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
965 used as the target of the symlink.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
966
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
967 If LINKNAME is a Tramp file and the localname component is relative, then
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
968 it is expanded first, before the localname component is taken. Note that
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
969 this can give surprising results if the user/host for the source and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
970 target of the symlink differ."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
971 (with-parsed-tramp-file-name linkname l
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
972 (let ((ln (tramp-get-remote-ln l))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
973 (cwd (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
974 'file-name-directory (list l-localname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
975 (unless ln
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
976 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
977 l 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
978 "Making a symbolic link. ln(1) does not exist on the remote host."))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
979
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
980 ;; Do the 'confirm if exists' thing.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
981 (when (file-exists-p linkname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
982 ;; What to do?
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
983 (if (or (null ok-if-already-exists) ; not allowed to exist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
984 (and (numberp ok-if-already-exists)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
985 (not (yes-or-no-p
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
986 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
987 "File %s already exists; make it a link anyway? "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
988 l-localname)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
989 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
990 l 'file-already-exists "File %s already exists" l-localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
991 (delete-file linkname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
992
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
993 ;; If FILENAME is a Tramp name, use just the localname component.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
994 (when (tramp-tramp-file-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
995 (setq filename
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
996 (tramp-file-name-localname
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
997 (tramp-dissect-file-name (expand-file-name filename)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
998
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
999 (tramp-flush-file-property l (file-name-directory l-localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1000 (tramp-flush-file-property l l-localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1001
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1002 ;; Right, they are on the same host, regardless of user, method, etc.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1003 ;; We now make the link on the remote machine. This will occur as the user
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1004 ;; that FILENAME belongs to.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1005 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1006 l
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1007 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1008 "cd %s && %s -sf %s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1009 (tramp-shell-quote-argument cwd)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1010 ln
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1011 (tramp-shell-quote-argument filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1012 (tramp-shell-quote-argument l-localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1013 t))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1014
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1015 (defun tramp-sh-handle-file-truename (filename &optional counter prev-dirs)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1016 "Like `file-truename' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1017 (with-parsed-tramp-file-name (expand-file-name filename) nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1018 (with-file-property v localname "file-truename"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1019 (let ((result nil)) ; result steps in reverse order
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1020 (tramp-message v 4 "Finding true name for `%s'" filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1021 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1022 ;; Use GNU readlink --canonicalize-missing where available.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1023 ((tramp-get-remote-readlink v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1024 (setq result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1025 (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1026 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1027 (format "echo \"\\\"`%s --canonicalize-missing %s`\\\"\""
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1028 (tramp-get-remote-readlink v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1029 (tramp-shell-quote-argument localname)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1030
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1031 ;; Use Perl implementation.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1032 ((and (tramp-get-remote-perl v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1033 (tramp-get-connection-property v "perl-file-spec" nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1034 (tramp-get-connection-property v "perl-cwd-realpath" nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1035 (tramp-maybe-send-script
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1036 v tramp-perl-file-truename "tramp_perl_file_truename")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1037 (setq result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1038 (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1039 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1040 (format "tramp_perl_file_truename %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1041 (tramp-shell-quote-argument localname)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1042
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1043 ;; Do it yourself. We bind `directory-sep-char' here for
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1044 ;; XEmacs on Windows, which would otherwise use backslash.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1045 (t (let* ((directory-sep-char ?/)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1046 (steps (tramp-compat-split-string localname "/"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1047 (localnamedir (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1048 'file-name-as-directory (list localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1049 (is-dir (string= localname localnamedir))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1050 (thisstep nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1051 (numchase 0)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1052 ;; Don't make the following value larger than
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1053 ;; necessary. People expect an error message in a
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1054 ;; timely fashion when something is wrong;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1055 ;; otherwise they might think that Emacs is hung.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1056 ;; Of course, correctness has to come first.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1057 (numchase-limit 20)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1058 symlink-target)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1059 (while (and steps (< numchase numchase-limit))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1060 (setq thisstep (pop steps))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1061 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1062 v 5 "Check %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1063 (mapconcat 'identity
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1064 (append '("") (reverse result) (list thisstep))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1065 "/"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1066 (setq symlink-target
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1067 (nth 0 (file-attributes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1068 (tramp-make-tramp-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1069 method user host
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1070 (mapconcat 'identity
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1071 (append '("")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1072 (reverse result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1073 (list thisstep))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1074 "/")))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1075 (cond ((string= "." thisstep)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1076 (tramp-message v 5 "Ignoring step `.'"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1077 ((string= ".." thisstep)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1078 (tramp-message v 5 "Processing step `..'")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1079 (pop result))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1080 ((stringp symlink-target)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1081 ;; It's a symlink, follow it.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1082 (tramp-message v 5 "Follow symlink to %s" symlink-target)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1083 (setq numchase (1+ numchase))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1084 (when (file-name-absolute-p symlink-target)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1085 (setq result nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1086 ;; If the symlink was absolute, we'll get a string like
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1087 ;; "/user@host:/some/target"; extract the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1088 ;; "/some/target" part from it.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1089 (when (tramp-tramp-file-p symlink-target)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1090 (unless (tramp-equal-remote filename symlink-target)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1091 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1092 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1093 "Symlink target `%s' on wrong host" symlink-target))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1094 (setq symlink-target localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1095 (setq steps
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1096 (append (tramp-compat-split-string
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1097 symlink-target "/")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1098 steps)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1099 (t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1100 ;; It's a file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1101 (setq result (cons thisstep result)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1102 (when (>= numchase numchase-limit)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1103 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1104 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1105 "Maximum number (%d) of symlinks exceeded" numchase-limit))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1106 (setq result (reverse result))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1107 ;; Combine list to form string.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1108 (setq result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1109 (if result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1110 (mapconcat 'identity (cons "" result) "/")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1111 "/"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1112 (when (and is-dir (or (string= "" result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1113 (not (string= (substring result -1) "/"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1114 (setq result (concat result "/"))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1115
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1116 (tramp-message v 4 "True name of `%s' is `%s'" filename result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1117 (tramp-make-tramp-file-name method user host result)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1118
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1119 ;; Basic functions.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1120
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1121 (defun tramp-sh-handle-file-exists-p (filename)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1122 "Like `file-exists-p' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1123 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1124 (with-file-property v localname "file-exists-p"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1125 (or (not (null (tramp-get-file-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1126 v localname "file-attributes-integer" nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1127 (not (null (tramp-get-file-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1128 v localname "file-attributes-string" nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1129 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1130 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1131 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1132 "%s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1133 (tramp-get-file-exists-command v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1134 (tramp-shell-quote-argument localname)))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1135
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1136 ;; CCC: This should check for an error condition and signal failure
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1137 ;; when something goes wrong.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1138 ;; Daniel Pittman <daniel@danann.net>
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1139 (defun tramp-sh-handle-file-attributes (filename &optional id-format)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1140 "Like `file-attributes' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1141 (unless id-format (setq id-format 'integer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1142 ;; Don't modify `last-coding-system-used' by accident.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1143 (let ((last-coding-system-used last-coding-system-used))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1144 (with-parsed-tramp-file-name (expand-file-name filename) nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1145 (with-file-property v localname (format "file-attributes-%s" id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1146 (save-excursion
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1147 (tramp-convert-file-attributes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1148 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1149 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1150 ((tramp-get-remote-stat v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1151 (tramp-do-file-attributes-with-stat v localname id-format))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1152 ((tramp-get-remote-perl v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1153 (tramp-do-file-attributes-with-perl v localname id-format))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1154 (t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1155 (tramp-do-file-attributes-with-ls v localname id-format)))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1156
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1157 (defun tramp-do-file-attributes-with-ls (vec localname &optional id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1158 "Implement `file-attributes' for Tramp files using the ls(1) command."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1159 (let (symlinkp dirp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1160 res-inode res-filemodes res-numlinks
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1161 res-uid res-gid res-size res-symlink-target)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1162 (tramp-message vec 5 "file attributes with ls: %s" localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1163 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1164 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1165 (format "(%s %s || %s -h %s) && %s %s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1166 (tramp-get-file-exists-command vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1167 (tramp-shell-quote-argument localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1168 (tramp-get-test-command vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1169 (tramp-shell-quote-argument localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1170 (tramp-get-ls-command vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1171 (if (eq id-format 'integer) "-ildn" "-ild")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1172 (tramp-shell-quote-argument localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1173 ;; parse `ls -l' output ...
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1174 (with-current-buffer (tramp-get-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1175 (when (> (buffer-size) 0)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1176 (goto-char (point-min))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1177 ;; ... inode
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1178 (setq res-inode
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1179 (condition-case err
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1180 (read (current-buffer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1181 (invalid-read-syntax
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1182 (when (and (equal (cadr err)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1183 "Integer constant overflow in reader")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1184 (string-match
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1185 "^[0-9]+\\([0-9][0-9][0-9][0-9][0-9]\\)\\'"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1186 (car (cddr err))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1187 (let* ((big (read (substring (car (cddr err)) 0
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1188 (match-beginning 1))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1189 (small (read (match-string 1 (car (cddr err)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1190 (twiddle (/ small 65536)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1191 (cons (+ big twiddle)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1192 (- small (* twiddle 65536))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1193 ;; ... file mode flags
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1194 (setq res-filemodes (symbol-name (read (current-buffer))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1195 ;; ... number links
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1196 (setq res-numlinks (read (current-buffer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1197 ;; ... uid and gid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1198 (setq res-uid (read (current-buffer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1199 (setq res-gid (read (current-buffer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1200 (if (eq id-format 'integer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1201 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1202 (unless (numberp res-uid) (setq res-uid -1))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1203 (unless (numberp res-gid) (setq res-gid -1)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1204 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1205 (unless (stringp res-uid) (setq res-uid (symbol-name res-uid)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1206 (unless (stringp res-gid) (setq res-gid (symbol-name res-gid)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1207 ;; ... size
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1208 (setq res-size (read (current-buffer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1209 ;; From the file modes, figure out other stuff.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1210 (setq symlinkp (eq ?l (aref res-filemodes 0)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1211 (setq dirp (eq ?d (aref res-filemodes 0)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1212 ;; if symlink, find out file name pointed to
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1213 (when symlinkp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1214 (search-forward "-> ")
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
1215 (setq res-symlink-target (buffer-substring (point) (point-at-eol))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1216 ;; return data gathered
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1217 (list
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1218 ;; 0. t for directory, string (name linked to) for symbolic
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1219 ;; link, or nil.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1220 (or dirp res-symlink-target)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1221 ;; 1. Number of links to file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1222 res-numlinks
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1223 ;; 2. File uid.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1224 res-uid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1225 ;; 3. File gid.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1226 res-gid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1227 ;; 4. Last access time, as a list of two integers. First
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1228 ;; integer has high-order 16 bits of time, second has low 16
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1229 ;; bits.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1230 ;; 5. Last modification time, likewise.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1231 ;; 6. Last status change time, likewise.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1232 '(0 0) '(0 0) '(0 0) ;CCC how to find out?
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1233 ;; 7. Size in bytes (-1, if number is out of range).
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1234 res-size
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1235 ;; 8. File modes, as a string of ten letters or dashes as in ls -l.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1236 res-filemodes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1237 ;; 9. t if file's gid would change if file were deleted and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1238 ;; recreated. Will be set in `tramp-convert-file-attributes'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1239 t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1240 ;; 10. inode number.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1241 res-inode
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1242 ;; 11. Device number. Will be replaced by a virtual device number.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1243 -1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1244 )))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1245
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1246 (defun tramp-do-file-attributes-with-perl
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1247 (vec localname &optional id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1248 "Implement `file-attributes' for Tramp files using a Perl script."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1249 (tramp-message vec 5 "file attributes with perl: %s" localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1250 (tramp-maybe-send-script
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1251 vec tramp-perl-file-attributes "tramp_perl_file_attributes")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1252 (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1253 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1254 (format "tramp_perl_file_attributes %s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1255 (tramp-shell-quote-argument localname) id-format)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1256
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1257 (defun tramp-do-file-attributes-with-stat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1258 (vec localname &optional id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1259 "Implement `file-attributes' for Tramp files using stat(1) command."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1260 (tramp-message vec 5 "file attributes with stat: %s" localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1261 (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1262 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1263 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1264 ;; On Opsware, pdksh (which is the true name of ksh there) doesn't
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1265 ;; parse correctly the sequence "((". Therefore, we add a space.
111079
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
1266 "( (%s %s || %s -h %s) && %s -c '((\"%%N\") %%h %s %s %%Xe0 %%Ye0 %%Ze0 %%se0 \"%%A\" t %%ie0 -1)' %s || echo nil)"
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1267 (tramp-get-file-exists-command vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1268 (tramp-shell-quote-argument localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1269 (tramp-get-test-command vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1270 (tramp-shell-quote-argument localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1271 (tramp-get-remote-stat vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1272 (if (eq id-format 'integer) "%u" "\"%U\"")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1273 (if (eq id-format 'integer) "%g" "\"%G\"")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1274 (tramp-shell-quote-argument localname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1275
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1276 (defun tramp-sh-handle-set-visited-file-modtime (&optional time-list)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1277 "Like `set-visited-file-modtime' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1278 (unless (buffer-file-name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1279 (error "Can't set-visited-file-modtime: buffer `%s' not visiting a file"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1280 (buffer-name)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1281 (if time-list
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1282 (tramp-run-real-handler 'set-visited-file-modtime (list time-list))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1283 (let ((f (buffer-file-name))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1284 coding-system-used)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1285 (with-parsed-tramp-file-name f nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1286 (let* ((attr (file-attributes f))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1287 ;; '(-1 65535) means file doesn't exists yet.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1288 (modtime (or (nth 5 attr) '(-1 65535))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1289 (when (boundp 'last-coding-system-used)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1290 (setq coding-system-used (symbol-value 'last-coding-system-used)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1291 ;; We use '(0 0) as a don't-know value. See also
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1292 ;; `tramp-do-file-attributes-with-ls'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1293 (if (not (equal modtime '(0 0)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1294 (tramp-run-real-handler 'set-visited-file-modtime (list modtime))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1295 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1296 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1297 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1298 (format "%s -ild %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1299 (tramp-get-ls-command v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1300 (tramp-shell-quote-argument localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1301 (setq attr (buffer-substring (point)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1302 (progn (end-of-line) (point)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1303 (tramp-set-file-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1304 v localname "visited-file-modtime-ild" attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1305 (when (boundp 'last-coding-system-used)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1306 (set 'last-coding-system-used coding-system-used))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1307 nil)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1308
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1309 ;; This function makes the same assumption as
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1310 ;; `tramp-sh-handle-set-visited-file-modtime'.
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1311 (defun tramp-sh-handle-verify-visited-file-modtime (buf)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1312 "Like `verify-visited-file-modtime' for Tramp files.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1313 At the time `verify-visited-file-modtime' calls this function, we
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1314 already know that the buffer is visiting a file and that
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1315 `visited-file-modtime' does not return 0. Do not call this
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1316 function directly, unless those two cases are already taken care
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1317 of."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1318 (with-current-buffer buf
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1319 (let ((f (buffer-file-name)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1320 ;; There is no file visiting the buffer, or the buffer has no
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1321 ;; recorded last modification time, or there is no established
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1322 ;; connection.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1323 (if (or (not f)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1324 (eq (visited-file-modtime) 0)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1325 (not (tramp-file-name-handler 'file-remote-p f nil 'connected)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1326 t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1327 (with-parsed-tramp-file-name f nil
110702
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1328 (let* ((remote-file-name-inhibit-cache t)
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1329 (attr (file-attributes f))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1330 (modtime (nth 5 attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1331 (mt (visited-file-modtime)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1332
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1333 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1334 ;; File exists, and has a known modtime.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1335 ((and attr (not (equal modtime '(0 0))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1336 (< (abs (tramp-time-diff
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1337 modtime
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1338 ;; For compatibility, deal with both the old
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1339 ;; (HIGH . LOW) and the new (HIGH LOW) return
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1340 ;; values of `visited-file-modtime'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1341 (if (atom (cdr mt))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1342 (list (car mt) (cdr mt))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1343 mt)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1344 2))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1345 ;; Modtime has the don't know value.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1346 (attr
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1347 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1348 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1349 (format "%s -ild %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1350 (tramp-get-ls-command v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1351 (tramp-shell-quote-argument localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1352 (with-current-buffer (tramp-get-buffer v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1353 (setq attr (buffer-substring
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1354 (point) (progn (end-of-line) (point)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1355 (equal
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1356 attr
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1357 (tramp-get-file-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1358 v localname "visited-file-modtime-ild" "")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1359 ;; If file does not exist, say it is not modified if and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1360 ;; only if that agrees with the buffer's record.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1361 (t (equal mt '(-1 65535))))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1362
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1363 (defun tramp-sh-handle-set-file-modes (filename mode)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1364 "Like `set-file-modes' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1365 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1366 (tramp-flush-file-property v localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1367 ;; FIXME: extract the proper text from chmod's stderr.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1368 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1369 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1370 (format "chmod %s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1371 (tramp-compat-decimal-to-octal mode)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1372 (tramp-shell-quote-argument localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1373 "Error while changing file's mode %s" filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1374
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1375 (defun tramp-sh-handle-set-file-times (filename &optional time)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1376 "Like `set-file-times' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1377 (if (file-remote-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1378 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1379 (tramp-flush-file-property v localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1380 (let ((time (if (or (null time) (equal time '(0 0)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1381 (current-time)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1382 time))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1383 ;; With GNU Emacs, `format-time-string' has an optional
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1384 ;; parameter UNIVERSAL. This is preferred, because we
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1385 ;; could handle the case when the remote host is located
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1386 ;; in a different time zone as the local host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1387 (utc (not (featurep 'xemacs))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1388 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1389 v (format "%s touch -t %s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1390 (if utc "TZ=UTC; export TZ;" "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1391 (if utc
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1392 (format-time-string "%Y%m%d%H%M.%S" time t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1393 (format-time-string "%Y%m%d%H%M.%S" time))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1394 (tramp-shell-quote-argument localname)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1395
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1396 ;; We handle also the local part, because in older Emacsen,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1397 ;; without `set-file-times', this function is an alias for this.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1398 ;; We are local, so we don't need the UTC settings.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1399 (zerop
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1400 (tramp-compat-call-process
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1401 "touch" nil nil nil "-t"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1402 (format-time-string "%Y%m%d%H%M.%S" time)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1403 (tramp-shell-quote-argument filename)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1404
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1405 (defun tramp-set-file-uid-gid (filename &optional uid gid)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1406 "Set the ownership for FILENAME.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1407 If UID and GID are provided, these values are used; otherwise uid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1408 and gid of the corresponding user is taken. Both parameters must be integers."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1409 ;; Modern Unices allow chown only for root. So we might need
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1410 ;; another implementation, see `dired-do-chown'. OTOH, it is mostly
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1411 ;; working with su(do)? when it is needed, so it shall succeed in
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1412 ;; the majority of cases.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1413 ;; Don't modify `last-coding-system-used' by accident.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1414 (let ((last-coding-system-used last-coding-system-used))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1415 (if (file-remote-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1416 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1417 (if (and (zerop (user-uid)) (tramp-local-host-p v))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1418 ;; If we are root on the local host, we can do it directly.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1419 (tramp-set-file-uid-gid localname uid gid)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1420 (let ((uid (or (and (integerp uid) uid)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1421 (tramp-get-remote-uid v 'integer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1422 (gid (or (and (integerp gid) gid)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1423 (tramp-get-remote-gid v 'integer))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1424 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1425 v (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1426 "chown %d:%d %s" uid gid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1427 (tramp-shell-quote-argument localname))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1428
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1429 ;; We handle also the local part, because there doesn't exist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1430 ;; `set-file-uid-gid'. On W32 "chown" might not work.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1431 (let ((uid (or (and (integerp uid) uid) (tramp-get-local-uid 'integer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1432 (gid (or (and (integerp gid) gid) (tramp-get-local-gid 'integer))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1433 (tramp-compat-call-process
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1434 "chown" nil nil nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1435 (format "%d:%d" uid gid) (tramp-shell-quote-argument filename))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1436
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1437 (defun tramp-remote-selinux-p (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1438 "Check, whether SELINUX is enabled on the remote host."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1439 (with-connection-property (tramp-get-connection-process vec) "selinux-p"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1440 (let ((result (tramp-find-executable
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1441 vec "getenforce" (tramp-get-remote-path vec) t t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1442 (and result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1443 (string-equal
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1444 (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1445 vec (format "echo \\\"`%S`\\\"" result))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1446 "Enforcing")))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1447
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1448 (defun tramp-sh-handle-file-selinux-context (filename)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1449 "Like `file-selinux-context' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1450 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1451 (with-file-property v localname "file-selinux-context"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1452 (let ((context '(nil nil nil nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1453 (regexp (concat "\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\):"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1454 "\\([a-z0-9_]+\\):" "\\([a-z0-9_]+\\)")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1455 (when (and (tramp-remote-selinux-p v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1456 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1457 v (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1458 "%s -d -Z %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1459 (tramp-get-ls-command v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1460 (tramp-shell-quote-argument localname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1461 (with-current-buffer (tramp-get-connection-buffer v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1462 (goto-char (point-min))
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
1463 (when (re-search-forward regexp (point-at-eol) t)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1464 (setq context (list (match-string 1) (match-string 2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1465 (match-string 3) (match-string 4))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1466 ;; Return the context.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1467 context))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1468
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1469 (defun tramp-sh-handle-set-file-selinux-context (filename context)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1470 "Like `set-file-selinux-context' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1471 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1472 (if (and (consp context)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1473 (tramp-remote-selinux-p v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1474 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1475 v (format "chcon %s %s %s %s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1476 (if (stringp (nth 0 context))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1477 (format "--user=%s" (nth 0 context)) "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1478 (if (stringp (nth 1 context))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1479 (format "--role=%s" (nth 1 context)) "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1480 (if (stringp (nth 2 context))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1481 (format "--type=%s" (nth 2 context)) "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1482 (if (stringp (nth 3 context))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1483 (format "--range=%s" (nth 3 context)) "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1484 (tramp-shell-quote-argument localname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1485 (tramp-set-file-property v localname "file-selinux-context" context)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1486 (tramp-set-file-property v localname "file-selinux-context" 'undef)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1487 ;; We always return nil.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1488 nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1489
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1490 ;; Simple functions using the `test' command.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1491
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1492 (defun tramp-sh-handle-file-executable-p (filename)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1493 "Like `file-executable-p' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1494 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1495 (with-file-property v localname "file-executable-p"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1496 ;; Examine `file-attributes' cache to see if request can be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1497 ;; satisfied without remote operation.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1498 (or (tramp-check-cached-permissions v ?x)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1499 (tramp-run-test "-x" filename)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1500
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1501 (defun tramp-sh-handle-file-readable-p (filename)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1502 "Like `file-readable-p' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1503 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1504 (with-file-property v localname "file-readable-p"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1505 ;; Examine `file-attributes' cache to see if request can be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1506 ;; satisfied without remote operation.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1507 (or (tramp-check-cached-permissions v ?r)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1508 (tramp-run-test "-r" filename)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1509
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1510 ;; When the remote shell is started, it looks for a shell which groks
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1511 ;; tilde expansion. Here, we assume that all shells which grok tilde
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1512 ;; expansion will also provide a `test' command which groks `-nt' (for
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1513 ;; newer than). If this breaks, tell me about it and I'll try to do
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1514 ;; something smarter about it.
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1515 (defun tramp-sh-handle-file-newer-than-file-p (file1 file2)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1516 "Like `file-newer-than-file-p' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1517 (cond ((not (file-exists-p file1))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1518 nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1519 ((not (file-exists-p file2))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1520 t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1521 ;; We are sure both files exist at this point.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1522 (t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1523 (save-excursion
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1524 ;; We try to get the mtime of both files. If they are not
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1525 ;; equal to the "dont-know" value, then we subtract the times
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1526 ;; and obtain the result.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1527 (let ((fa1 (file-attributes file1))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1528 (fa2 (file-attributes file2)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1529 (if (and (not (equal (nth 5 fa1) '(0 0)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1530 (not (equal (nth 5 fa2) '(0 0))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1531 (> 0 (tramp-time-diff (nth 5 fa2) (nth 5 fa1)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1532 ;; If one of them is the dont-know value, then we can
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1533 ;; still try to run a shell command on the remote host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1534 ;; However, this only works if both files are Tramp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1535 ;; files and both have the same method, same user, same
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1536 ;; host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1537 (unless (tramp-equal-remote file1 file2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1538 (with-parsed-tramp-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1539 (if (tramp-tramp-file-p file1) file1 file2) nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1540 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1541 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1542 "Files %s and %s must have same method, user, host"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1543 file1 file2)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1544 (with-parsed-tramp-file-name file1 nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1545 (tramp-run-test2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1546 (tramp-get-test-nt-command v) file1 file2))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1547
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1548 ;; Functions implemented using the basic functions above.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1549
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1550 (defun tramp-sh-handle-file-directory-p (filename)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1551 "Like `file-directory-p' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1552 ;; Care must be taken that this function returns `t' for symlinks
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1553 ;; pointing to directories. Surely the most obvious implementation
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1554 ;; would be `test -d', but that returns false for such symlinks.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1555 ;; CCC: Stefan Monnier says that `test -d' follows symlinks. And
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1556 ;; I now think he's right. So we could be using `test -d', couldn't
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1557 ;; we?
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1558 ;;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1559 ;; Alternatives: `cd %s', `test -d %s'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1560 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1561 (with-file-property v localname "file-directory-p"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1562 (tramp-run-test "-d" filename))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1563
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1564 (defun tramp-sh-handle-file-writable-p (filename)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1565 "Like `file-writable-p' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1566 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1567 (with-file-property v localname "file-writable-p"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1568 (if (file-exists-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1569 ;; Examine `file-attributes' cache to see if request can be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1570 ;; satisfied without remote operation.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1571 (or (tramp-check-cached-permissions v ?w)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1572 (tramp-run-test "-w" filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1573 ;; If file doesn't exist, check if directory is writable.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1574 (and (tramp-run-test "-d" (file-name-directory filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1575 (tramp-run-test "-w" (file-name-directory filename)))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1576
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1577 (defun tramp-sh-handle-file-ownership-preserved-p (filename)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1578 "Like `file-ownership-preserved-p' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1579 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1580 (with-file-property v localname "file-ownership-preserved-p"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1581 (let ((attributes (file-attributes filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1582 ;; Return t if the file doesn't exist, since it's true that no
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1583 ;; information would be lost by an (attempted) delete and create.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1584 (or (null attributes)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1585 (= (nth 2 attributes) (tramp-get-remote-uid v 'integer)))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1586
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1587 ;; Directory listings.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1588
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1589 (defun tramp-sh-handle-directory-files-and-attributes
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1590 (directory &optional full match nosort id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1591 "Like `directory-files-and-attributes' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1592 (unless id-format (setq id-format 'integer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1593 (when (file-directory-p directory)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1594 (setq directory (expand-file-name directory))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1595 (let* ((temp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1596 (copy-tree
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1597 (with-parsed-tramp-file-name directory nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1598 (with-file-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1599 v localname
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1600 (format "directory-files-and-attributes-%s" id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1601 (save-excursion
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1602 (mapcar
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1603 (lambda (x)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1604 (cons (car x)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1605 (tramp-convert-file-attributes v (cdr x))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1606 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1607 ((tramp-get-remote-stat v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1608 (tramp-do-directory-files-and-attributes-with-stat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1609 v localname id-format))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1610 ((tramp-get-remote-perl v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1611 (tramp-do-directory-files-and-attributes-with-perl
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1612 v localname id-format)))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1613 result item)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1614
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1615 (while temp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1616 (setq item (pop temp))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1617 (when (or (null match) (string-match match (car item)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1618 (when full
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1619 (setcar item (expand-file-name (car item) directory)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1620 (push item result)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1621
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1622 (if nosort
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1623 result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1624 (sort result (lambda (x y) (string< (car x) (car y))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1625
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1626 (defun tramp-do-directory-files-and-attributes-with-perl
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1627 (vec localname &optional id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1628 "Implement `directory-files-and-attributes' for Tramp files using a Perl script."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1629 (tramp-message vec 5 "directory-files-and-attributes with perl: %s" localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1630 (tramp-maybe-send-script
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1631 vec tramp-perl-directory-files-and-attributes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1632 "tramp_perl_directory_files_and_attributes")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1633 (let ((object
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1634 (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1635 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1636 (format "tramp_perl_directory_files_and_attributes %s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1637 (tramp-shell-quote-argument localname) id-format))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1638 (when (stringp object) (tramp-error vec 'file-error object))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1639 object))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1640
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1641 (defun tramp-do-directory-files-and-attributes-with-stat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1642 (vec localname &optional id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1643 "Implement `directory-files-and-attributes' for Tramp files using stat(1) command."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1644 (tramp-message vec 5 "directory-files-and-attributes with stat: %s" localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1645 (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1646 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1647 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1648 (concat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1649 ;; We must care about filenames with spaces, or starting with
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1650 ;; "-"; this would confuse xargs. "ls -aQ" might be a solution,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1651 ;; but it does not work on all remote systems. Therefore, we
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1652 ;; quote the filenames via sed.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1653 "cd %s; echo \"(\"; (%s -a | sed -e s/\\$/\\\"/g -e s/^/\\\"/g | xargs "
111034
e02e55f79038 * net/tramp-sh.el (tramp-do-file-attributes-with-stat)
Michael Albinus <michael.albinus@gmx.de>
parents: 111009
diff changeset
1654 "%s -c '(\"%%n\" (\"%%N\") %%h %s %s %%Xe0 %%Ye0 %%Ze0 %%se0 \"%%A\" t %%ie0 -1)'); "
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1655 "echo \")\"")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1656 (tramp-shell-quote-argument localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1657 (tramp-get-ls-command vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1658 (tramp-get-remote-stat vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1659 (if (eq id-format 'integer) "%u" "\"%U\"")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1660 (if (eq id-format 'integer) "%g" "\"%G\""))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1661
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1662 ;; This function should return "foo/" for directories and "bar" for
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1663 ;; files.
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1664 (defun tramp-sh-handle-file-name-all-completions (filename directory)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1665 "Like `file-name-all-completions' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1666 (unless (save-match-data (string-match "/" filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1667 (with-parsed-tramp-file-name (expand-file-name directory) nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1668
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1669 (all-completions
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1670 filename
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1671 (mapcar
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1672 'list
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1673 (or
110702
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1674 ;; Try cache entries for filename, filename with last
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1675 ;; character removed, filename with last two characters
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1676 ;; removed, ..., and finally the empty string - all
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1677 ;; concatenated to the local directory name.
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1678 (let ((remote-file-name-inhibit-cache
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1679 (or remote-file-name-inhibit-cache
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1680 tramp-completion-reread-directory-timeout)))
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1681
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1682 ;; This is inefficient for very long filenames, pity
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1683 ;; `reduce' is not available...
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1684 (car
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1685 (apply
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1686 'append
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1687 (mapcar
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1688 (lambda (x)
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1689 (let ((cache-hit
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1690 (tramp-get-file-property
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1691 v
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1692 (concat localname (substring filename 0 x))
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1693 "file-name-all-completions"
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1694 nil)))
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1695 (when cache-hit (list cache-hit))))
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1696 (tramp-compat-number-sequence (length filename) 0 -1)))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1697
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1698 ;; Cache expired or no matching cache entry found so we need
110702
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1699 ;; to perform a remote operation.
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1700 (let (result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1701 ;; Get a list of directories and files, including reliably
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1702 ;; tagging the directories with a trailing '/'. Because I
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1703 ;; rock. --daniel@danann.net
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1704
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1705 ;; Changed to perform `cd' in the same remote op and only
110702
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
1706 ;; get entries starting with `filename'. Capture any `cd'
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1707 ;; error messages. Ensure any `cd' and `echo' aliases are
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1708 ;; ignored.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1709 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1710 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1711 (if (tramp-get-remote-perl v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1712 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1713 (tramp-maybe-send-script
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1714 v tramp-perl-file-name-all-completions
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1715 "tramp_perl_file_name_all_completions")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1716 (format "tramp_perl_file_name_all_completions %s %s %d"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1717 (tramp-shell-quote-argument localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1718 (tramp-shell-quote-argument filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1719 (if (symbol-value
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1720 ;; `read-file-name-completion-ignore-case'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1721 ;; is introduced with Emacs 22.1.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1722 (if (boundp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1723 'read-file-name-completion-ignore-case)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1724 'read-file-name-completion-ignore-case
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1725 'completion-ignore-case))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1726 1 0)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1727
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1728 (format (concat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1729 "(\\cd %s 2>&1 && (%s %s -a 2>/dev/null"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1730 ;; `ls' with wildcard might fail with `Argument
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1731 ;; list too long' error in some corner cases; if
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1732 ;; `ls' fails after `cd' succeeded, chances are
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1733 ;; that's the case, so let's retry without
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1734 ;; wildcard. This will return "too many" entries
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1735 ;; but that isn't harmful.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1736 " || %s -a 2>/dev/null)"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1737 " | while read f; do"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1738 " if %s -d \"$f\" 2>/dev/null;"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1739 " then \\echo \"$f/\"; else \\echo \"$f\"; fi; done"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1740 " && \\echo ok) || \\echo fail")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1741 (tramp-shell-quote-argument localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1742 (tramp-get-ls-command v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1743 ;; When `filename' is empty, just `ls' without
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1744 ;; filename argument is more efficient than `ls *'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1745 ;; for very large directories and might avoid the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1746 ;; `Argument list too long' error.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1747 ;;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1748 ;; With and only with wildcard, we need to add
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1749 ;; `-d' to prevent `ls' from descending into
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1750 ;; sub-directories.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1751 (if (zerop (length filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1752 "."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1753 (concat (tramp-shell-quote-argument filename) "* -d"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1754 (tramp-get-ls-command v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1755 (tramp-get-test-command v))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1756
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1757 ;; Now grab the output.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1758 (with-current-buffer (tramp-get-buffer v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1759 (goto-char (point-max))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1760
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1761 ;; Check result code, found in last line of output
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1762 (forward-line -1)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1763 (if (looking-at "^fail$")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1764 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1765 ;; Grab error message from line before last line
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1766 ;; (it was put there by `cd 2>&1')
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1767 (forward-line -1)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1768 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1769 v 'file-error
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1770 "tramp-sh-handle-file-name-all-completions: %s"
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
1771 (buffer-substring (point) (point-at-eol))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1772 ;; For peace of mind, if buffer doesn't end in `fail'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1773 ;; then it should end in `ok'. If neither are in the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1774 ;; buffer something went seriously wrong on the remote
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1775 ;; side.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1776 (unless (looking-at "^ok$")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1777 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1778 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1779 "\
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1780 tramp-sh-handle-file-name-all-completions: internal error accessing `%s': `%s'"
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1781 (tramp-shell-quote-argument localname) (buffer-string))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1782
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1783 (while (zerop (forward-line -1))
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
1784 (push (buffer-substring (point) (point-at-eol)) result)))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1785
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1786 ;; Because the remote op went through OK we know the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1787 ;; directory we `cd'-ed to exists
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1788 (tramp-set-file-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1789 v localname "file-exists-p" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1790
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1791 ;; Because the remote op went through OK we know every
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1792 ;; file listed by `ls' exists.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1793 (mapc (lambda (entry)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1794 (tramp-set-file-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1795 v (concat localname entry) "file-exists-p" t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1796 result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1797
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1798 ;; Store result in the cache
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1799 (tramp-set-file-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1800 v (concat localname filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1801 "file-name-all-completions"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1802 result))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1803
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1804 ;; cp, mv and ln
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1805
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1806 (defun tramp-sh-handle-add-name-to-file
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1807 (filename newname &optional ok-if-already-exists)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1808 "Like `add-name-to-file' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1809 (unless (tramp-equal-remote filename newname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1810 (with-parsed-tramp-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1811 (if (tramp-tramp-file-p filename) filename newname) nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1812 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1813 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1814 "add-name-to-file: %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1815 "only implemented for same method, same user, same host")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1816 (with-parsed-tramp-file-name filename v1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1817 (with-parsed-tramp-file-name newname v2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1818 (let ((ln (when v1 (tramp-get-remote-ln v1))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1819 (when (and (not ok-if-already-exists)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1820 (file-exists-p newname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1821 (not (numberp ok-if-already-exists))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1822 (y-or-n-p
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1823 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1824 "File %s already exists; make it a new name anyway? "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1825 newname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1826 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1827 v2 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1828 "add-name-to-file: file %s already exists" newname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1829 (tramp-flush-file-property v2 (file-name-directory v2-localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1830 (tramp-flush-file-property v2 v2-localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1831 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1832 v1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1833 (format "%s %s %s" ln (tramp-shell-quote-argument v1-localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1834 (tramp-shell-quote-argument v2-localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1835 "error with add-name-to-file, see buffer `%s' for details"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1836 (buffer-name))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1837
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1838 (defun tramp-sh-handle-copy-file
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1839 (filename newname &optional ok-if-already-exists keep-date
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1840 preserve-uid-gid preserve-selinux-context)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1841 "Like `copy-file' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1842 (setq filename (expand-file-name filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1843 (setq newname (expand-file-name newname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1844 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1845 ;; At least one file a Tramp file?
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1846 ((or (tramp-tramp-file-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1847 (tramp-tramp-file-p newname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1848 (tramp-do-copy-or-rename-file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1849 'copy filename newname ok-if-already-exists keep-date
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1850 preserve-uid-gid preserve-selinux-context))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1851 ;; Compat section.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1852 (preserve-selinux-context
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1853 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1854 'copy-file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1855 (list filename newname ok-if-already-exists keep-date
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1856 preserve-uid-gid preserve-selinux-context)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1857 (preserve-uid-gid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1858 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1859 'copy-file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1860 (list filename newname ok-if-already-exists keep-date preserve-uid-gid)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1861 (t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1862 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1863 'copy-file (list filename newname ok-if-already-exists keep-date)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1864
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1865 (defun tramp-sh-handle-copy-directory
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1866 (dirname newname &optional keep-date parents)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1867 "Like `copy-directory' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1868 (let ((t1 (tramp-tramp-file-p dirname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1869 (t2 (tramp-tramp-file-p newname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1870 (with-parsed-tramp-file-name (if t1 dirname newname) nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1871 (if (and (tramp-get-method-parameter method 'tramp-copy-recursive)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1872 ;; When DIRNAME and NEWNAME are remote, they must have
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1873 ;; the same method.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1874 (or (null t1) (null t2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1875 (string-equal
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1876 (tramp-file-name-method (tramp-dissect-file-name dirname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1877 (tramp-file-name-method (tramp-dissect-file-name newname)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1878 ;; scp or rsync DTRT.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1879 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1880 (setq dirname (directory-file-name (expand-file-name dirname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1881 newname (directory-file-name (expand-file-name newname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1882 (if (and (file-directory-p newname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1883 (not (string-equal (file-name-nondirectory dirname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1884 (file-name-nondirectory newname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1885 (setq newname
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1886 (expand-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1887 (file-name-nondirectory dirname) newname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1888 (if (not (file-directory-p (file-name-directory newname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1889 (make-directory (file-name-directory newname) parents))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1890 (tramp-do-copy-or-rename-file-out-of-band
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1891 'copy dirname newname keep-date))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1892 ;; We must do it file-wise.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1893 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1894 'copy-directory (list dirname newname keep-date parents)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1895
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1896 ;; When newname did exist, we have wrong cached values.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1897 (when t2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1898 (with-parsed-tramp-file-name newname nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1899 (tramp-flush-file-property v (file-name-directory localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1900 (tramp-flush-file-property v localname))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1901
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1902 (defun tramp-sh-handle-rename-file
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1903 (filename newname &optional ok-if-already-exists)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1904 "Like `rename-file' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1905 ;; Check if both files are local -- invoke normal rename-file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1906 ;; Otherwise, use Tramp from local system.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1907 (setq filename (expand-file-name filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1908 (setq newname (expand-file-name newname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1909 ;; At least one file a Tramp file?
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1910 (if (or (tramp-tramp-file-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1911 (tramp-tramp-file-p newname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1912 (tramp-do-copy-or-rename-file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1913 'rename filename newname ok-if-already-exists t t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1914 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1915 'rename-file (list filename newname ok-if-already-exists))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1916
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1917 (defun tramp-do-copy-or-rename-file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1918 (op filename newname &optional ok-if-already-exists keep-date
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1919 preserve-uid-gid preserve-selinux-context)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1920 "Copy or rename a remote file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1921 OP must be `copy' or `rename' and indicates the operation to perform.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1922 FILENAME specifies the file to copy or rename, NEWNAME is the name of
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1923 the new file (for copy) or the new name of the file (for rename).
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1924 OK-IF-ALREADY-EXISTS means don't barf if NEWNAME exists already.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1925 KEEP-DATE means to make sure that NEWNAME has the same timestamp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1926 as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1927 the uid and gid if both files are on the same host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1928 PRESERVE-SELINUX-CONTEXT activates selinux commands.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1929
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1930 This function is invoked by `tramp-sh-handle-copy-file' and
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1931 `tramp-sh-handle-rename-file'. It is an error if OP is neither
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1932 of `copy' and `rename'. FILENAME and NEWNAME must be absolute
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
1933 file names."
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1934 (unless (memq op '(copy rename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1935 (error "Unknown operation `%s', must be `copy' or `rename'" op))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1936 (let ((t1 (tramp-tramp-file-p filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1937 (t2 (tramp-tramp-file-p newname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1938 (context (and preserve-selinux-context
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1939 (apply 'file-selinux-context (list filename))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1940 pr tm)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1941
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1942 (with-parsed-tramp-file-name (if t1 filename newname) nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1943 (when (and (not ok-if-already-exists) (file-exists-p newname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1944 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1945 v 'file-already-exists "File %s already exists" newname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1946
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1947 (with-progress-reporter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1948 v 0 (format "%s %s to %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1949 (if (eq op 'copy) "Copying" "Renaming")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1950 filename newname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1951
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1952 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1953 ;; Both are Tramp files.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1954 ((and t1 t2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1955 (with-parsed-tramp-file-name filename v1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1956 (with-parsed-tramp-file-name newname v2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1957 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1958 ;; Shortcut: if method, host, user are the same for
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1959 ;; both files, we invoke `cp' or `mv' on the remote
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1960 ;; host directly.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1961 ((tramp-equal-remote filename newname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1962 (tramp-do-copy-or-rename-file-directly
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1963 op filename newname
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1964 ok-if-already-exists keep-date preserve-uid-gid))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1965
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1966 ;; Try out-of-band operation.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1967 ((tramp-method-out-of-band-p
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
1968 v1 (nth 7 (file-attributes (file-truename filename))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1969 (tramp-do-copy-or-rename-file-out-of-band
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1970 op filename newname keep-date))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1971
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1972 ;; No shortcut was possible. So we copy the file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1973 ;; first. If the operation was `rename', we go back
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1974 ;; and delete the original file (if the copy was
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1975 ;; successful). The approach is simple-minded: we
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1976 ;; create a new buffer, insert the contents of the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1977 ;; source file into it, then write out the buffer to
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1978 ;; the target file. The advantage is that it doesn't
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1979 ;; matter which filename handlers are used for the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1980 ;; source and target file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1981 (t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1982 (tramp-do-copy-or-rename-file-via-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1983 op filename newname keep-date))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1984
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1985 ;; One file is a Tramp file, the other one is local.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1986 ((or t1 t2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1987 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1988 ;; Fast track on local machine.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1989 ((tramp-local-host-p v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1990 (tramp-do-copy-or-rename-file-directly
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1991 op filename newname
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1992 ok-if-already-exists keep-date preserve-uid-gid))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1993
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1994 ;; If the Tramp file has an out-of-band method, the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1995 ;; corresponding copy-program can be invoked.
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
1996 ((tramp-method-out-of-band-p
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
1997 v (nth 7 (file-attributes (file-truename filename))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1998 (tramp-do-copy-or-rename-file-out-of-band
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1999 op filename newname keep-date))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2000
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2001 ;; Use the inline method via a Tramp buffer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2002 (t (tramp-do-copy-or-rename-file-via-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2003 op filename newname keep-date))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2004
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2005 (t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2006 ;; One of them must be a Tramp file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2007 (error "Tramp implementation says this cannot happen")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2008
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2009 ;; Handle `preserve-selinux-context'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2010 (when context (apply 'set-file-selinux-context (list newname context)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2011
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2012 ;; In case of `rename', we must flush the cache of the source file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2013 (when (and t1 (eq op 'rename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2014 (with-parsed-tramp-file-name filename v1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2015 (tramp-flush-file-property v1 (file-name-directory localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2016 (tramp-flush-file-property v1 localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2017
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2018 ;; When newname did exist, we have wrong cached values.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2019 (when t2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2020 (with-parsed-tramp-file-name newname v2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2021 (tramp-flush-file-property v2 (file-name-directory localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2022 (tramp-flush-file-property v2 localname)))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2023
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2024 (defun tramp-do-copy-or-rename-file-via-buffer (op filename newname keep-date)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2025 "Use an Emacs buffer to copy or rename a file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2026 First arg OP is either `copy' or `rename' and indicates the operation.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2027 FILENAME is the source file, NEWNAME the target file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2028 KEEP-DATE is non-nil if NEWNAME should have the same timestamp as FILENAME."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2029 (with-temp-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2030 ;; We must disable multibyte, because binary data shall not be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2031 ;; converted.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2032 (set-buffer-multibyte nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2033 (let ((coding-system-for-read 'binary)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2034 (jka-compr-inhibit t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2035 (insert-file-contents-literally filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2036 ;; We don't want the target file to be compressed, so we let-bind
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2037 ;; `jka-compr-inhibit' to t.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2038 (let ((coding-system-for-write 'binary)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2039 (jka-compr-inhibit t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2040 (write-region (point-min) (point-max) newname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2041 ;; KEEP-DATE handling.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2042 (when keep-date (set-file-times newname (nth 5 (file-attributes filename))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2043 ;; Set the mode.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2044 (set-file-modes newname (tramp-default-file-modes filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2045 ;; If the operation was `rename', delete the original file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2046 (unless (eq op 'copy) (delete-file filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2047
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2048 (defun tramp-do-copy-or-rename-file-directly
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2049 (op filename newname ok-if-already-exists keep-date preserve-uid-gid)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2050 "Invokes `cp' or `mv' on the remote system.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2051 OP must be one of `copy' or `rename', indicating `cp' or `mv',
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2052 respectively. FILENAME specifies the file to copy or rename,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2053 NEWNAME is the name of the new file (for copy) or the new name of
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2054 the file (for rename). Both files must reside on the same host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2055 KEEP-DATE means to make sure that NEWNAME has the same timestamp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2056 as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2057 the uid and gid from FILENAME."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2058 (let ((t1 (tramp-tramp-file-p filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2059 (t2 (tramp-tramp-file-p newname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2060 (file-times (nth 5 (file-attributes filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2061 (file-modes (tramp-default-file-modes filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2062 (with-parsed-tramp-file-name (if t1 filename newname) nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2063 (let* ((cmd (cond ((and (eq op 'copy) preserve-uid-gid) "cp -f -p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2064 ((eq op 'copy) "cp -f")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2065 ((eq op 'rename) "mv -f")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2066 (t (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2067 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2068 "Unknown operation `%s', must be `copy' or `rename'"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2069 op))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2070 (localname1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2071 (if t1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2072 (tramp-file-name-handler 'file-remote-p filename 'localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2073 filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2074 (localname2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2075 (if t2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2076 (tramp-file-name-handler 'file-remote-p newname 'localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2077 newname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2078 (prefix (file-remote-p (if t1 filename newname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2079 cmd-result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2080
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2081 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2082 ;; Both files are on a remote host, with same user.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2083 ((and t1 t2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2084 (setq cmd-result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2085 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2086 v (format "%s %s %s" cmd
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2087 (tramp-shell-quote-argument localname1)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2088 (tramp-shell-quote-argument localname2))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2089 (with-current-buffer (tramp-get-buffer v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2090 (goto-char (point-min))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2091 (unless
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2092 (or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2093 (and keep-date
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2094 ;; Mask cp -f error.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2095 (re-search-forward
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2096 tramp-operation-not-permitted-regexp nil t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2097 cmd-result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2098 (tramp-error-with-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2099 nil v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2100 "Copying directly failed, see buffer `%s' for details."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2101 (buffer-name)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2102
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2103 ;; We are on the local host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2104 ((or t1 t2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2105 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2106 ;; We can do it directly.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2107 ((let (file-name-handler-alist)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2108 (and (file-readable-p localname1)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2109 (file-writable-p (file-name-directory localname2))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2110 (or (file-directory-p localname2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2111 (file-writable-p localname2))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2112 (if (eq op 'copy)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2113 (tramp-compat-copy-file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2114 localname1 localname2 ok-if-already-exists
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2115 keep-date preserve-uid-gid)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2116 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2117 'rename-file (list localname1 localname2 ok-if-already-exists))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2118
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2119 ;; We can do it directly with `tramp-send-command'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2120 ((and (file-readable-p (concat prefix localname1))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2121 (file-writable-p
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2122 (file-name-directory (concat prefix localname2)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2123 (or (file-directory-p (concat prefix localname2))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2124 (file-writable-p (concat prefix localname2))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2125 (tramp-do-copy-or-rename-file-directly
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2126 op (concat prefix localname1) (concat prefix localname2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2127 ok-if-already-exists keep-date t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2128 ;; We must change the ownership to the local user.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2129 (tramp-set-file-uid-gid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2130 (concat prefix localname2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2131 (tramp-get-local-uid 'integer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2132 (tramp-get-local-gid 'integer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2133
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2134 ;; We need a temporary file in between.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2135 (t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2136 ;; Create the temporary file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2137 (let ((tmpfile (tramp-compat-make-temp-file localname1)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2138 (unwind-protect
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2139 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2140 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2141 (t1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2142 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2143 v (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2144 "%s %s %s" cmd
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2145 (tramp-shell-quote-argument localname1)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2146 (tramp-shell-quote-argument tmpfile))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2147 "Copying directly failed, see buffer `%s' for details."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2148 (tramp-get-buffer v))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2149 ;; We must change the ownership as remote user.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2150 ;; Since this does not work reliable, we also
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2151 ;; give read permissions.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2152 (set-file-modes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2153 (concat prefix tmpfile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2154 (tramp-compat-octal-to-decimal "0777"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2155 (tramp-set-file-uid-gid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2156 (concat prefix tmpfile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2157 (tramp-get-local-uid 'integer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2158 (tramp-get-local-gid 'integer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2159 (t2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2160 (if (eq op 'copy)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2161 (tramp-compat-copy-file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2162 localname1 tmpfile t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2163 keep-date preserve-uid-gid)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2164 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2165 'rename-file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2166 (list localname1 tmpfile t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2167 ;; We must change the ownership as local user.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2168 ;; Since this does not work reliable, we also
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2169 ;; give read permissions.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2170 (set-file-modes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2171 tmpfile (tramp-compat-octal-to-decimal "0777"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2172 (tramp-set-file-uid-gid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2173 tmpfile
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2174 (tramp-get-remote-uid v 'integer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2175 (tramp-get-remote-gid v 'integer))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2176
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2177 ;; Move the temporary file to its destination.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2178 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2179 (t2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2180 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2181 v (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2182 "cp -f -p %s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2183 (tramp-shell-quote-argument tmpfile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2184 (tramp-shell-quote-argument localname2))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2185 "Copying directly failed, see buffer `%s' for details."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2186 (tramp-get-buffer v)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2187 (t1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2188 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2189 'rename-file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2190 (list tmpfile localname2 ok-if-already-exists)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2191
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2192 ;; Save exit.
111647
7d109d8678c8 Sync with Tramp 2.2.0.
Michael Albinus <michael.albinus@gmx.de>
parents: 111525
diff changeset
2193 (ignore-errors (delete-file tmpfile)))))))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2194
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2195 ;; Set the time and mode. Mask possible errors.
111647
7d109d8678c8 Sync with Tramp 2.2.0.
Michael Albinus <michael.albinus@gmx.de>
parents: 111525
diff changeset
2196 (ignore-errors
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2197 (when keep-date
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2198 (set-file-times newname file-times)
111647
7d109d8678c8 Sync with Tramp 2.2.0.
Michael Albinus <michael.albinus@gmx.de>
parents: 111525
diff changeset
2199 (set-file-modes newname file-modes))))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2200
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2201 (defun tramp-do-copy-or-rename-file-out-of-band (op filename newname keep-date)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2202 "Invoke rcp program to copy.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2203 The method used must be an out-of-band method."
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2204 (let* ((t1 (tramp-tramp-file-p filename))
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2205 (t2 (tramp-tramp-file-p newname))
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2206 (orig-vec (tramp-dissect-file-name (if t1 filename newname)))
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2207 copy-program copy-args copy-env copy-keep-date port spec
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2208 source target)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2209
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2210 (with-parsed-tramp-file-name (if t1 filename newname) nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2211 (if (and t1 t2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2212
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2213 ;; Both are Tramp files. We shall optimize it, when the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2214 ;; methods for filename and newname are the same.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2215 (let* ((dir-flag (file-directory-p filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2216 (tmpfile (tramp-compat-make-temp-file localname dir-flag)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2217 (if dir-flag
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2218 (setq tmpfile
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2219 (expand-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2220 (file-name-nondirectory newname) tmpfile)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2221 (unwind-protect
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2222 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2223 (tramp-do-copy-or-rename-file-out-of-band
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2224 op filename tmpfile keep-date)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2225 (tramp-do-copy-or-rename-file-out-of-band
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2226 'rename tmpfile newname keep-date))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2227 ;; Save exit.
111647
7d109d8678c8 Sync with Tramp 2.2.0.
Michael Albinus <michael.albinus@gmx.de>
parents: 111525
diff changeset
2228 (ignore-errors
7d109d8678c8 Sync with Tramp 2.2.0.
Michael Albinus <michael.albinus@gmx.de>
parents: 111525
diff changeset
2229 (if dir-flag
7d109d8678c8 Sync with Tramp 2.2.0.
Michael Albinus <michael.albinus@gmx.de>
parents: 111525
diff changeset
2230 (tramp-compat-delete-directory
7d109d8678c8 Sync with Tramp 2.2.0.
Michael Albinus <michael.albinus@gmx.de>
parents: 111525
diff changeset
2231 (expand-file-name ".." tmpfile) 'recursive)
7d109d8678c8 Sync with Tramp 2.2.0.
Michael Albinus <michael.albinus@gmx.de>
parents: 111525
diff changeset
2232 (delete-file tmpfile)))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2233
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2234 ;; Set variables for computing the prompt for reading
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2235 ;; password.
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2236 (setq tramp-current-method (tramp-file-name-method v)
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2237 tramp-current-user (tramp-file-name-user v)
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2238 tramp-current-host (tramp-file-name-host v))
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2239
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2240 ;; Expand hops. Might be necessary for gateway methods.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2241 (setq v (car (tramp-compute-multi-hops v)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2242 (aset v 3 localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2243
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2244 ;; Check which ones of source and target are Tramp files.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2245 (setq source (if t1 (tramp-make-copy-program-file-name v) filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2246 target (funcall
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2247 (if (and (file-directory-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2248 (string-equal
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2249 (file-name-nondirectory filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2250 (file-name-nondirectory newname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2251 'file-name-directory
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2252 'identity)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2253 (if t2 (tramp-make-copy-program-file-name v) newname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2254
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2255 ;; Check for port number. Until now, there's no need for handling
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2256 ;; like method, user, host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2257 (setq host (tramp-file-name-real-host v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2258 port (tramp-file-name-port v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2259 port (or (and port (number-to-string port)) ""))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2260
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2261 ;; Compose copy command.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2262 (setq spec (format-spec-make
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2263 ?h host ?u user ?p port
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2264 ?t (tramp-get-connection-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2265 (tramp-get-connection-process v) "temp-file" "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2266 ?k (if keep-date " " ""))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2267 copy-program (tramp-get-method-parameter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2268 method 'tramp-copy-program)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2269 copy-keep-date (tramp-get-method-parameter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2270 method 'tramp-copy-keep-date)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2271 copy-args
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2272 (delete
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2273 ;; " " has either been a replacement of "%k" (when
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2274 ;; keep-date argument is non-nil), or a replacemtent
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2275 ;; for the whole keep-date sublist.
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2276 " "
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2277 (dolist
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2278 (x
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2279 (tramp-get-method-parameter method 'tramp-copy-args)
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2280 copy-args)
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2281 (setq copy-args
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2282 (append
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2283 copy-args
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2284 (let ((y (mapcar (lambda (z) (format-spec z spec)) x)))
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2285 (if (zerop (length (car y))) '(" ") y))))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2286 copy-env
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2287 (delq
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2288 nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2289 (mapcar
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2290 (lambda (x)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2291 (setq x (mapcar (lambda (y) (format-spec y spec)) x))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2292 (unless (member "" x) (mapconcat 'identity x " ")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2293 (tramp-get-method-parameter method 'tramp-copy-env))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2294
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2295 ;; Check for program.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2296 (when (and (fboundp 'executable-find)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2297 (not (let ((default-directory
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2298 (tramp-compat-temporary-file-directory)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2299 (executable-find copy-program))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2300 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2301 v 'file-error "Cannot find copy program: %s" copy-program))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2302
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2303 (with-temp-buffer
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2304 (unwind-protect
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2305 ;; The default directory must be remote.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2306 (let ((default-directory
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2307 (file-name-directory (if t1 filename newname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2308 (process-environment (copy-sequence process-environment)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2309 ;; Set the transfer process properties.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2310 (tramp-set-connection-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2311 v "process-name" (buffer-name (current-buffer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2312 (tramp-set-connection-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2313 v "process-buffer" (current-buffer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2314 (while copy-env
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2315 (tramp-message
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2316 orig-vec 5 "%s=\"%s\"" (car copy-env) (cadr copy-env))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2317 (setenv (pop copy-env) (pop copy-env)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2318
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2319 ;; Use an asynchronous process. By this, password can
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2320 ;; be handled. The default directory must be local, in
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2321 ;; order to apply the correct `copy-program'. We don't
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2322 ;; set a timeout, because the copying of large files can
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2323 ;; last longer than 60 secs.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2324 (let ((p (let ((default-directory
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2325 (tramp-compat-temporary-file-directory)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2326 (apply 'start-process
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2327 (tramp-get-connection-name v)
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2328 (tramp-get-connection-buffer v)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2329 copy-program
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2330 (append copy-args (list source target))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2331 (tramp-message
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2332 orig-vec 6 "%s"
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2333 (mapconcat 'identity (process-command p) " "))
110776
073caec7510f * net/tramp.el (tramp-handle-directory-files-and-attributes)
Michael Albinus <michael.albinus@gmx.de>
parents: 110762
diff changeset
2334 (tramp-compat-set-process-query-on-exit-flag p nil)
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2335 (tramp-process-actions p v tramp-actions-copy-out-of-band)))
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2336
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2337 ;; Reset the transfer process properties.
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2338 (tramp-message orig-vec 6 "%s" (buffer-string))
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2339 (tramp-set-connection-property v "process-name" nil)
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2340 (tramp-set-connection-property v "process-buffer" nil)))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2341
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2342 ;; Handle KEEP-DATE argument.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2343 (when (and keep-date (not copy-keep-date))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2344 (set-file-times newname (nth 5 (file-attributes filename))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2345
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2346 ;; Set the mode.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2347 (unless (and keep-date copy-keep-date)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2348 (ignore-errors
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2349 (set-file-modes newname (tramp-default-file-modes filename)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2350
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2351 ;; If the operation was `rename', delete the original file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2352 (unless (eq op 'copy)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2353 (if (file-regular-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2354 (delete-file filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2355 (tramp-compat-delete-directory filename 'recursive))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2356
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2357 (defun tramp-sh-handle-make-directory (dir &optional parents)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2358 "Like `make-directory' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2359 (setq dir (expand-file-name dir))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2360 (with-parsed-tramp-file-name dir nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2361 (tramp-flush-directory-property v (file-name-directory localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2362 (save-excursion
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2363 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2364 v (format "%s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2365 (if parents "mkdir -p" "mkdir")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2366 (tramp-shell-quote-argument localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2367 "Couldn't make directory %s" dir))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2368
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2369 (defun tramp-sh-handle-delete-directory (directory &optional recursive)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2370 "Like `delete-directory' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2371 (setq directory (expand-file-name directory))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2372 (with-parsed-tramp-file-name directory nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2373 (tramp-flush-file-property v (file-name-directory localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2374 (tramp-flush-directory-property v localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2375 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2376 v (format "%s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2377 (if recursive "rm -rf" "rmdir")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2378 (tramp-shell-quote-argument localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2379 "Couldn't delete %s" directory)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2380
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2381 (defun tramp-sh-handle-delete-file (filename &optional trash)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2382 "Like `delete-file' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2383 (setq filename (expand-file-name filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2384 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2385 (tramp-flush-file-property v (file-name-directory localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2386 (tramp-flush-file-property v localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2387 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2388 v (format "%s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2389 (or (and trash (tramp-get-remote-trash v)) "rm -f")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2390 (tramp-shell-quote-argument localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2391 "Couldn't delete %s" filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2392
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2393 ;; Dired.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2394
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2395 ;; CCC: This does not seem to be enough. Something dies when
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2396 ;; we try and delete two directories under Tramp :/
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2397 (defun tramp-sh-handle-dired-recursive-delete-directory (filename)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2398 "Recursively delete the directory given.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2399 This is like `dired-recursive-delete-directory' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2400 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2401 ;; Run a shell command 'rm -r <localname>'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2402 ;; Code shamelessly stolen from the dired implementation and, um, hacked :)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2403 (unless (file-exists-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2404 (tramp-error v 'file-error "No such directory: %s" filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2405 ;; Which is better, -r or -R? (-r works for me <daniel@danann.net>)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2406 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2407 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2408 (format "rm -rf %s" (tramp-shell-quote-argument localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2409 ;; Don't read the output, do it explicitely.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2410 nil t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2411 ;; Wait for the remote system to return to us...
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2412 ;; This might take a while, allow it plenty of time.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2413 (tramp-wait-for-output (tramp-get-connection-process v) 120)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2414 ;; Make sure that it worked...
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2415 (tramp-flush-file-property v (file-name-directory localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2416 (tramp-flush-directory-property v localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2417 (and (file-exists-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2418 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2419 v 'file-error "Failed to recursively delete %s" filename))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2420
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2421 (defun tramp-sh-handle-dired-compress-file (file &rest ok-flag)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2422 "Like `dired-compress-file' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2423 ;; OK-FLAG is valid for XEmacs only, but not implemented.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2424 ;; Code stolen mainly from dired-aux.el.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2425 (with-parsed-tramp-file-name file nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2426 (tramp-flush-file-property v localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2427 (save-excursion
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2428 (let ((suffixes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2429 (if (not (featurep 'xemacs))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2430 ;; Emacs case
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2431 (symbol-value 'dired-compress-file-suffixes)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2432 ;; XEmacs has `dired-compression-method-alist', which is
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2433 ;; transformed into `dired-compress-file-suffixes' structure.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2434 (mapcar
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2435 (lambda (x)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2436 (list (concat (regexp-quote (nth 1 x)) "\\'")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2437 nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2438 (mapconcat 'identity (nth 3 x) " ")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2439 (symbol-value 'dired-compression-method-alist))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2440 suffix)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2441 ;; See if any suffix rule matches this file name.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2442 (while suffixes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2443 (let (case-fold-search)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2444 (if (string-match (car (car suffixes)) localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2445 (setq suffix (car suffixes) suffixes nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2446 (setq suffixes (cdr suffixes))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2447
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2448 (cond ((file-symlink-p file)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2449 nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2450 ((and suffix (nth 2 suffix))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2451 ;; We found an uncompression rule.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2452 (with-progress-reporter v 0 (format "Uncompressing %s" file)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2453 (when (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2454 v (concat (nth 2 suffix) " "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2455 (tramp-shell-quote-argument localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2456 ;; `dired-remove-file' is not defined in XEmacs.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2457 (tramp-compat-funcall 'dired-remove-file file)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2458 (string-match (car suffix) file)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2459 (concat (substring file 0 (match-beginning 0))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2460 (t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2461 ;; We don't recognize the file as compressed, so compress it.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2462 ;; Try gzip.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2463 (with-progress-reporter v 0 (format "Compressing %s" file)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2464 (when (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2465 v (concat "gzip -f "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2466 (tramp-shell-quote-argument localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2467 ;; `dired-remove-file' is not defined in XEmacs.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2468 (tramp-compat-funcall 'dired-remove-file file)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2469 (cond ((file-exists-p (concat file ".gz"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2470 (concat file ".gz"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2471 ((file-exists-p (concat file ".z"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2472 (concat file ".z"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2473 (t nil))))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2474
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2475 (defun tramp-sh-handle-insert-directory
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2476 (filename switches &optional wildcard full-directory-p)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2477 "Like `insert-directory' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2478 (setq filename (expand-file-name filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2479 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2480 (if (and (featurep 'ls-lisp)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2481 (not (symbol-value 'ls-lisp-use-insert-directory-program)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2482 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2483 'insert-directory (list filename switches wildcard full-directory-p))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2484 (when (stringp switches)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2485 (setq switches (split-string switches)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2486 (when (and (member "--dired" switches)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2487 (not (tramp-get-ls-command-with-dired v)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2488 (setq switches (delete "--dired" switches)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2489 (when wildcard
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2490 (setq wildcard (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2491 'file-name-nondirectory (list localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2492 (setq localname (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2493 'file-name-directory (list localname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2494 (unless full-directory-p
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2495 (setq switches (add-to-list 'switches "-d" 'append)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2496 (setq switches (mapconcat 'tramp-shell-quote-argument switches " "))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2497 (when wildcard
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2498 (setq switches (concat switches " " wildcard)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2499 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2500 v 4 "Inserting directory `ls %s %s', wildcard %s, fulldir %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2501 switches filename (if wildcard "yes" "no")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2502 (if full-directory-p "yes" "no"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2503 ;; If `full-directory-p', we just say `ls -l FILENAME'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2504 ;; Else we chdir to the parent directory, then say `ls -ld BASENAME'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2505 (if full-directory-p
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2506 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2507 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2508 (format "%s %s %s 2>/dev/null"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2509 (tramp-get-ls-command v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2510 switches
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2511 (if wildcard
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2512 localname
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2513 (tramp-shell-quote-argument (concat localname ".")))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2514 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2515 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2516 (format "cd %s" (tramp-shell-quote-argument
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2517 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2518 'file-name-directory (list localname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2519 "Couldn't `cd %s'"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2520 (tramp-shell-quote-argument
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2521 (tramp-run-real-handler 'file-name-directory (list localname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2522 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2523 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2524 (format "%s %s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2525 (tramp-get-ls-command v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2526 switches
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2527 (if (or wildcard
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2528 (zerop (length
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2529 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2530 'file-name-nondirectory (list localname)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2531 ""
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2532 (tramp-shell-quote-argument
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2533 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2534 'file-name-nondirectory (list localname)))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2535 (let ((beg (point)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2536 ;; We cannot use `insert-buffer-substring' because the Tramp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2537 ;; buffer changes its contents before insertion due to calling
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2538 ;; `expand-file' and alike.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2539 (insert
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2540 (with-current-buffer (tramp-get-buffer v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2541 (buffer-string)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2542
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2543 ;; Check for "--dired" output.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2544 (forward-line -2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2545 (when (looking-at "//SUBDIRED//")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2546 (forward-line -1))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2547 (when (looking-at "//DIRED//\\s-+")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2548 (let ((databeg (match-end 0))
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
2549 (end (point-at-eol)))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2550 ;; Now read the numeric positions of file names.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2551 (goto-char databeg)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2552 (while (< (point) end)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2553 (let ((start (+ beg (read (current-buffer))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2554 (end (+ beg (read (current-buffer)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2555 (if (memq (char-after end) '(?\n ?\ ))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2556 ;; End is followed by \n or by " -> ".
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2557 (put-text-property start end 'dired-filename t))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2558 ;; Remove trailing lines.
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
2559 (goto-char (point-at-bol))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2560 (while (looking-at "//")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2561 (forward-line 1)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2562 (delete-region (match-beginning 0) (point)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2563
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2564 ;; The inserted file could be from somewhere else.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2565 (when (and (not wildcard) (not full-directory-p))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2566 (goto-char (point-max))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2567 (when (file-symlink-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2568 (goto-char (search-backward "->" beg 'noerror)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2569 (search-backward
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2570 (if (zerop (length (file-name-nondirectory filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2571 "."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2572 (file-name-nondirectory filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2573 beg 'noerror)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2574 (replace-match (file-relative-name filename) t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2575
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2576 (goto-char (point-max))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2577
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2578 ;; Canonicalization of file names.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2579
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2580 (defun tramp-sh-handle-expand-file-name (name &optional dir)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2581 "Like `expand-file-name' for Tramp files.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2582 If the localname part of the given filename starts with \"/../\" then
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2583 the result will be a local, non-Tramp, filename."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2584 ;; If DIR is not given, use DEFAULT-DIRECTORY or "/".
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2585 (setq dir (or dir default-directory "/"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2586 ;; Unless NAME is absolute, concat DIR and NAME.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2587 (unless (file-name-absolute-p name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2588 (setq name (concat (file-name-as-directory dir) name)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2589 ;; If NAME is not a Tramp file, run the real handler.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2590 (if (not (tramp-connectable-p name))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2591 (tramp-run-real-handler 'expand-file-name (list name nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2592 ;; Dissect NAME.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2593 (with-parsed-tramp-file-name name nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2594 (unless (tramp-run-real-handler 'file-name-absolute-p (list localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2595 (setq localname (concat "~/" localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2596 ;; Tilde expansion if necessary. This needs a shell which
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2597 ;; groks tilde expansion! The function `tramp-find-shell' is
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2598 ;; supposed to find such a shell on the remote host. Please
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2599 ;; tell me about it when this doesn't work on your system.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2600 (when (string-match "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2601 (let ((uname (match-string 1 localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2602 (fname (match-string 2 localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2603 ;; We cannot simply apply "~/", because under sudo "~/" is
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2604 ;; expanded to the local user home directory but to the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2605 ;; root home directory. On the other hand, using always
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2606 ;; the default user name for tilde expansion is not
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2607 ;; appropriate either, because ssh and companions might
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2608 ;; use a user name from the config file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2609 (when (and (string-equal uname "~")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2610 (string-match "\\`su\\(do\\)?\\'" method))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2611 (setq uname (concat uname user)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2612 (setq uname
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2613 (with-connection-property v uname
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2614 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2615 v (format "cd %s; pwd" (tramp-shell-quote-argument uname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2616 (with-current-buffer (tramp-get-buffer v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2617 (goto-char (point-min))
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
2618 (buffer-substring (point) (point-at-eol)))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2619 (setq localname (concat uname fname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2620 ;; There might be a double slash, for example when "~/"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2621 ;; expands to "/". Remove this.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2622 (while (string-match "//" localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2623 (setq localname (replace-match "/" t t localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2624 ;; No tilde characters in file name, do normal
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2625 ;; `expand-file-name' (this does "/./" and "/../"). We bind
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2626 ;; `directory-sep-char' here for XEmacs on Windows, which would
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2627 ;; otherwise use backslash. `default-directory' is bound,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2628 ;; because on Windows there would be problems with UNC shares or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2629 ;; Cygwin mounts.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2630 (let ((directory-sep-char ?/)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2631 (default-directory (tramp-compat-temporary-file-directory)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2632 (tramp-make-tramp-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2633 method user host
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2634 (tramp-drop-volume-letter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2635 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2636 'expand-file-name (list localname))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2637
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2638 ;;; Remote commands:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2639
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2640 (defun tramp-sh-handle-executable-find (command)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2641 "Like `executable-find' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2642 (with-parsed-tramp-file-name default-directory nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2643 (tramp-find-executable v command (tramp-get-remote-path v) t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2644
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2645 (defun tramp-process-sentinel (proc event)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2646 "Flush file caches."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2647 (unless (memq (process-status proc) '(run open))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2648 (let ((vec (tramp-get-connection-property proc "vector" nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2649 (when vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2650 (tramp-message vec 5 "Sentinel called: `%s' `%s'" proc event)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2651 (tramp-flush-directory-property vec "")))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2652
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2653 ;; We use BUFFER also as connection buffer during setup. Because of
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2654 ;; this, its original contents must be saved, and restored once
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2655 ;; connection has been setup.
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2656 (defun tramp-sh-handle-start-file-process (name buffer program &rest args)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2657 "Like `start-file-process' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2658 (with-parsed-tramp-file-name default-directory nil
111945
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2659 ;; When PROGRAM is nil, we just provide a tty.
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2660 (let ((command
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2661 (when (stringp program)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2662 (format "cd %s; exec %s"
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2663 (tramp-shell-quote-argument localname)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2664 (mapconcat 'tramp-shell-quote-argument
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2665 (cons program args) " "))))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2666 (tramp-process-connection-type
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2667 (or (null program) tramp-process-connection-type))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2668 (bmp (and (buffer-live-p buffer) (buffer-modified-p buffer)))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2669 (name1 name)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2670 (i 0))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2671 (unwind-protect
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2672 (save-excursion
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2673 (save-restriction
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2674 (unless buffer
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2675 ;; BUFFER can be nil. We use a temporary buffer.
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2676 (setq buffer (generate-new-buffer tramp-temp-buffer-name)))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2677 (while (get-process name1)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2678 ;; NAME must be unique as process name.
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2679 (setq i (1+ i)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2680 name1 (format "%s<%d>" name i)))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2681 (setq name name1)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2682 ;; Set the new process properties.
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2683 (tramp-set-connection-property v "process-name" name)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2684 (tramp-set-connection-property v "process-buffer" buffer)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2685 ;; Activate narrowing in order to save BUFFER contents.
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2686 ;; Clear also the modification time; otherwise we might
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2687 ;; be interrupted by `verify-visited-file-modtime'.
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2688 (with-current-buffer (tramp-get-connection-buffer v)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2689 (let ((buffer-undo-list t))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2690 (clear-visited-file-modtime)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2691 (narrow-to-region (point-max) (point-max))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2692 (if command
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2693 ;; Send the command.
111964
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2694 (tramp-send-command v command nil t) ; nooutput
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2695 ;; Check, whether a pty is associated.
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2696 (tramp-maybe-open-connection v)
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2697 (unless (tramp-compat-process-get
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2698 (tramp-get-connection-process v) 'remote-tty)
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2699 (tramp-error
111945
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2700 v 'file-error
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2701 "pty association is not supported for `%s'" name)))))
111964
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2702 (let ((p (tramp-get-connection-process v)))
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2703 ;; Set sentinel and query flag for this process.
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2704 (tramp-set-connection-property p "vector" v)
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2705 (set-process-sentinel p 'tramp-process-sentinel)
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2706 (tramp-compat-set-process-query-on-exit-flag p t)
ec45dfa69a06 * net/tramp.el (tramp-temp-buffer-file-name): Make it permanent-local.
Michael Albinus <michael.albinus@gmx.de>
parents: 111945
diff changeset
2707 ;; Return process.
111945
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2708 p)))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2709 ;; Save exit.
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2710 (with-current-buffer (tramp-get-connection-buffer v)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2711 (if (string-match tramp-temp-buffer-name (buffer-name))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2712 (progn
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2713 (set-process-buffer (tramp-get-connection-process v) nil)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2714 (kill-buffer (current-buffer)))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2715 (set-buffer-modified-p bmp)))
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2716 (tramp-set-connection-property v "process-name" nil)
c00190a8c8ef Merge from emacs-23
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 111788
diff changeset
2717 (tramp-set-connection-property v "process-buffer" nil)))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2718
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2719 (defun tramp-sh-handle-process-file
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2720 (program &optional infile destination display &rest args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2721 "Like `process-file' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2722 ;; The implementation is not complete yet.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2723 (when (and (numberp destination) (zerop destination))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2724 (error "Implementation does not handle immediate return"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2725
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2726 (with-parsed-tramp-file-name default-directory nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2727 (let (command input tmpinput stderr tmpstderr outbuf ret)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2728 ;; Compute command.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2729 (setq command (mapconcat 'tramp-shell-quote-argument
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2730 (cons program args) " "))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2731 ;; Determine input.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2732 (if (null infile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2733 (setq input "/dev/null")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2734 (setq infile (expand-file-name infile))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2735 (if (tramp-equal-remote default-directory infile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2736 ;; INFILE is on the same remote host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2737 (setq input (with-parsed-tramp-file-name infile nil localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2738 ;; INFILE must be copied to remote host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2739 (setq input (tramp-make-tramp-temp-file v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2740 tmpinput (tramp-make-tramp-file-name method user host input))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2741 (copy-file infile tmpinput t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2742 (when input (setq command (format "%s <%s" command input)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2743
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2744 ;; Determine output.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2745 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2746 ;; Just a buffer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2747 ((bufferp destination)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2748 (setq outbuf destination))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2749 ;; A buffer name.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2750 ((stringp destination)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2751 (setq outbuf (get-buffer-create destination)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2752 ;; (REAL-DESTINATION ERROR-DESTINATION)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2753 ((consp destination)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2754 ;; output.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2755 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2756 ((bufferp (car destination))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2757 (setq outbuf (car destination)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2758 ((stringp (car destination))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2759 (setq outbuf (get-buffer-create (car destination))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2760 ((car destination)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2761 (setq outbuf (current-buffer))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2762 ;; stderr.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2763 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2764 ((stringp (cadr destination))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2765 (setcar (cdr destination) (expand-file-name (cadr destination)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2766 (if (tramp-equal-remote default-directory (cadr destination))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2767 ;; stderr is on the same remote host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2768 (setq stderr (with-parsed-tramp-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2769 (cadr destination) nil localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2770 ;; stderr must be copied to remote host. The temporary
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2771 ;; file must be deleted after execution.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2772 (setq stderr (tramp-make-tramp-temp-file v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2773 tmpstderr (tramp-make-tramp-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2774 method user host stderr))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2775 ;; stderr to be discarded.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2776 ((null (cadr destination))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2777 (setq stderr "/dev/null"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2778 ;; 't
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2779 (destination
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2780 (setq outbuf (current-buffer))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2781 (when stderr (setq command (format "%s 2>%s" command stderr)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2782
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2783 ;; Send the command. It might not return in time, so we protect
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2784 ;; it. Call it in a subshell, in order to preserve working
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2785 ;; directory.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2786 (condition-case nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2787 (unwind-protect
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2788 (setq ret
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2789 (if (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2790 v (format "\\cd %s; %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2791 (tramp-shell-quote-argument localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2792 command)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2793 t t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2794 0 1))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2795 ;; We should show the output anyway.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2796 (when outbuf
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2797 (with-current-buffer outbuf
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2798 (insert
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2799 (with-current-buffer (tramp-get-connection-buffer v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2800 (buffer-string))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2801 (when display (display-buffer outbuf))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2802 ;; When the user did interrupt, we should do it also. We use
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2803 ;; return code -1 as marker.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2804 (quit
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2805 (kill-buffer (tramp-get-connection-buffer v))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2806 (setq ret -1))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2807 ;; Handle errors.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2808 (error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2809 (kill-buffer (tramp-get-connection-buffer v))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2810 (setq ret 1)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2811
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2812 ;; Provide error file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2813 (when tmpstderr (rename-file tmpstderr (cadr destination) t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2814
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2815 ;; Cleanup. We remove all file cache values for the connection,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2816 ;; because the remote process could have changed them.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2817 (when tmpinput (delete-file tmpinput))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2818
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2819 ;; `process-file-side-effects' has been introduced with GNU
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2820 ;; Emacs 23.2. If set to `nil', no remote file will be changed
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2821 ;; by `program'. If it doesn't exist, we assume its default
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2822 ;; value 't'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2823 (unless (and (boundp 'process-file-side-effects)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2824 (not (symbol-value 'process-file-side-effects)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2825 (tramp-flush-directory-property v ""))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2826
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2827 ;; Return exit status.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2828 (if (equal ret -1)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2829 (keyboard-quit)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2830 ret))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2831
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2832 (defun tramp-sh-handle-call-process-region
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2833 (start end program &optional delete buffer display &rest args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2834 "Like `call-process-region' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2835 (let ((tmpfile (tramp-compat-make-temp-file "")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2836 (write-region start end tmpfile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2837 (when delete (delete-region start end))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2838 (unwind-protect
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2839 (apply 'call-process program tmpfile buffer display args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2840 (delete-file tmpfile))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2841
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2842 (defun tramp-sh-handle-shell-command
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2843 (command &optional output-buffer error-buffer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2844 "Like `shell-command' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2845 (let* ((asynchronous (string-match "[ \t]*&[ \t]*\\'" command))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2846 ;; We cannot use `shell-file-name' and `shell-command-switch',
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2847 ;; they are variables of the local host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2848 (args (list
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2849 (tramp-get-method-parameter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2850 (tramp-file-name-method
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2851 (tramp-dissect-file-name default-directory))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2852 'tramp-remote-sh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2853 "-c" (substring command 0 asynchronous)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2854 current-buffer-p
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2855 (output-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2856 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2857 ((bufferp output-buffer) output-buffer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2858 ((stringp output-buffer) (get-buffer-create output-buffer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2859 (output-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2860 (setq current-buffer-p t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2861 (current-buffer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2862 (t (get-buffer-create
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2863 (if asynchronous
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2864 "*Async Shell Command*"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2865 "*Shell Command Output*")))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2866 (error-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2867 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2868 ((bufferp error-buffer) error-buffer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2869 ((stringp error-buffer) (get-buffer-create error-buffer))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2870 (buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2871 (if (and (not asynchronous) error-buffer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2872 (with-parsed-tramp-file-name default-directory nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2873 (list output-buffer (tramp-make-tramp-temp-file v)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2874 output-buffer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2875 (p (get-buffer-process output-buffer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2876
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2877 ;; Check whether there is another process running. Tramp does not
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2878 ;; support 2 (asynchronous) processes in parallel.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2879 (when p
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2880 (if (yes-or-no-p "A command is running. Kill it? ")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2881 (ignore-errors (kill-process p))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2882 (error "Shell command in progress")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2883
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2884 (if current-buffer-p
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2885 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2886 (barf-if-buffer-read-only)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2887 (push-mark nil t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2888 (with-current-buffer output-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2889 (setq buffer-read-only nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2890 (erase-buffer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2891
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2892 (if (and (not current-buffer-p) (integerp asynchronous))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2893 (prog1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2894 ;; Run the process.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2895 (apply 'start-file-process "*Async Shell*" buffer args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2896 ;; Display output.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2897 (pop-to-buffer output-buffer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2898 (setq mode-line-process '(":%s"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2899 (shell-mode))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2900
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2901 (prog1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2902 ;; Run the process.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2903 (apply 'process-file (car args) nil buffer nil (cdr args))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2904 ;; Insert error messages if they were separated.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2905 (when (listp buffer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2906 (with-current-buffer error-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2907 (insert-file-contents (cadr buffer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2908 (delete-file (cadr buffer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2909 (if current-buffer-p
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2910 ;; This is like exchange-point-and-mark, but doesn't
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2911 ;; activate the mark. It is cleaner to avoid activation,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2912 ;; even though the command loop would deactivate the mark
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2913 ;; because we inserted text.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2914 (goto-char (prog1 (mark t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2915 (set-marker (mark-marker) (point)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2916 (current-buffer))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2917 ;; There's some output, display it.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2918 (when (with-current-buffer output-buffer (> (point-max) (point-min)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2919 (if (functionp 'display-message-or-buffer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2920 (tramp-compat-funcall 'display-message-or-buffer output-buffer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2921 (pop-to-buffer output-buffer))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2922
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
2923 (defun tramp-sh-handle-file-local-copy (filename)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2924 "Like `file-local-copy' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2925 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2926 (unless (file-exists-p filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2927 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2928 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2929 "Cannot make local copy of non-existing file `%s'" filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2930
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
2931 (let* ((size (nth 7 (file-attributes (file-truename filename))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2932 (rem-enc (tramp-get-inline-coding v "remote-encoding" size))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2933 (loc-dec (tramp-get-inline-coding v "local-decoding" size))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2934 (tmpfile (tramp-compat-make-temp-file filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2935
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2936 (condition-case err
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2937 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2938 ;; `copy-file' handles direct copy and out-of-band methods.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2939 ((or (tramp-local-host-p v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2940 (tramp-method-out-of-band-p v size))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2941 (copy-file filename tmpfile t t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2942
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2943 ;; Use inline encoding for file transfer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2944 (rem-enc
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2945 (save-excursion
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2946 (with-progress-reporter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2947 v 3 (format "Encoding remote file %s" filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2948 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2949 v (format rem-enc (tramp-shell-quote-argument localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2950 "Encoding remote file failed"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2951
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2952 (if (functionp loc-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2953 ;; If local decoding is a function, we call it. We
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2954 ;; must disable multibyte, because
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2955 ;; `uudecode-decode-region' doesn't handle it
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2956 ;; correctly.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2957 (with-temp-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2958 (set-buffer-multibyte nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2959 (insert-buffer-substring (tramp-get-buffer v))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2960 (with-progress-reporter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2961 v 3 (format "Decoding remote file %s with function %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2962 filename loc-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2963 (funcall loc-dec (point-min) (point-max))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2964 ;; Unset `file-name-handler-alist'. Otherwise,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2965 ;; epa-file gets confused.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2966 (let (file-name-handler-alist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2967 (coding-system-for-write 'binary))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2968 (write-region (point-min) (point-max) tmpfile))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2969
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2970 ;; If tramp-decoding-function is not defined for this
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2971 ;; method, we invoke tramp-decoding-command instead.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2972 (let ((tmpfile2 (tramp-compat-make-temp-file filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2973 ;; Unset `file-name-handler-alist'. Otherwise,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2974 ;; epa-file gets confused.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2975 (let (file-name-handler-alist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2976 (coding-system-for-write 'binary))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2977 (write-region (point-min) (point-max) tmpfile2))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2978 (with-progress-reporter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2979 v 3 (format "Decoding remote file %s with command %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2980 filename loc-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2981 (unwind-protect
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2982 (tramp-call-local-coding-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2983 loc-dec tmpfile2 tmpfile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2984 (delete-file tmpfile2)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2985
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2986 ;; Set proper permissions.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2987 (set-file-modes tmpfile (tramp-default-file-modes filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2988 ;; Set local user ownership.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2989 (tramp-set-file-uid-gid tmpfile)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2990
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2991 ;; Oops, I don't know what to do.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2992 (t (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2993 v 'file-error "Wrong method specification for `%s'" method)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2994
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2995 ;; Error handling.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2996 ((error quit)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2997 (delete-file tmpfile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2998 (signal (car err) (cdr err))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2999
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3000 (run-hooks 'tramp-handle-file-local-copy-hook)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3001 tmpfile)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3002
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3003 ;; This is needed for XEmacs only. Code stolen from files.el.
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
3004 (defun tramp-sh-handle-insert-file-contents-literally
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3005 (filename &optional visit beg end replace)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3006 "Like `insert-file-contents-literally' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3007 (let ((format-alist nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3008 (after-insert-file-functions nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3009 (coding-system-for-read 'no-conversion)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3010 (coding-system-for-write 'no-conversion)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3011 (find-buffer-file-type-function
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3012 (if (fboundp 'find-buffer-file-type)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3013 (symbol-function 'find-buffer-file-type)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3014 nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3015 (inhibit-file-name-handlers '(jka-compr-handler image-file-handler))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3016 (inhibit-file-name-operation 'insert-file-contents))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3017 (unwind-protect
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3018 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3019 (fset 'find-buffer-file-type (lambda (filename) t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3020 (insert-file-contents filename visit beg end replace))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3021 ;; Save exit.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3022 (if find-buffer-file-type-function
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3023 (fset 'find-buffer-file-type find-buffer-file-type-function)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3024 (fmakunbound 'find-buffer-file-type)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3025
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
3026 (defun tramp-sh-handle-make-auto-save-file-name ()
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3027 "Like `make-auto-save-file-name' for Tramp files.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3028 Returns a file name in `tramp-auto-save-directory' for autosaving this file."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3029 (let ((tramp-auto-save-directory tramp-auto-save-directory)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3030 (buffer-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3031 (tramp-subst-strs-in-string
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3032 '(("_" . "|")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3033 ("/" . "_a")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3034 (":" . "_b")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3035 ("|" . "__")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3036 ("[" . "_l")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3037 ("]" . "_r"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3038 (buffer-file-name))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3039 ;; File name must be unique. This is ensured with Emacs 22 (see
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3040 ;; UNIQUIFY element of `auto-save-file-name-transforms'); but for
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3041 ;; all other cases we must do it ourselves.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3042 (when (boundp 'auto-save-file-name-transforms)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3043 (mapc
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3044 (lambda (x)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3045 (when (and (string-match (car x) buffer-file-name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3046 (not (car (cddr x))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3047 (setq tramp-auto-save-directory
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3048 (or tramp-auto-save-directory
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3049 (tramp-compat-temporary-file-directory)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3050 (symbol-value 'auto-save-file-name-transforms)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3051 ;; Create directory.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3052 (when tramp-auto-save-directory
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3053 (setq buffer-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3054 (expand-file-name buffer-file-name tramp-auto-save-directory))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3055 (unless (file-exists-p tramp-auto-save-directory)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3056 (make-directory tramp-auto-save-directory t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3057 ;; Run plain `make-auto-save-file-name'. There might be an advice when
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3058 ;; it is not a magic file name operation (since Emacs 22).
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3059 ;; We must deactivate it temporarily.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3060 (if (not (ad-is-active 'make-auto-save-file-name))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3061 (tramp-run-real-handler 'make-auto-save-file-name nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3062 ;; else
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3063 (ad-deactivate 'make-auto-save-file-name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3064 (prog1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3065 (tramp-run-real-handler 'make-auto-save-file-name nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3066 (ad-activate 'make-auto-save-file-name)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3067
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3068 ;; CCC grok LOCKNAME
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
3069 (defun tramp-sh-handle-write-region
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3070 (start end filename &optional append visit lockname confirm)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3071 "Like `write-region' for Tramp files."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3072 (setq filename (expand-file-name filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3073 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3074 ;; Following part commented out because we don't know what to do about
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3075 ;; file locking, and it does not appear to be a problem to ignore it.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3076 ;; Ange-ftp ignores it, too.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3077 ;; (when (and lockname (stringp lockname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3078 ;; (setq lockname (expand-file-name lockname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3079 ;; (unless (or (eq lockname nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3080 ;; (string= lockname filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3081 ;; (error
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
3082 ;; "tramp-sh-handle-write-region: LOCKNAME must be nil or equal FILENAME"))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3083
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3084 ;; XEmacs takes a coding system as the seventh argument, not `confirm'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3085 (when (and (not (featurep 'xemacs)) confirm (file-exists-p filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3086 (unless (y-or-n-p (format "File %s exists; overwrite anyway? " filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3087 (tramp-error v 'file-error "File not overwritten")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3088
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3089 (let ((uid (or (nth 2 (tramp-compat-file-attributes filename 'integer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3090 (tramp-get-remote-uid v 'integer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3091 (gid (or (nth 3 (tramp-compat-file-attributes filename 'integer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3092 (tramp-get-remote-gid v 'integer))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3093
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3094 (if (and (tramp-local-host-p v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3095 ;; `file-writable-p' calls `file-expand-file-name'. We
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3096 ;; cannot use `tramp-run-real-handler' therefore.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3097 (let (file-name-handler-alist)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3098 (and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3099 (file-writable-p (file-name-directory localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3100 (or (file-directory-p localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3101 (file-writable-p localname)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3102 ;; Short track: if we are on the local host, we can run directly.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3103 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3104 'write-region
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3105 (list start end localname append 'no-message lockname confirm))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3106
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3107 (let ((modes (save-excursion (tramp-default-file-modes filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3108 ;; We use this to save the value of
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3109 ;; `last-coding-system-used' after writing the tmp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3110 ;; file. At the end of the function, we set
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3111 ;; `last-coding-system-used' to this saved value. This
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3112 ;; way, any intermediary coding systems used while
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3113 ;; talking to the remote shell or suchlike won't hose
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3114 ;; this variable. This approach was snarfed from
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3115 ;; ange-ftp.el.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3116 coding-system-used
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3117 ;; Write region into a tmp file. This isn't really
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3118 ;; needed if we use an encoding function, but currently
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3119 ;; we use it always because this makes the logic
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3120 ;; simpler.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3121 (tmpfile (or tramp-temp-buffer-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3122 (tramp-compat-make-temp-file filename))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3123
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3124 ;; If `append' is non-nil, we copy the file locally, and let
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3125 ;; the native `write-region' implementation do the job.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3126 (when append (copy-file filename tmpfile 'ok))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3127
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3128 ;; We say `no-message' here because we don't want the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3129 ;; visited file modtime data to be clobbered from the temp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3130 ;; file. We call `set-visited-file-modtime' ourselves later
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3131 ;; on. We must ensure that `file-coding-system-alist'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3132 ;; matches `tmpfile'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3133 (let (file-name-handler-alist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3134 (file-coding-system-alist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3135 (tramp-find-file-name-coding-system-alist filename tmpfile)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3136 (condition-case err
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3137 (tramp-run-real-handler
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3138 'write-region
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3139 (list start end tmpfile append 'no-message lockname confirm))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3140 ((error quit)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3141 (setq tramp-temp-buffer-file-name nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3142 (delete-file tmpfile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3143 (signal (car err) (cdr err))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3144
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3145 ;; Now, `last-coding-system-used' has the right value. Remember it.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3146 (when (boundp 'last-coding-system-used)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3147 (setq coding-system-used
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3148 (symbol-value 'last-coding-system-used))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3149
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3150 ;; The permissions of the temporary file should be set. If
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3151 ;; filename does not exist (eq modes nil) it has been
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3152 ;; renamed to the backup file. This case `save-buffer'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3153 ;; handles permissions.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3154 ;; Ensure, that it is still readable.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3155 (when modes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3156 (set-file-modes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3157 tmpfile
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3158 (logior (or modes 0) (tramp-compat-octal-to-decimal "0400"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3159
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3160 ;; This is a bit lengthy due to the different methods
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3161 ;; possible for file transfer. First, we check whether the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3162 ;; method uses an rcp program. If so, we call it.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3163 ;; Otherwise, both encoding and decoding command must be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3164 ;; specified. However, if the method _also_ specifies an
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3165 ;; encoding function, then that is used for encoding the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3166 ;; contents of the tmp file.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3167 (let* ((size (nth 7 (file-attributes tmpfile)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3168 (rem-dec (tramp-get-inline-coding v "remote-decoding" size))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3169 (loc-enc (tramp-get-inline-coding v "local-encoding" size)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3170 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3171 ;; `copy-file' handles direct copy and out-of-band methods.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3172 ((or (tramp-local-host-p v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3173 (tramp-method-out-of-band-p v size))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3174 (if (and (not (stringp start))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3175 (= (or end (point-max)) (point-max))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3176 (= (or start (point-min)) (point-min))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3177 (tramp-get-method-parameter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3178 method 'tramp-copy-keep-tmpfile))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3179 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3180 (setq tramp-temp-buffer-file-name tmpfile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3181 (condition-case err
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3182 ;; We keep the local file for performance
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3183 ;; reasons, useful for "rsync".
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3184 (copy-file tmpfile filename t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3185 ((error quit)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3186 (setq tramp-temp-buffer-file-name nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3187 (delete-file tmpfile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3188 (signal (car err) (cdr err)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3189 (setq tramp-temp-buffer-file-name nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3190 ;; Don't rename, in order to keep context in SELinux.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3191 (unwind-protect
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3192 (copy-file tmpfile filename t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3193 (delete-file tmpfile))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3194
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3195 ;; Use inline file transfer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3196 (rem-dec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3197 ;; Encode tmpfile.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3198 (unwind-protect
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3199 (with-temp-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3200 (set-buffer-multibyte nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3201 ;; Use encoding function or command.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3202 (if (functionp loc-enc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3203 (with-progress-reporter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3204 v 3 (format "Encoding region using function `%s'"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3205 loc-enc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3206 (let ((coding-system-for-read 'binary))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3207 (insert-file-contents-literally tmpfile))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3208 ;; The following `let' is a workaround for the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3209 ;; base64.el that comes with pgnus-0.84. If
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3210 ;; both of the following conditions are
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3211 ;; satisfied, it tries to write to a local
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3212 ;; file in default-directory, but at this
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3213 ;; point, default-directory is remote.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3214 ;; (`call-process-region' can't write to
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3215 ;; remote files, it seems.) The file in
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3216 ;; question is a tmp file anyway.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3217 (let ((default-directory
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3218 (tramp-compat-temporary-file-directory)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3219 (funcall loc-enc (point-min) (point-max))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3220
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3221 (with-progress-reporter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3222 v 3 (format "Encoding region using command `%s'"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3223 loc-enc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3224 (unless (zerop (tramp-call-local-coding-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3225 loc-enc tmpfile t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3226 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3227 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3228 (concat "Cannot write to `%s', "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3229 "local encoding command `%s' failed")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3230 filename loc-enc))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3231
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3232 ;; Send buffer into remote decoding command which
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3233 ;; writes to remote file. Because this happens on
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3234 ;; the remote host, we cannot use the function.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3235 (with-progress-reporter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3236 v 3
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3237 (format "Decoding region into remote file %s" filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3238 (goto-char (point-max))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3239 (unless (bolp) (newline))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3240 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3241 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3242 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3243 (concat rem-dec " <<'EOF'\n%sEOF")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3244 (tramp-shell-quote-argument localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3245 (buffer-string)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3246 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3247 v nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3248 "Couldn't write region to `%s', decode using `%s' failed"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3249 filename rem-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3250 ;; When `file-precious-flag' is set, the region is
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3251 ;; written to a temporary file. Check that the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3252 ;; checksum is equal to that from the local tmpfile.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3253 (when file-precious-flag
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3254 (erase-buffer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3255 (and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3256 ;; cksum runs locally, if possible.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3257 (zerop (tramp-compat-call-process "cksum" tmpfile t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3258 ;; cksum runs remotely.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3259 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3260 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3261 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3262 "cksum <%s" (tramp-shell-quote-argument localname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3263 ;; ... they are different.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3264 (not
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3265 (string-equal
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3266 (buffer-string)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3267 (with-current-buffer (tramp-get-buffer v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3268 (buffer-string))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3269 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3270 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3271 (concat "Couldn't write region to `%s',"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3272 " decode using `%s' failed")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3273 filename rem-dec)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3274
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3275 ;; Save exit.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3276 (delete-file tmpfile)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3277
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3278 ;; That's not expected.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3279 (t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3280 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3281 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3282 (concat "Method `%s' should specify both encoding and "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3283 "decoding command or an rcp program")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3284 method))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3285
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3286 ;; Make `last-coding-system-used' have the right value.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3287 (when coding-system-used
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3288 (set 'last-coding-system-used coding-system-used))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3289
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3290 (tramp-flush-file-property v (file-name-directory localname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3291 (tramp-flush-file-property v localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3292
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3293 ;; We must protect `last-coding-system-used', now we have set it
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3294 ;; to its correct value.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3295 (let (last-coding-system-used (need-chown t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3296 ;; Set file modification time.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3297 (when (or (eq visit t) (stringp visit))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3298 (let ((file-attr (file-attributes filename)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3299 (set-visited-file-modtime
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3300 ;; We must pass modtime explicitely, because filename can
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3301 ;; be different from (buffer-file-name), f.e. if
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3302 ;; `file-precious-flag' is set.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3303 (nth 5 file-attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3304 (when (and (eq (nth 2 file-attr) uid)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3305 (eq (nth 3 file-attr) gid))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3306 (setq need-chown nil))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3307
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3308 ;; Set the ownership.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3309 (when need-chown
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3310 (tramp-set-file-uid-gid filename uid gid))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3311 (when (or (eq visit t) (null visit) (stringp visit))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3312 (tramp-message v 0 "Wrote %s" filename))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3313 (run-hooks 'tramp-handle-write-region-hook)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3314
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3315 (defvar tramp-vc-registered-file-names nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3316 "List used to collect file names, which are checked during `vc-registered'.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3317
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3318 ;; VC backends check for the existence of various different special
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3319 ;; files. This is very time consuming, because every single check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3320 ;; requires a remote command (the file cache must be invalidated).
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3321 ;; Therefore, we apply a kind of optimization. We install the file
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3322 ;; name handler `tramp-vc-file-name-handler', which does nothing but
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3323 ;; remembers all file names for which `file-exists-p' or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3324 ;; `file-readable-p' has been applied. A first run of `vc-registered'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3325 ;; is performed. Afterwards, a script is applied for all collected
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3326 ;; file names, using just one remote command. The result of this
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3327 ;; script is used to fill the file cache with actual values. Now we
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3328 ;; can reset the file name handlers, and we make a second run of
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3329 ;; `vc-registered', which returns the expected result without sending
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3330 ;; any other remote command.
110762
d6e88106c5b8 Continue reorganization of load dependencies. (Bug#7156)
Michael Albinus <michael.albinus@gmx.de>
parents: 110702
diff changeset
3331 (defun tramp-sh-handle-vc-registered (file)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3332 "Like `vc-registered' for Tramp files."
110374
932697ced7aa * net/tramp-compat.el (tramp-compat-with-temp-message)
Michael Albinus <michael.albinus@gmx.de>
parents: 110321
diff changeset
3333 (tramp-compat-with-temp-message ""
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3334 (with-parsed-tramp-file-name file nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3335 (with-progress-reporter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3336 v 3 (format "Checking `vc-registered' for %s" file)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3337
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3338 ;; There could be new files, created by the vc backend. We
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3339 ;; cannot reuse the old cache entries, therefore.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3340 (let (tramp-vc-registered-file-names
110702
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
3341 (remote-file-name-inhibit-cache (current-time))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3342 (file-name-handler-alist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3343 `((,tramp-file-name-regexp . tramp-vc-file-name-handler))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3344
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3345 ;; Here we collect only file names, which need an operation.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3346 (tramp-run-real-handler 'vc-registered (list file))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3347 (tramp-message v 10 "\n%s" tramp-vc-registered-file-names)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3348
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3349 ;; Send just one command, in order to fill the cache.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3350 (when tramp-vc-registered-file-names
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3351 (tramp-maybe-send-script
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3352 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3353 (format tramp-vc-registered-read-file-names
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3354 (tramp-get-file-exists-command v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3355 (format "%s -r" (tramp-get-test-command v)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3356 "tramp_vc_registered_read_file_names")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3357
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3358 (dolist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3359 (elt
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3360 (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3361 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3362 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3363 "tramp_vc_registered_read_file_names <<'EOF'\n%s\nEOF\n"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3364 (mapconcat 'tramp-shell-quote-argument
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3365 tramp-vc-registered-file-names
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3366 "\n"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3367
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3368 (tramp-set-file-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3369 v (car elt) (cadr elt) (cadr (cdr elt))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3370
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3371 ;; Second run. Now all `file-exists-p' or `file-readable-p'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3372 ;; calls shall be answered from the file cache. We unset
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3373 ;; `process-file-side-effects' in order to keep the cache when
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3374 ;; `process-file' calls appear.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3375 (let (process-file-side-effects)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3376 (tramp-run-real-handler 'vc-registered (list file)))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3377
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3378 ;;;###tramp-autoload
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3379 (defun tramp-sh-file-name-handler (operation &rest args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3380 "Invoke remote-shell Tramp file name handler.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3381 Fall back to normal file name handler if no Tramp handler exists."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3382 (when (and tramp-locked (not tramp-locker))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3383 (setq tramp-locked nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3384 (signal 'file-error (list "Forbidden reentrant call of Tramp")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3385 (let ((tl tramp-locked))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3386 (unwind-protect
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3387 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3388 (setq tramp-locked t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3389 (let ((tramp-locker t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3390 (save-match-data
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3391 (let ((fn (assoc operation tramp-sh-file-name-handler-alist)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3392 (if fn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3393 (apply (cdr fn) args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3394 (tramp-run-real-handler operation args))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3395 (setq tramp-locked tl))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3396
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3397 (defun tramp-vc-file-name-handler (operation &rest args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3398 "Invoke special file name handler, which collects files to be handled."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3399 (save-match-data
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3400 (let ((filename
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3401 (tramp-replace-environment-variables
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3402 (apply 'tramp-file-name-for-operation operation args)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3403 (fn (assoc operation tramp-sh-file-name-handler-alist)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3404 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3405 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3406 ;; That's what we want: file names, for which checks are
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3407 ;; applied. We assume, that VC uses only `file-exists-p' and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3408 ;; `file-readable-p' checks; otherwise we must extend the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3409 ;; list. We do not perform any action, but return nil, in
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3410 ;; order to keep `vc-registered' running.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3411 ((and fn (memq operation '(file-exists-p file-readable-p)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3412 (add-to-list 'tramp-vc-registered-file-names localname 'append)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3413 nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3414 ;; Tramp file name handlers like `expand-file-name'. They
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3415 ;; must still work.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3416 (fn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3417 (save-match-data (apply (cdr fn) args)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3418 ;; Default file name handlers, we don't care.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3419 (t (tramp-run-real-handler operation args)))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3420
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3421 ;;; Internal Functions:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3422
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3423 (defun tramp-maybe-send-script (vec script name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3424 "Define in remote shell function NAME implemented as SCRIPT.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3425 Only send the definition if it has not already been done."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3426 (let* ((p (tramp-get-connection-process vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3427 (scripts (tramp-get-connection-property p "scripts" nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3428 (unless (member name scripts)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3429 (with-progress-reporter vec 5 (format "Sending script `%s'" name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3430 ;; The script could contain a call of Perl. This is masked with `%s'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3431 (tramp-barf-unless-okay
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3432 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3433 (format "%s () {\n%s\n}" name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3434 (format script (tramp-get-remote-perl vec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3435 "Script %s sending failed" name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3436 (tramp-set-connection-property p "scripts" (cons name scripts))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3437
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3438 (defun tramp-set-auto-save ()
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3439 (when (and ;; ange-ftp has its own auto-save mechanism
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3440 (eq (tramp-find-foreign-file-name-handler (buffer-file-name))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3441 'tramp-sh-file-name-handler)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3442 auto-save-default)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3443 (auto-save-mode 1)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3444 (add-hook 'find-file-hooks 'tramp-set-auto-save t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3445 (add-hook 'tramp-unload-hook
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3446 (lambda ()
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3447 (remove-hook 'find-file-hooks 'tramp-set-auto-save)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3448
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3449 (defun tramp-run-test (switch filename)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3450 "Run `test' on the remote system, given a SWITCH and a FILENAME.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3451 Returns the exit code of the `test' program."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3452 (with-parsed-tramp-file-name filename nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3453 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3454 v
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3455 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3456 "%s %s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3457 (tramp-get-test-command v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3458 switch
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3459 (tramp-shell-quote-argument localname)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3460
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3461 (defun tramp-run-test2 (format-string file1 file2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3462 "Run `test'-like program on the remote system, given FILE1, FILE2.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3463 FORMAT-STRING contains the program name, switches, and place holders.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3464 Returns the exit code of the `test' program. Barfs if the methods,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3465 hosts, or files, disagree."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3466 (unless (tramp-equal-remote file1 file2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3467 (with-parsed-tramp-file-name (if (tramp-tramp-file-p file1) file1 file2) nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3468 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3469 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3470 "tramp-run-test2 only implemented for same method, user, host")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3471 (with-parsed-tramp-file-name file1 v1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3472 (with-parsed-tramp-file-name file1 v2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3473 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3474 v1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3475 (format format-string
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3476 (tramp-shell-quote-argument v1-localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3477 (tramp-shell-quote-argument v2-localname))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3478
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3479 (defun tramp-find-executable
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3480 (vec progname dirlist &optional ignore-tilde ignore-path)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3481 "Searches for PROGNAME in $PATH and all directories mentioned in DIRLIST.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3482 First arg VEC specifies the connection, PROGNAME is the program
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3483 to search for, and DIRLIST gives the list of directories to
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3484 search. If IGNORE-TILDE is non-nil, directory names starting
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3485 with `~' will be ignored. If IGNORE-PATH is non-nil, searches
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3486 only in DIRLIST.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3487
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3488 Returns the absolute file name of PROGNAME, if found, and nil otherwise.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3489
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3490 This function expects to be in the right *tramp* buffer."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3491 (with-current-buffer (tramp-get-connection-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3492 (let (result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3493 ;; Check whether the executable is in $PATH. "which(1)" does not
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3494 ;; report always a correct error code; therefore we check the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3495 ;; number of words it returns.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3496 (unless ignore-path
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3497 (tramp-send-command vec (format "which \\%s | wc -w" progname))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3498 (goto-char (point-min))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3499 (if (looking-at "^\\s-*1$")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3500 (setq result (concat "\\" progname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3501 (unless result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3502 (when ignore-tilde
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3503 ;; Remove all ~/foo directories from dirlist. In XEmacs,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3504 ;; `remove' is in CL, and we want to avoid CL dependencies.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3505 (let (newdl d)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3506 (while dirlist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3507 (setq d (car dirlist))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3508 (setq dirlist (cdr dirlist))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3509 (unless (char-equal ?~ (aref d 0))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3510 (setq newdl (cons d newdl))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3511 (setq dirlist (nreverse newdl))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3512 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3513 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3514 (format (concat "while read d; "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3515 "do if test -x $d/%s -a -f $d/%s; "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3516 "then echo tramp_executable $d/%s; "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3517 "break; fi; done <<'EOF'\n"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3518 "%s\nEOF")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3519 progname progname progname (mapconcat 'identity dirlist "\n")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3520 (goto-char (point-max))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3521 (when (search-backward "tramp_executable " nil t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3522 (skip-chars-forward "^ ")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3523 (skip-chars-forward " ")
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
3524 (setq result (buffer-substring (point) (point-at-eol)))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3525 result)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3526
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3527 (defun tramp-set-remote-path (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3528 "Sets the remote environment PATH to existing directories.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3529 I.e., for each directory in `tramp-remote-path', it is tested
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3530 whether it exists and if so, it is added to the environment
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3531 variable PATH."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3532 (tramp-message vec 5 (format "Setting $PATH environment variable"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3533 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3534 vec (format "PATH=%s; export PATH"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3535 (mapconcat 'identity (tramp-get-remote-path vec) ":"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3536
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3537 ;; ------------------------------------------------------------
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3538 ;; -- Communication with external shell --
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3539 ;; ------------------------------------------------------------
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3540
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3541 (defun tramp-find-file-exists-command (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3542 "Find a command on the remote host for checking if a file exists.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3543 Here, we are looking for a command which has zero exit status if the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3544 file exists and nonzero exit status otherwise."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3545 (let ((existing "/")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3546 (nonexisting
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3547 (tramp-shell-quote-argument "/ this file does not exist "))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3548 result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3549 ;; The algorithm is as follows: we try a list of several commands.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3550 ;; For each command, we first run `$cmd /' -- this should return
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3551 ;; true, as the root directory always exists. And then we run
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3552 ;; `$cmd /this\ file\ does\ not\ exist ', hoping that the file indeed
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3553 ;; does not exist. This should return false. We use the first
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3554 ;; command we find that seems to work.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3555 ;; The list of commands to try is as follows:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3556 ;; `ls -d' This works on most systems, but NetBSD 1.4
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3557 ;; has a bug: `ls' always returns zero exit
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3558 ;; status, even for files which don't exist.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3559 ;; `test -e' Some Bourne shells have a `test' builtin
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3560 ;; which does not know the `-e' option.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3561 ;; `/bin/test -e' For those, the `test' binary on disk normally
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3562 ;; provides the option. Alas, the binary
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3563 ;; is sometimes `/bin/test' and sometimes it's
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3564 ;; `/usr/bin/test'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3565 ;; `/usr/bin/test -e' In case `/bin/test' does not exist.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3566 (unless (or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3567 (and (setq result (format "%s -e" (tramp-get-test-command vec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3568 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3569 vec (format "%s %s" result existing))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3570 (not (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3571 vec (format "%s %s" result nonexisting))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3572 (and (setq result "/bin/test -e")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3573 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3574 vec (format "%s %s" result existing))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3575 (not (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3576 vec (format "%s %s" result nonexisting))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3577 (and (setq result "/usr/bin/test -e")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3578 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3579 vec (format "%s %s" result existing))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3580 (not (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3581 vec (format "%s %s" result nonexisting))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3582 (and (setq result (format "%s -d" (tramp-get-ls-command vec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3583 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3584 vec (format "%s %s" result existing))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3585 (not (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3586 vec (format "%s %s" result nonexisting)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3587 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3588 vec 'file-error "Couldn't find command to check if file exists"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3589 result))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3590
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3591 (defun tramp-open-shell (vec shell)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3592 "Opens shell SHELL."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3593 (with-progress-reporter vec 5 (format "Opening remote shell `%s'" shell)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3594 ;; Find arguments for this shell.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3595 (let ((tramp-end-of-output tramp-initial-end-of-output)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3596 (alist tramp-sh-extra-args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3597 item extra-args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3598 (while (and alist (null extra-args))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3599 (setq item (pop alist))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3600 (when (string-match (car item) shell)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3601 (setq extra-args (cdr item))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3602 (when extra-args (setq shell (concat shell " " extra-args)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3603 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3604 vec (format "exec env ENV='' PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3605 (shell-quote-argument tramp-end-of-output) shell)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3606 t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3607 ;; Setting prompts.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3608 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3609 vec (format "PS1=%s" (shell-quote-argument tramp-end-of-output)) t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3610 (tramp-send-command vec "PS2=''" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3611 (tramp-send-command vec "PS3=''" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3612 (tramp-send-command vec "PROMPT_COMMAND=''" t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3613
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3614 (defun tramp-find-shell (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3615 "Opens a shell on the remote host which groks tilde expansion."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3616 (unless (tramp-get-connection-property vec "remote-shell" nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3617 (let (shell)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3618 (with-current-buffer (tramp-get-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3619 (tramp-send-command vec "echo ~root" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3620 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3621 ((or (string-match "^~root$" (buffer-string))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3622 ;; The default shell (ksh93) of OpenSolaris is buggy.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3623 (string-equal (tramp-get-connection-property vec "uname" "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3624 "SunOS 5.11"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3625 (setq shell
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3626 (or (tramp-find-executable
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3627 vec "bash" (tramp-get-remote-path vec) t t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3628 (tramp-find-executable
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3629 vec "ksh" (tramp-get-remote-path vec) t t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3630 (unless shell
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3631 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3632 vec 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3633 "Couldn't find a shell which groks tilde expansion"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3634 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3635 vec 5 "Starting remote shell `%s' for tilde expansion" shell)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3636 (tramp-open-shell vec shell))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3637
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3638 (t (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3639 vec 5 "Remote `%s' groks tilde expansion, good"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3640 (tramp-set-connection-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3641 vec "remote-shell"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3642 (tramp-get-method-parameter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3643 (tramp-file-name-method vec) 'tramp-remote-sh)))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3644
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3645 ;; Utility functions.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3646
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3647 (defun tramp-barf-if-no-shell-prompt (proc timeout &rest error-args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3648 "Wait for shell prompt and barf if none appears.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3649 Looks at process PROC to see if a shell prompt appears in TIMEOUT
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3650 seconds. If not, it produces an error message with the given ERROR-ARGS."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3651 (unless
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3652 (tramp-wait-for-regexp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3653 proc timeout
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3654 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3655 "\\(%s\\|%s\\)\\'" shell-prompt-pattern tramp-shell-prompt-pattern))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3656 (apply 'tramp-error-with-buffer nil proc 'file-error error-args)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3657
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3658 (defun tramp-open-connection-setup-interactive-shell (proc vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3659 "Set up an interactive shell.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3660 Mainly sets the prompt and the echo correctly. PROC is the shell
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3661 process to set up. VEC specifies the connection."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3662 (let ((tramp-end-of-output tramp-initial-end-of-output))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3663 ;; It is useful to set the prompt in the following command because
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3664 ;; some people have a setting for $PS1 which /bin/sh doesn't know
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3665 ;; about and thus /bin/sh will display a strange prompt. For
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3666 ;; example, if $PS1 has "${CWD}" in the value, then ksh will
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3667 ;; display the current working directory but /bin/sh will display
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3668 ;; a dollar sign. The following command line sets $PS1 to a sane
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3669 ;; value, and works under Bourne-ish shells as well as csh-like
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3670 ;; shells. Daniel Pittman reports that the unusual positioning of
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3671 ;; the single quotes makes it work under `rc', too. We also unset
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3672 ;; the variable $ENV because that is read by some sh
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3673 ;; implementations (eg, bash when called as sh) on startup; this
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
3674 ;; way, we avoid the startup file clobbering $PS1. $PROMPT_COMMAND
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3675 ;; is another way to set the prompt in /bin/bash, it must be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3676 ;; discarded as well.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3677 (tramp-open-shell
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3678 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3679 (tramp-get-method-parameter (tramp-file-name-method vec) 'tramp-remote-sh))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3680
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3681 ;; Disable echo.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3682 (tramp-message vec 5 "Setting up remote shell environment")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3683 (tramp-send-command vec "stty -inlcr -echo kill '^U' erase '^H'" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3684 ;; Check whether the echo has really been disabled. Some
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3685 ;; implementations, like busybox of embedded GNU/Linux, don't
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3686 ;; support disabling.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3687 (tramp-send-command vec "echo foo" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3688 (with-current-buffer (process-buffer proc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3689 (goto-char (point-min))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3690 (when (looking-at "echo foo")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3691 (tramp-set-connection-property proc "remote-echo" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3692 (tramp-message vec 5 "Remote echo still on. Ok.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3693 ;; Make sure backspaces and their echo are enabled and no line
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3694 ;; width magic interferes with them.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3695 (tramp-send-command vec "stty icanon erase ^H cols 32767" t))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3696
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3697 (tramp-message vec 5 "Setting shell prompt")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3698 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3699 vec (format "PS1=%s" (shell-quote-argument tramp-end-of-output)) t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3700 (tramp-send-command vec "PS2=''" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3701 (tramp-send-command vec "PS3=''" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3702 (tramp-send-command vec "PROMPT_COMMAND=''" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3703
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3704 ;; Try to set up the coding system correctly.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3705 ;; CCC this can't be the right way to do it. Hm.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3706 (tramp-message vec 5 "Determining coding system")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3707 (tramp-send-command vec "echo foo ; echo bar" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3708 (with-current-buffer (process-buffer proc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3709 (goto-char (point-min))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3710 (if (featurep 'mule)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3711 ;; Use MULE to select the right EOL convention for communicating
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3712 ;; with the process.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3713 (let* ((cs (or (tramp-compat-funcall 'process-coding-system proc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3714 (cons 'undecided 'undecided)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3715 cs-decode cs-encode)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3716 (when (symbolp cs) (setq cs (cons cs cs)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3717 (setq cs-decode (car cs))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3718 (setq cs-encode (cdr cs))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3719 (unless cs-decode (setq cs-decode 'undecided))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3720 (unless cs-encode (setq cs-encode 'undecided))
110776
073caec7510f * net/tramp.el (tramp-handle-directory-files-and-attributes)
Michael Albinus <michael.albinus@gmx.de>
parents: 110762
diff changeset
3721 (setq cs-encode (tramp-compat-coding-system-change-eol-conversion
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3722 cs-encode 'unix))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3723 (when (search-forward "\r" nil t)
110776
073caec7510f * net/tramp.el (tramp-handle-directory-files-and-attributes)
Michael Albinus <michael.albinus@gmx.de>
parents: 110762
diff changeset
3724 (setq cs-decode (tramp-compat-coding-system-change-eol-conversion
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3725 cs-decode 'dos)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3726 (tramp-compat-funcall
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3727 'set-buffer-process-coding-system cs-decode cs-encode)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3728 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3729 vec 5 "Setting coding system to `%s' and `%s'" cs-decode cs-encode))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3730 ;; Look for ^M and do something useful if found.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3731 (when (search-forward "\r" nil t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3732 ;; We have found a ^M but cannot frob the process coding system
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3733 ;; because we're running on a non-MULE Emacs. Let's try
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3734 ;; stty, instead.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3735 (tramp-send-command vec "stty -onlcr" t))))
111009
43818f2cbca0 * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
Michael Albinus <michael.albinus@gmx.de>
parents: 110789
diff changeset
3736
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3737 (tramp-send-command vec "set +o vi +o emacs" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3738
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3739 ;; Check whether the output of "uname -sr" has been changed. If
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3740 ;; yes, this is a strong indication that we must expire all
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3741 ;; connection properties. We start again with
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3742 ;; `tramp-maybe-open-connection', it will be catched there.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3743 (tramp-message vec 5 "Checking system information")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3744 (let ((old-uname (tramp-get-connection-property vec "uname" nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3745 (new-uname
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3746 (tramp-set-connection-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3747 vec "uname"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3748 (tramp-send-command-and-read vec "echo \\\"`uname -sr`\\\""))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3749 (when (and (stringp old-uname) (not (string-equal old-uname new-uname)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3750 (with-current-buffer (tramp-get-debug-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3751 ;; Keep the debug buffer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3752 (rename-buffer
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3753 (generate-new-buffer-name tramp-temp-buffer-name) 'unique)
110702
4e901a2d3669 * files.el (remote-file-name-inhibit-cache): New defcustom.
Michael Albinus <michael.albinus@gmx.de>
parents: 110374
diff changeset
3754 (tramp-cleanup-connection vec)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3755 (if (= (point-min) (point-max))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3756 (kill-buffer nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3757 (rename-buffer (tramp-debug-buffer-name vec) 'unique))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3758 ;; We call `tramp-get-buffer' in order to keep the debug buffer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3759 (tramp-get-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3760 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3761 vec 3
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3762 "Connection reset, because remote host changed from `%s' to `%s'"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3763 old-uname new-uname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3764 (throw 'uname-changed (tramp-maybe-open-connection vec)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3765
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3766 ;; Check whether the remote host suffers from buggy
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3767 ;; `send-process-string'. This is known for FreeBSD (see comment in
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3768 ;; `send_process', file process.c). I've tested sending 624 bytes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3769 ;; successfully, sending 625 bytes failed. Emacs makes a hack when
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3770 ;; this host type is detected locally. It cannot handle remote
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3771 ;; hosts, though.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3772 (with-connection-property proc "chunksize"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3773 (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3774 ((and (integerp tramp-chunksize) (> tramp-chunksize 0))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3775 tramp-chunksize)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3776 (t
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3777 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3778 vec 5 "Checking remote host type for `send-process-string' bug")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3779 (if (string-match
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3780 "^FreeBSD" (tramp-get-connection-property vec "uname" ""))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3781 500 0))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3782
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3783 ;; Set remote PATH variable.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3784 (tramp-set-remote-path vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3785
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3786 ;; Search for a good shell before searching for a command which
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3787 ;; checks if a file exists. This is done because Tramp wants to use
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3788 ;; "test foo; echo $?" to check if various conditions hold, and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3789 ;; there are buggy /bin/sh implementations which don't execute the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3790 ;; "echo $?" part if the "test" part has an error. In particular,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3791 ;; the OpenSolaris /bin/sh is a problem. There are also other
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3792 ;; problems with /bin/sh of OpenSolaris, like redirection of stderr
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3793 ;; in function declarations, or changing HISTFILE in place.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3794 ;; Therefore, OpenSolaris' /bin/sh is replaced by bash, when
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3795 ;; detected.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3796 (tramp-find-shell vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3797
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3798 ;; Disable unexpected output.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3799 (tramp-send-command vec "mesg n; biff n" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3800
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3801 ;; IRIX64 bash expands "!" even when in single quotes. This
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3802 ;; destroys our shell functions, we must disable it. See
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3803 ;; <http://stackoverflow.com/questions/3291692/irix-bash-shell-expands-expression-in-single-quotes-yet-shouldnt>.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3804 (when (string-match "^IRIX64" (tramp-get-connection-property vec "uname" ""))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3805 (tramp-send-command vec "set +H" t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3806
111009
43818f2cbca0 * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
Michael Albinus <michael.albinus@gmx.de>
parents: 110789
diff changeset
3807 ;; On BSD-like systems, ?\t is expanded to spaces. Suppress this.
43818f2cbca0 * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
Michael Albinus <michael.albinus@gmx.de>
parents: 110789
diff changeset
3808 (when (string-match "BSD\\|Darwin"
43818f2cbca0 * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
Michael Albinus <michael.albinus@gmx.de>
parents: 110789
diff changeset
3809 (tramp-get-connection-property vec "uname" ""))
43818f2cbca0 * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
Michael Albinus <michael.albinus@gmx.de>
parents: 110789
diff changeset
3810 (tramp-send-command vec "stty -oxtabs" t))
43818f2cbca0 * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
Michael Albinus <michael.albinus@gmx.de>
parents: 110789
diff changeset
3811
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3812 ;; Set `remote-tty' process property.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3813 (ignore-errors
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3814 (let ((tty (tramp-send-command-and-read vec "echo \\\"`tty`\\\"")))
110374
932697ced7aa * net/tramp-compat.el (tramp-compat-with-temp-message)
Michael Albinus <michael.albinus@gmx.de>
parents: 110321
diff changeset
3815 (unless (zerop (length tty))
932697ced7aa * net/tramp-compat.el (tramp-compat-with-temp-message)
Michael Albinus <michael.albinus@gmx.de>
parents: 110321
diff changeset
3816 (tramp-compat-process-put proc 'remote-tty tty))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3817
111009
43818f2cbca0 * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
Michael Albinus <michael.albinus@gmx.de>
parents: 110789
diff changeset
3818 ;; Dump stty settings in the traces.
43818f2cbca0 * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
Michael Albinus <michael.albinus@gmx.de>
parents: 110789
diff changeset
3819 (when (>= tramp-verbose 9)
43818f2cbca0 * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
Michael Albinus <michael.albinus@gmx.de>
parents: 110789
diff changeset
3820 (tramp-send-command vec "stty -a" t))
43818f2cbca0 * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
Michael Albinus <michael.albinus@gmx.de>
parents: 110789
diff changeset
3821
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3822 ;; Set the environment.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3823 (tramp-message vec 5 "Setting default environment")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3824
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3825 (let ((env (copy-sequence tramp-remote-process-environment))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3826 unset item)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3827 (while env
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3828 (setq item (tramp-compat-split-string (car env) "="))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3829 (setcdr item (mapconcat 'identity (cdr item) "="))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3830 (if (and (stringp (cdr item)) (not (string-equal (cdr item) "")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3831 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3832 vec (format "%s=%s; export %s" (car item) (cdr item) (car item)) t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3833 (push (car item) unset))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3834 (setq env (cdr env)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3835 (when unset
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3836 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3837 vec (format "unset %s" (mapconcat 'identity unset " ")) t))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3838
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3839 ;; CCC: We should either implement a Perl version of base64 encoding
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3840 ;; and decoding. Then we just use that in the last item. The other
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3841 ;; alternative is to use the Perl version of UU encoding. But then
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3842 ;; we need a Lisp version of uuencode.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3843 ;;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3844 ;; Old text from documentation of tramp-methods:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3845 ;; Using a uuencode/uudecode inline method is discouraged, please use one
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3846 ;; of the base64 methods instead since base64 encoding is much more
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3847 ;; reliable and the commands are more standardized between the different
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3848 ;; Unix versions. But if you can't use base64 for some reason, please
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3849 ;; note that the default uudecode command does not work well for some
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3850 ;; Unices, in particular AIX and Irix. For AIX, you might want to use
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3851 ;; the following command for uudecode:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3852 ;;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3853 ;; sed '/^begin/d;/^[` ]$/d;/^end/d' | iconv -f uucode -t ISO8859-1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3854 ;;
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3855 ;; For Irix, no solution is known yet.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3856
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3857 (autoload 'uudecode-decode-region "uudecode")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3858
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3859 (defconst tramp-local-coding-commands
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3860 '((b64 base64-encode-region base64-decode-region)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3861 (uu tramp-uuencode-region uudecode-decode-region)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3862 (pack
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3863 "perl -e 'binmode STDIN; binmode STDOUT; print pack(q{u*}, join q{}, <>)'"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3864 "perl -e 'binmode STDIN; binmode STDOUT; print unpack(q{u*}, join q{}, <>)'"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3865 "List of local coding commands for inline transfer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3866 Each item is a list that looks like this:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3867
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3868 \(FORMAT ENCODING DECODING\)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3869
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3870 FORMAT is symbol describing the encoding/decoding format. It can be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3871 `b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3872
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3873 ENCODING and DECODING can be strings, giving commands, or symbols,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3874 giving functions. If they are strings, then they can contain
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3875 the \"%s\" format specifier. If that specifier is present, the input
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3876 filename will be put into the command line at that spot. If the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3877 specifier is not present, the input should be read from standard
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3878 input.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3879
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3880 If they are functions, they will be called with two arguments, start
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3881 and end of region, and are expected to replace the region contents
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3882 with the encoded or decoded results, respectively.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3883
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3884 (defconst tramp-remote-coding-commands
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
3885 '((b64 "base64" "base64 -d -i")
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
3886 ;; "-i" is more robust with older base64 from GNU coreutils.
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
3887 ;; However, I don't know whether all base64 versions do supports
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
3888 ;; this option.
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
3889 (b64 "base64" "base64 -d")
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3890 (b64 "mimencode -b" "mimencode -u -b")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3891 (b64 "mmencode -b" "mmencode -u -b")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3892 (b64 "recode data..base64" "recode base64..data")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3893 (b64 tramp-perl-encode-with-module tramp-perl-decode-with-module)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3894 (b64 tramp-perl-encode tramp-perl-decode)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3895 (uu "uuencode xxx" "uudecode -o /dev/stdout")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3896 (uu "uuencode xxx" "uudecode -o -")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3897 (uu "uuencode xxx" "uudecode -p")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3898 (uu "uuencode xxx" tramp-uudecode)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3899 (pack
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3900 "perl -e 'binmode STDIN; binmode STDOUT; print pack(q{u*}, join q{}, <>)'"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3901 "perl -e 'binmode STDIN; binmode STDOUT; print unpack(q{u*}, join q{}, <>)'"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3902 "List of remote coding commands for inline transfer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3903 Each item is a list that looks like this:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3904
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3905 \(FORMAT ENCODING DECODING\)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3906
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3907 FORMAT is symbol describing the encoding/decoding format. It can be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3908 `b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3909
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3910 ENCODING and DECODING can be strings, giving commands, or symbols,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3911 giving variables. If they are strings, then they can contain
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3912 the \"%s\" format specifier. If that specifier is present, the input
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3913 filename will be put into the command line at that spot. If the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3914 specifier is not present, the input should be read from standard
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3915 input.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3916
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3917 If they are variables, this variable is a string containing a Perl
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3918 implementation for this functionality. This Perl program will be transferred
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3919 to the remote host, and it is available as shell function with the same name.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3920
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3921 (defun tramp-find-inline-encoding (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3922 "Find an inline transfer encoding that works.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3923 Goes through the list `tramp-local-coding-commands' and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3924 `tramp-remote-coding-commands'."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3925 (save-excursion
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3926 (let ((local-commands tramp-local-coding-commands)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3927 (magic "xyzzy")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3928 loc-enc loc-dec rem-enc rem-dec litem ritem found)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3929 (while (and local-commands (not found))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3930 (setq litem (pop local-commands))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3931 (catch 'wont-work-local
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3932 (let ((format (nth 0 litem))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3933 (remote-commands tramp-remote-coding-commands))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3934 (setq loc-enc (nth 1 litem))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3935 (setq loc-dec (nth 2 litem))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3936 ;; If the local encoder or decoder is a string, the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3937 ;; corresponding command has to work locally.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3938 (if (not (stringp loc-enc))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3939 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3940 vec 5 "Checking local encoding function `%s'" loc-enc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3941 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3942 vec 5 "Checking local encoding command `%s' for sanity" loc-enc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3943 (unless (zerop (tramp-call-local-coding-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3944 loc-enc nil nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3945 (throw 'wont-work-local nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3946 (if (not (stringp loc-dec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3947 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3948 vec 5 "Checking local decoding function `%s'" loc-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3949 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3950 vec 5 "Checking local decoding command `%s' for sanity" loc-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3951 (unless (zerop (tramp-call-local-coding-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3952 loc-dec nil nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3953 (throw 'wont-work-local nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3954 ;; Search for remote coding commands with the same format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3955 (while (and remote-commands (not found))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3956 (setq ritem (pop remote-commands))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3957 (catch 'wont-work-remote
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3958 (when (equal format (nth 0 ritem))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3959 (setq rem-enc (nth 1 ritem))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3960 (setq rem-dec (nth 2 ritem))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3961 ;; Check if remote encoding and decoding commands can be
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3962 ;; called remotely with null input and output. This makes
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3963 ;; sure there are no syntax errors and the command is really
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3964 ;; found. Note that we do not redirect stdout to /dev/null,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3965 ;; for two reasons: when checking the decoding command, we
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3966 ;; actually check the output it gives. And also, when
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3967 ;; redirecting "mimencode" output to /dev/null, then as root
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3968 ;; it might change the permissions of /dev/null!
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3969 (when (not (stringp rem-enc))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3970 (let ((name (symbol-name rem-enc)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3971 (while (string-match (regexp-quote "-") name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3972 (setq name (replace-match "_" nil t name)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3973 (tramp-maybe-send-script vec (symbol-value rem-enc) name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3974 (setq rem-enc name)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3975 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3976 vec 5
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3977 "Checking remote encoding command `%s' for sanity" rem-enc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3978 (unless (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3979 vec (format "%s </dev/null" rem-enc) t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3980 (throw 'wont-work-remote nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3981
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3982 (when (not (stringp rem-dec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3983 (let ((name (symbol-name rem-dec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3984 (while (string-match (regexp-quote "-") name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3985 (setq name (replace-match "_" nil t name)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3986 (tramp-maybe-send-script vec (symbol-value rem-dec) name)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3987 (setq rem-dec name)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3988 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3989 vec 5
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3990 "Checking remote decoding command `%s' for sanity" rem-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3991 (unless (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3992 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3993 (format "echo %s | %s | %s" magic rem-enc rem-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3994 t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3995 (throw 'wont-work-remote nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3996
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3997 (with-current-buffer (tramp-get-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3998 (goto-char (point-min))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3999 (unless (looking-at (regexp-quote magic))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4000 (throw 'wont-work-remote nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4001
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4002 ;; `rem-enc' and `rem-dec' could be a string meanwhile.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4003 (setq rem-enc (nth 1 ritem))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4004 (setq rem-dec (nth 2 ritem))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4005 (setq found t)))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4006
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4007 ;; Did we find something?
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4008 (unless found
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4009 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4010 vec 'file-error "Couldn't find an inline transfer encoding"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4011
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4012 ;; Set connection properties.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4013 (tramp-message vec 5 "Using local encoding `%s'" loc-enc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4014 (tramp-set-connection-property vec "local-encoding" loc-enc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4015 (tramp-message vec 5 "Using local decoding `%s'" loc-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4016 (tramp-set-connection-property vec "local-decoding" loc-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4017 (tramp-message vec 5 "Using remote encoding `%s'" rem-enc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4018 (tramp-set-connection-property vec "remote-encoding" rem-enc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4019 (tramp-message vec 5 "Using remote decoding `%s'" rem-dec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4020 (tramp-set-connection-property vec "remote-decoding" rem-dec))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4021
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4022 (defun tramp-call-local-coding-command (cmd input output)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4023 "Call the local encoding or decoding command.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4024 If CMD contains \"%s\", provide input file INPUT there in command.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4025 Otherwise, INPUT is passed via standard input.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4026 INPUT can also be nil which means `/dev/null'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4027 OUTPUT can be a string (which specifies a filename), or t (which
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4028 means standard output and thus the current buffer), or nil (which
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4029 means discard it)."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4030 (tramp-compat-call-process
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4031 tramp-encoding-shell
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4032 (when (and input (not (string-match "%s" cmd))) input)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4033 (if (eq output t) t nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4034 nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4035 tramp-encoding-command-switch
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4036 (concat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4037 (if (string-match "%s" cmd) (format cmd input) cmd)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4038 (if (stringp output) (concat "> " output) ""))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4039
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4040 (defconst tramp-inline-compress-commands
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4041 '(("gzip" "gzip -d")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4042 ("bzip2" "bzip2 -d")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4043 ("compress" "compress -d"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4044 "List of compress and decompress commands for inline transfer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4045 Each item is a list that looks like this:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4046
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4047 \(COMPRESS DECOMPRESS\)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4048
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4049 COMPRESS or DECOMPRESS are strings with the respective commands.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4050
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4051 (defun tramp-find-inline-compress (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4052 "Find an inline transfer compress command that works.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4053 Goes through the list `tramp-inline-compress-commands'."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4054 (save-excursion
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4055 (let ((commands tramp-inline-compress-commands)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4056 (magic "xyzzy")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4057 item compress decompress
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4058 found)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4059 (while (and commands (not found))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4060 (catch 'next
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4061 (setq item (pop commands)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4062 compress (nth 0 item)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4063 decompress (nth 1 item))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4064 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4065 vec 5
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4066 "Checking local compress command `%s', `%s' for sanity"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4067 compress decompress)
112238
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4068 (unless
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4069 (zerop
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4070 (tramp-call-local-coding-command
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4071 (format
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4072 ;; Windows shells need the program file name after
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4073 ;; the pipe symbol be quoted if they use forward
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4074 ;; slashes as directory separators.
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4075 (if (memq system-type '(windows-nt))
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4076 "echo %s | \"%s\" | \"%s\""
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4077 "echo %s | %s | %s")
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4078 magic compress decompress) nil nil))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4079 (throw 'next nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4080 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4081 vec 5
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4082 "Checking remote compress command `%s', `%s' for sanity"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4083 compress decompress)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4084 (unless (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4085 vec (format "echo %s | %s | %s" magic compress decompress) t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4086 (throw 'next nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4087 (setq found t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4088
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4089 ;; Did we find something?
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4090 (if found
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4091 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4092 ;; Set connection properties.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4093 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4094 vec 5 "Using inline transfer compress command `%s'" compress)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4095 (tramp-set-connection-property vec "inline-compress" compress)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4096 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4097 vec 5 "Using inline transfer decompress command `%s'" decompress)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4098 (tramp-set-connection-property vec "inline-decompress" decompress))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4099
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4100 (tramp-set-connection-property vec "inline-compress" nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4101 (tramp-set-connection-property vec "inline-decompress" nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4102 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4103 vec 2 "Couldn't find an inline transfer compress command")))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4104
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4105 (defun tramp-compute-multi-hops (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4106 "Expands VEC according to `tramp-default-proxies-alist'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4107 Gateway hops are already opened."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4108 (let ((target-alist `(,vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4109 (choices tramp-default-proxies-alist)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4110 item proxy)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4111
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4112 ;; Look for proxy hosts to be passed.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4113 (while choices
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4114 (setq item (pop choices)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4115 proxy (eval (nth 2 item)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4116 (when (and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4117 ;; host
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4118 (string-match (or (eval (nth 0 item)) "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4119 (or (tramp-file-name-host (car target-alist)) ""))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4120 ;; user
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4121 (string-match (or (eval (nth 1 item)) "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4122 (or (tramp-file-name-user (car target-alist)) "")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4123 (if (null proxy)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4124 ;; No more hops needed.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4125 (setq choices nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4126 ;; Replace placeholders.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4127 (setq proxy
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4128 (format-spec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4129 proxy
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4130 (format-spec-make
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4131 ?u (or (tramp-file-name-user (car target-alist)) "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4132 ?h (or (tramp-file-name-host (car target-alist)) ""))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4133 (with-parsed-tramp-file-name proxy l
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4134 ;; Add the hop.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4135 (add-to-list 'target-alist l)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4136 ;; Start next search.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4137 (setq choices tramp-default-proxies-alist)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4138
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4139 ;; Handle gateways.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4140 (when (string-match
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4141 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4142 "^\\(%s\\|%s\\)$" tramp-gw-tunnel-method tramp-gw-socks-method)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4143 (tramp-file-name-method (car target-alist)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4144 (let ((gw (pop target-alist))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4145 (hop (pop target-alist)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4146 ;; Is the method prepared for gateways?
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
4147 (unless (tramp-file-name-port hop)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4148 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4149 vec 'file-error
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
4150 "Connection `%s' is not supported for gateway access." hop))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4151 ;; Open the gateway connection.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4152 (add-to-list
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4153 'target-alist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4154 (vector
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4155 (tramp-file-name-method hop) (tramp-file-name-user hop)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4156 (tramp-compat-funcall 'tramp-gw-open-connection vec gw hop) nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4157 ;; For the password prompt, we need the correct values.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4158 ;; Therefore, we must remember the gateway vector. But we
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4159 ;; cannot do it as connection property, because it shouldn't
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4160 ;; be persistent. And we have no started process yet either.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4161 (tramp-set-file-property (car target-alist) "" "gateway" hop)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4162
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4163 ;; Foreign and out-of-band methods are not supported for multi-hops.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4164 (when (cdr target-alist)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4165 (setq choices target-alist)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4166 (while choices
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4167 (setq item (pop choices))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4168 (when
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4169 (or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4170 (not
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4171 (tramp-get-method-parameter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4172 (tramp-file-name-method item) 'tramp-login-program))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4173 (tramp-get-method-parameter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4174 (tramp-file-name-method item) 'tramp-copy-program))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4175 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4176 vec 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4177 "Method `%s' is not supported for multi-hops."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4178 (tramp-file-name-method item)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4179
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4180 ;; In case the host name is not used for the remote shell
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4181 ;; command, the user could be misguided by applying a random
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4182 ;; hostname.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4183 (let* ((v (car target-alist))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4184 (method (tramp-file-name-method v))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4185 (host (tramp-file-name-host v)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4186 (unless
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4187 (or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4188 ;; There are multi-hops.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4189 (cdr target-alist)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4190 ;; The host name is used for the remote shell command.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4191 (member
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4192 '("%h") (tramp-get-method-parameter method 'tramp-login-args))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4193 ;; The host is local. We cannot use `tramp-local-host-p'
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4194 ;; here, because it opens a connection as well.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4195 (string-match tramp-local-host-regexp host))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4196 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4197 v 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4198 "Host `%s' looks like a remote host, `%s' can only use the local host"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4199 host method)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4200
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4201 ;; Result.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4202 target-alist))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4203
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4204 (defun tramp-maybe-open-connection (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4205 "Maybe open a connection VEC.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4206 Does not do anything if a connection is already open, but re-opens the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4207 connection if a previous connection has died for some reason."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4208 (catch 'uname-changed
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4209 (let ((p (tramp-get-connection-process vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4210 (process-name (tramp-get-connection-property vec "process-name" nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4211 (process-environment (copy-sequence process-environment)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4212
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4213 ;; If too much time has passed since last command was sent, look
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4214 ;; whether process is still alive. If it isn't, kill it. When
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4215 ;; using ssh, it can sometimes happen that the remote end has
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4216 ;; hung up but the local ssh client doesn't recognize this until
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4217 ;; it tries to send some data to the remote end. So that's why
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4218 ;; we try to send a command from time to time, then look again
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4219 ;; whether the process is really alive.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4220 (condition-case nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4221 (when (and (> (tramp-time-diff
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4222 (current-time)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4223 (tramp-get-connection-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4224 p "last-cmd-time" '(0 0 0)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4225 60)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4226 p (processp p) (memq (process-status p) '(run open)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4227 (tramp-send-command vec "echo are you awake" t t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4228 (unless (and (memq (process-status p) '(run open))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4229 (tramp-wait-for-output p 10))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4230 ;; The error will be catched locally.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4231 (tramp-error vec 'file-error "Awake did fail")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4232 (file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4233 (tramp-flush-connection-property vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4234 (tramp-flush-connection-property p)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4235 (delete-process p)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4236 (setq p nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4237
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4238 ;; New connection must be opened.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4239 (unless (and p (processp p) (memq (process-status p) '(run open)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4240
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4241 ;; We call `tramp-get-buffer' in order to get a debug buffer for
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4242 ;; messages from the beginning.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4243 (tramp-get-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4244 (with-progress-reporter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4245 vec 3
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4246 (if (zerop (length (tramp-file-name-user vec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4247 (format "Opening connection for %s using %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4248 (tramp-file-name-host vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4249 (tramp-file-name-method vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4250 (format "Opening connection for %s@%s using %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4251 (tramp-file-name-user vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4252 (tramp-file-name-host vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4253 (tramp-file-name-method vec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4254
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4255 ;; Start new process.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4256 (when (and p (processp p))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4257 (delete-process p))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4258 (setenv "TERM" tramp-terminal-type)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4259 (setenv "LC_ALL" "C")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4260 (setenv "PROMPT_COMMAND")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4261 (setenv "PS1" tramp-initial-end-of-output)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4262 (let* ((target-alist (tramp-compute-multi-hops vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4263 (process-connection-type tramp-process-connection-type)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4264 (process-adaptive-read-buffering nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4265 (coding-system-for-read nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4266 ;; This must be done in order to avoid our file name handler.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4267 (p (let ((default-directory
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4268 (tramp-compat-temporary-file-directory)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4269 (start-process
111788
8e746f396237 * net/tramp.el (tramp-local-host-regexp): Add "localhost6".
Michael Albinus <michael.albinus@gmx.de>
parents: 111647
diff changeset
4270 (tramp-get-connection-name vec)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4271 (tramp-get-connection-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4272 tramp-encoding-shell))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4273
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4274 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4275 vec 6 "%s" (mapconcat 'identity (process-command p) " "))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4276
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4277 ;; Check whether process is alive.
110776
073caec7510f * net/tramp.el (tramp-handle-directory-files-and-attributes)
Michael Albinus <michael.albinus@gmx.de>
parents: 110762
diff changeset
4278 (tramp-compat-set-process-query-on-exit-flag p nil)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4279 (tramp-barf-if-no-shell-prompt
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4280 p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4281
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4282 ;; Now do all the connections as specified.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4283 (while target-alist
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4284 (let* ((hop (car target-alist))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4285 (l-method (tramp-file-name-method hop))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4286 (l-user (tramp-file-name-user hop))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4287 (l-host (tramp-file-name-host hop))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4288 (l-port nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4289 (login-program
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4290 (tramp-get-method-parameter
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4291 l-method 'tramp-login-program))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4292 (login-args
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4293 (tramp-get-method-parameter l-method 'tramp-login-args))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4294 (async-args
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4295 (tramp-get-method-parameter l-method 'tramp-async-args))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4296 (gw-args
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4297 (tramp-get-method-parameter l-method 'tramp-gw-args))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4298 (gw (tramp-get-file-property hop "" "gateway" nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4299 (g-method (and gw (tramp-file-name-method gw)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4300 (g-user (and gw (tramp-file-name-user gw)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4301 (g-host (and gw (tramp-file-name-host gw)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4302 (command login-program)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4303 ;; We don't create the temporary file. In fact,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4304 ;; it is just a prefix for the ControlPath option
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4305 ;; of ssh; the real temporary file has another
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4306 ;; name, and it is created and protected by ssh.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4307 ;; It is also removed by ssh, when the connection
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4308 ;; is closed.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4309 (tmpfile
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4310 (tramp-set-connection-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4311 p "temp-file"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4312 (make-temp-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4313 (expand-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4314 tramp-temp-name-prefix
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4315 (tramp-compat-temporary-file-directory)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4316 spec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4317
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4318 ;; Add arguments for asynchrononous processes.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4319 (when (and process-name async-args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4320 (setq login-args (append async-args login-args)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4322 ;; Add gateway arguments if necessary.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4323 (when (and gw gw-args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4324 (setq login-args (append gw-args login-args)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4325
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4326 ;; Check for port number. Until now, there's no need
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4327 ;; for handling like method, user, host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4328 (when (string-match tramp-host-with-port-regexp l-host)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4329 (setq l-port (match-string 2 l-host)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4330 l-host (match-string 1 l-host)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4331
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4332 ;; Set variables for computing the prompt for reading
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4333 ;; password. They can also be derived from a gateway.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4334 (setq tramp-current-method (or g-method l-method)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4335 tramp-current-user (or g-user l-user)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4336 tramp-current-host (or g-host l-host))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4337
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4338 ;; Replace login-args place holders.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4339 (setq
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4340 l-host (or l-host "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4341 l-user (or l-user "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4342 l-port (or l-port "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4343 spec (format-spec-make
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4344 ?h l-host ?u l-user ?p l-port ?t tmpfile)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4345 command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4346 (concat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4347 ;; We do not want to see the trailing local prompt in
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4348 ;; `start-file-process'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4349 (unless (memq system-type '(windows-nt)) "exec ")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4350 command " "
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4351 (mapconcat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4352 (lambda (x)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4353 (setq x (mapcar (lambda (y) (format-spec y spec)) x))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4354 (unless (member "" x) (mapconcat 'identity x " ")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4355 login-args " ")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4356 ;; Local shell could be a Windows COMSPEC. It
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4357 ;; doesn't know the ";" syntax, but we must exit
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4358 ;; always for `start-file-process'. "exec" does not
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4359 ;; work either.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4360 (if (memq system-type '(windows-nt)) " && exit || exit")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4361
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4362 ;; Send the command.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4363 (tramp-message vec 3 "Sending command `%s'" command)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4364 (tramp-send-command vec command t t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4365 (tramp-process-actions p vec tramp-actions-before-shell 60)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4366 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4367 vec 3 "Found remote shell prompt on `%s'" l-host))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4368 ;; Next hop.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4369 (setq target-alist (cdr target-alist)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4370
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4371 ;; Make initial shell settings.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4372 (tramp-open-connection-setup-interactive-shell p vec)))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4373
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4374 (defun tramp-send-command (vec command &optional neveropen nooutput)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4375 "Send the COMMAND to connection VEC.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4376 Erases temporary buffer before sending the command. If optional
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4377 arg NEVEROPEN is non-nil, never try to open the connection. This
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4378 is meant to be used from `tramp-maybe-open-connection' only. The
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4379 function waits for output unless NOOUTPUT is set."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4380 (unless neveropen (tramp-maybe-open-connection vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4381 (let ((p (tramp-get-connection-process vec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4382 (when (tramp-get-connection-property p "remote-echo" nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4383 ;; We mark the command string that it can be erased in the output buffer.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4384 (tramp-set-connection-property p "check-remote-echo" t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4385 (setq command (format "%s%s%s" tramp-echo-mark command tramp-echo-mark)))
111079
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4386 (when (string-match "<<'EOF'" command)
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
4387 ;; Unset $PS1 when using here documents, in order to avoid
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
4388 ;; multiple prompts.
111079
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4389 (setq command (concat "(PS1= ; " command "\n)")))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4390 ;; Send the command.
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4391 (tramp-message vec 6 "%s" command)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4392 (tramp-send-string vec command)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4393 (unless nooutput (tramp-wait-for-output p))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4394
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4395 (defun tramp-wait-for-output (proc &optional timeout)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4396 "Wait for output from remote command."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4397 (unless (buffer-live-p (process-buffer proc))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4398 (delete-process proc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4399 (tramp-error proc 'file-error "Process `%s' not available, try again" proc))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4400 (with-current-buffer (process-buffer proc)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4401 (let* (;; Initially, `tramp-end-of-output' is "#$ ". There might
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4402 ;; be leading escape sequences, which must be ignored.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4403 (regexp (format "[^#$\n]*%s\r?$" (regexp-quote tramp-end-of-output)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4404 ;; Sometimes, the commands do not return a newline but a
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4405 ;; null byte before the shell prompt, for example "git
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4406 ;; ls-files -c -z ...".
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4407 (regexp1 (format "\\(^\\|\000\\)%s" regexp))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4408 (found (tramp-wait-for-regexp proc timeout regexp1)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4409 (if found
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4410 (let (buffer-read-only)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4411 ;; A simple-minded busybox has sent " ^H" sequences.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4412 ;; Delete them.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4413 (goto-char (point-min))
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
4414 (when (re-search-forward "^\\(.\b\\)+$" (point-at-eol) t)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4415 (forward-line 1)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4416 (delete-region (point-min) (point)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4417 ;; Delete the prompt.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4418 (goto-char (point-max))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4419 (re-search-backward regexp nil t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4420 (delete-region (point) (point-max)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4421 (if timeout
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4422 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4423 proc 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4424 "[[Remote prompt `%s' not found in %d secs]]"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4425 tramp-end-of-output timeout)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4426 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4427 proc 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4428 "[[Remote prompt `%s' not found]]" tramp-end-of-output)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4429 ;; Return value is whether end-of-output sentinel was found.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4430 found)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4431
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4432 (defun tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4433 (vec command &optional subshell dont-suppress-err)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4434 "Run COMMAND and check its exit status.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4435 Sends `echo $?' along with the COMMAND for checking the exit status. If
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4436 COMMAND is nil, just sends `echo $?'. Returns the exit status found.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4437
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4438 If the optional argument SUBSHELL is non-nil, the command is
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4439 executed in a subshell, ie surrounded by parentheses. If
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4440 DONT-SUPPRESS-ERR is non-nil, stderr won't be sent to /dev/null."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4441 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4442 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4443 (concat (if subshell "( " "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4444 command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4445 (if command (if dont-suppress-err "; " " 2>/dev/null; ") "")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4446 "echo tramp_exit_status $?"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4447 (if subshell " )" "")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4448 (with-current-buffer (tramp-get-connection-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4449 (goto-char (point-max))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4450 (unless (re-search-backward "tramp_exit_status [0-9]+" nil t)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4451 (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4452 vec 'file-error "Couldn't find exit status of `%s'" command))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4453 (skip-chars-forward "^ ")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4454 (prog1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4455 (zerop (read (current-buffer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4456 (let (buffer-read-only)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4457 (delete-region (match-beginning 0) (point-max))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4458
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4459 (defun tramp-barf-unless-okay (vec command fmt &rest args)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4460 "Run COMMAND, check exit status, throw error if exit status not okay.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4461 Similar to `tramp-send-command-and-check' but accepts two more arguments
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4462 FMT and ARGS which are passed to `error'."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4463 (unless (tramp-send-command-and-check vec command)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4464 (apply 'tramp-error vec 'file-error fmt args)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4465
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4466 (defun tramp-send-command-and-read (vec command)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4467 "Run COMMAND and return the output, which must be a Lisp expression.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4468 In case there is no valid Lisp expression, it raises an error"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4469 (tramp-barf-unless-okay vec command "`%s' returns with error" command)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4470 (with-current-buffer (tramp-get-connection-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4471 ;; Read the expression.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4472 (goto-char (point-min))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4473 (condition-case nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4474 (prog1 (read (current-buffer))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4475 ;; Error handling.
111525
49c1b16ca6b1 * net/tramp-compat.el (tramp-compat-line-beginning-position)
Michael Albinus <michael.albinus@gmx.de>
parents: 111079
diff changeset
4476 (when (re-search-forward "\\S-" (point-at-eol) t)
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4477 (error nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4478 (error (tramp-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4479 vec 'file-error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4480 "`%s' does not return a valid Lisp expression: `%s'"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4481 command (buffer-string))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4482
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4483 (defun tramp-convert-file-attributes (vec attr)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4484 "Convert file-attributes ATTR generated by perl script, stat or ls.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4485 Convert file mode bits to string and set virtual device number.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4486 Return ATTR."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4487 (when attr
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4488 ;; Convert last access time.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4489 (unless (listp (nth 4 attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4490 (setcar (nthcdr 4 attr)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4491 (list (floor (nth 4 attr) 65536)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4492 (floor (mod (nth 4 attr) 65536)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4493 ;; Convert last modification time.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4494 (unless (listp (nth 5 attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4495 (setcar (nthcdr 5 attr)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4496 (list (floor (nth 5 attr) 65536)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4497 (floor (mod (nth 5 attr) 65536)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4498 ;; Convert last status change time.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4499 (unless (listp (nth 6 attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4500 (setcar (nthcdr 6 attr)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4501 (list (floor (nth 6 attr) 65536)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4502 (floor (mod (nth 6 attr) 65536)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4503 ;; Convert file size.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4504 (when (< (nth 7 attr) 0)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4505 (setcar (nthcdr 7 attr) -1))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4506 (when (and (floatp (nth 7 attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4507 (<= (nth 7 attr) (tramp-compat-most-positive-fixnum)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4508 (setcar (nthcdr 7 attr) (round (nth 7 attr))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4509 ;; Convert file mode bits to string.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4510 (unless (stringp (nth 8 attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4511 (setcar (nthcdr 8 attr) (tramp-file-mode-from-int (nth 8 attr)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4512 (when (stringp (car attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4513 (aset (nth 8 attr) 0 ?l)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4514 ;; Convert directory indication bit.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4515 (when (string-match "^d" (nth 8 attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4516 (setcar attr t))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4517 ;; Convert symlink from `tramp-do-file-attributes-with-stat'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4518 (when (consp (car attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4519 (if (and (stringp (caar attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4520 (string-match ".+ -> .\\(.+\\)." (caar attr)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4521 (setcar attr (match-string 1 (caar attr)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4522 (setcar attr nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4523 ;; Set file's gid change bit.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4524 (setcar (nthcdr 9 attr)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4525 (if (numberp (nth 3 attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4526 (not (= (nth 3 attr)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4527 (tramp-get-remote-gid vec 'integer)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4528 (not (string-equal
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4529 (nth 3 attr)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4530 (tramp-get-remote-gid vec 'string)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4531 ;; Convert inode.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4532 (unless (listp (nth 10 attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4533 (setcar (nthcdr 10 attr)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4534 (condition-case nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4535 (cons (floor (nth 10 attr) 65536)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4536 (floor (mod (nth 10 attr) 65536)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4537 ;; Inodes can be incredible huge. We must hide this.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4538 (error (tramp-get-inode vec)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4539 ;; Set virtual device number.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4540 (setcar (nthcdr 11 attr)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4541 (tramp-get-device vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4542 attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4543
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4544 (defun tramp-check-cached-permissions (vec access)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4545 "Check `file-attributes' caches for VEC.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4546 Return t if according to the cache access type ACCESS is known to
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4547 be granted."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4548 (let ((result nil)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4549 (offset (cond
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4550 ((eq ?r access) 1)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4551 ((eq ?w access) 2)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4552 ((eq ?x access) 3))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4553 (dolist (suffix '("string" "integer") result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4554 (setq
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4555 result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4556 (or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4557 result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4558 (let ((file-attr
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4559 (tramp-get-file-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4560 vec (tramp-file-name-localname vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4561 (concat "file-attributes-" suffix) nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4562 (remote-uid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4563 (tramp-get-connection-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4564 vec (concat "uid-" suffix) nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4565 (remote-gid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4566 (tramp-get-connection-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4567 vec (concat "gid-" suffix) nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4568 (and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4569 file-attr
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4570 (or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4571 ;; Not a symlink
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4572 (eq t (car file-attr))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4573 (null (car file-attr)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4574 (or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4575 ;; World accessible.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4576 (eq access (aref (nth 8 file-attr) (+ offset 6)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4577 ;; User accessible and owned by user.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4578 (and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4579 (eq access (aref (nth 8 file-attr) offset))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4580 (equal remote-uid (nth 2 file-attr)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4581 ;; Group accessible and owned by user's
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4582 ;; principal group.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4583 (and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4584 (eq access (aref (nth 8 file-attr) (+ offset 3)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4585 (equal remote-gid (nth 3 file-attr)))))))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4586
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4587 (defun tramp-file-mode-from-int (mode)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4588 "Turn an integer representing a file mode into an ls(1)-like string."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4589 (let ((type (cdr
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4590 (assoc (logand (lsh mode -12) 15) tramp-file-mode-type-map)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4591 (user (logand (lsh mode -6) 7))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4592 (group (logand (lsh mode -3) 7))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4593 (other (logand (lsh mode -0) 7))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4594 (suid (> (logand (lsh mode -9) 4) 0))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4595 (sgid (> (logand (lsh mode -9) 2) 0))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4596 (sticky (> (logand (lsh mode -9) 1) 0)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4597 (setq user (tramp-file-mode-permissions user suid "s"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4598 (setq group (tramp-file-mode-permissions group sgid "s"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4599 (setq other (tramp-file-mode-permissions other sticky "t"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4600 (concat type user group other)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4601
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4602 (defun tramp-file-mode-permissions (perm suid suid-text)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4603 "Convert a permission bitset into a string.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4604 This is used internally by `tramp-file-mode-from-int'."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4605 (let ((r (> (logand perm 4) 0))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4606 (w (> (logand perm 2) 0))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4607 (x (> (logand perm 1) 0)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4608 (concat (or (and r "r") "-")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4609 (or (and w "w") "-")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4610 (or (and suid x suid-text) ; suid, execute
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4611 (and suid (upcase suid-text)) ; suid, !execute
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4612 (and x "x") "-")))) ; !suid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4613
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4614 (defun tramp-shell-case-fold (string)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4615 "Converts STRING to shell glob pattern which ignores case."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4616 (mapconcat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4617 (lambda (c)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4618 (if (equal (downcase c) (upcase c))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4619 (vector c)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4620 (format "[%c%c]" (downcase c) (upcase c))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4621 string
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4622 ""))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4623
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4624 (defun tramp-make-copy-program-file-name (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4625 "Create a file name suitable to be passed to `rcp' and workalikes."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4626 (let ((user (tramp-file-name-user vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4627 (host (tramp-file-name-real-host vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4628 (localname (tramp-shell-quote-argument
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4629 (tramp-file-name-localname vec))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4630 (if (not (zerop (length user)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4631 (format "%s@%s:%s" user host localname)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4632 (format "%s:%s" host localname))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4633
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4634 (defun tramp-method-out-of-band-p (vec size)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4635 "Return t if this is an out-of-band method, nil otherwise."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4636 (and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4637 ;; It shall be an out-of-band method.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4638 (tramp-get-method-parameter (tramp-file-name-method vec) 'tramp-copy-program)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4639 ;; Either the file size is large enough, or (in rare cases) there
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4640 ;; does not exist a remote encoding.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4641 (or (null tramp-copy-size-limit)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4642 (> size tramp-copy-size-limit)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4643 (null (tramp-get-inline-coding vec "remote-encoding" size)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4644
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4645 ;; Variables local to connection.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4646
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4647 (defun tramp-get-remote-path (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4648 (with-connection-property
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4649 ;; When `tramp-own-remote-path' is in `tramp-remote-path', we
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4650 ;; cache the result for the session only. Otherwise, the result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4651 ;; is cached persistently.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4652 (if (memq 'tramp-own-remote-path tramp-remote-path)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4653 (tramp-get-connection-process vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4654 vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4655 "remote-path"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4656 (let* ((remote-path (copy-tree tramp-remote-path))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4657 (elt1 (memq 'tramp-default-remote-path remote-path))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4658 (elt2 (memq 'tramp-own-remote-path remote-path))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4659 (default-remote-path
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4660 (when elt1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4661 (condition-case nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4662 (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4663 vec "echo \\\"`getconf PATH`\\\"")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4664 ;; Default if "getconf" is not available.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4665 (error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4666 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4667 vec 3
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4668 "`getconf PATH' not successful, using default value \"%s\"."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4669 "/bin:/usr/bin")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4670 "/bin:/usr/bin"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4671 (own-remote-path
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4672 (when elt2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4673 (condition-case nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4674 (tramp-send-command-and-read vec "echo \\\"$PATH\\\"")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4675 ;; Default if "getconf" is not available.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4676 (error
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4677 (tramp-message
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4678 vec 3 "$PATH not set, ignoring `tramp-own-remote-path'.")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4679 nil)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4680
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4681 ;; Replace place holder `tramp-default-remote-path'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4682 (when elt1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4683 (setcdr elt1
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4684 (append
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4685 (tramp-compat-split-string default-remote-path ":")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4686 (cdr elt1)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4687 (setq remote-path (delq 'tramp-default-remote-path remote-path)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4688
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4689 ;; Replace place holder `tramp-own-remote-path'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4690 (when elt2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4691 (setcdr elt2
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4692 (append
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4693 (tramp-compat-split-string own-remote-path ":")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4694 (cdr elt2)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4695 (setq remote-path (delq 'tramp-own-remote-path remote-path)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4696
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4697 ;; Remove double entries.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4698 (setq elt1 remote-path)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4699 (while (consp elt1)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4700 (while (and (car elt1) (setq elt2 (member (car elt1) (cdr elt1))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4701 (setcar elt2 nil))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4702 (setq elt1 (cdr elt1)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4703
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4704 ;; Remove non-existing directories.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4705 (delq
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4706 nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4707 (mapcar
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4708 (lambda (x)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4709 (and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4710 (stringp x)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4711 (file-directory-p
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4712 (tramp-make-tramp-file-name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4713 (tramp-file-name-method vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4714 (tramp-file-name-user vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4715 (tramp-file-name-host vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4716 x))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4717 x))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4718 remote-path)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4719
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4720 (defun tramp-get-remote-tmpdir (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4721 (with-connection-property vec "tmp-directory"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4722 (let ((dir (tramp-shell-quote-argument "/tmp")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4723 (if (and (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4724 vec (format "%s -d %s" (tramp-get-test-command vec) dir))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4725 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4726 vec (format "%s -w %s" (tramp-get-test-command vec) dir)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4727 dir
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4728 (tramp-error vec 'file-error "Directory %s not accessible" dir)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4729
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4730 (defun tramp-get-ls-command (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4731 (with-connection-property vec "ls"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4732 (tramp-message vec 5 "Finding a suitable `ls' command")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4733 (or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4734 (catch 'ls-found
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4735 (dolist (cmd '("ls" "gnuls" "gls"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4736 (let ((dl (tramp-get-remote-path vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4737 result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4738 (while (and dl (setq result (tramp-find-executable vec cmd dl t t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4739 ;; Check parameters. On busybox, "ls" output coloring is
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4740 ;; enabled by default sometimes. So we try to disable it
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4741 ;; when possible. $LS_COLORING is not supported there.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4742 ;; Some "ls" versions are sensible wrt the order of
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4743 ;; arguments, they fail when "-al" is after the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4744 ;; "--color=never" argument (for example on FreeBSD).
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4745 (when (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4746 vec (format "%s -lnd /" result))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4747 (when (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4748 vec (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4749 "%s --color=never -al /dev/null" result))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4750 (setq result (concat result " --color=never")))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4751 (throw 'ls-found result))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4752 (setq dl (cdr dl))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4753 (tramp-error vec 'file-error "Couldn't find a proper `ls' command"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4754
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4755 (defun tramp-get-ls-command-with-dired (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4756 (save-match-data
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4757 (with-connection-property vec "ls-dired"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4758 (tramp-message vec 5 "Checking, whether `ls --dired' works")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4759 ;; Some "ls" versions are sensible wrt the order of arguments,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4760 ;; they fail when "-al" is after the "--dired" argument (for
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4761 ;; example on FreeBSD).
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4762 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4763 vec (format "%s --dired -al /dev/null" (tramp-get-ls-command vec))))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4764
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4765 (defun tramp-get-test-command (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4766 (with-connection-property vec "test"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4767 (tramp-message vec 5 "Finding a suitable `test' command")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4768 (if (tramp-send-command-and-check vec "test 0")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4769 "test"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4770 (tramp-find-executable vec "test" (tramp-get-remote-path vec)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4771
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4772 (defun tramp-get-test-nt-command (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4773 ;; Does `test A -nt B' work? Use abominable `find' construct if it
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4774 ;; doesn't. BSD/OS 4.0 wants the parentheses around the command,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4775 ;; for otherwise the shell crashes.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4776 (with-connection-property vec "test-nt"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4777 (or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4778 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4779 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4780 vec (format "( %s / -nt / )" (tramp-get-test-command vec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4781 (with-current-buffer (tramp-get-buffer vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4782 (goto-char (point-min))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4783 (when (looking-at (regexp-quote tramp-end-of-output))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4784 (format "%s %%s -nt %%s" (tramp-get-test-command vec)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4785 (progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4786 (tramp-send-command
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4787 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4788 (format
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4789 "tramp_test_nt () {\n%s -n \"`find $1 -prune -newer $2 -print`\"\n}"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4790 (tramp-get-test-command vec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4791 "tramp_test_nt %s %s"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4792
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4793 (defun tramp-get-file-exists-command (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4794 (with-connection-property vec "file-exists"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4795 (tramp-message vec 5 "Finding command to check if file exists")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4796 (tramp-find-file-exists-command vec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4797
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4798 (defun tramp-get-remote-ln (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4799 (with-connection-property vec "ln"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4800 (tramp-message vec 5 "Finding a suitable `ln' command")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4801 (tramp-find-executable vec "ln" (tramp-get-remote-path vec))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4802
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4803 (defun tramp-get-remote-perl (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4804 (with-connection-property vec "perl"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4805 (tramp-message vec 5 "Finding a suitable `perl' command")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4806 (let ((result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4807 (or (tramp-find-executable vec "perl5" (tramp-get-remote-path vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4808 (tramp-find-executable
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4809 vec "perl" (tramp-get-remote-path vec)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4810 ;; We must check also for some Perl modules.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4811 (when result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4812 (with-connection-property vec "perl-file-spec"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4813 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4814 vec (format "%s -e 'use File::Spec;'" result)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4815 (with-connection-property vec "perl-cwd-realpath"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4816 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4817 vec (format "%s -e 'use Cwd \"realpath\";'" result))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4818 result)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4819
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4820 (defun tramp-get-remote-stat (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4821 (with-connection-property vec "stat"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4822 (tramp-message vec 5 "Finding a suitable `stat' command")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4823 (let ((result (tramp-find-executable
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4824 vec "stat" (tramp-get-remote-path vec)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4825 tmp)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4826 ;; Check whether stat(1) returns usable syntax. %s does not
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4827 ;; work on older AIX systems.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4828 (when result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4829 (setq tmp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4830 ;; We don't want to display an error message.
110374
932697ced7aa * net/tramp-compat.el (tramp-compat-with-temp-message)
Michael Albinus <michael.albinus@gmx.de>
parents: 110321
diff changeset
4831 (tramp-compat-with-temp-message (or (current-message) "")
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4832 (ignore-errors
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4833 (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4834 vec (format "%s -c '(\"%%N\" %%s)' /" result)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4835 (unless (and (listp tmp) (stringp (car tmp))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4836 (string-match "^./.$" (car tmp))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4837 (integerp (cadr tmp)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4838 (setq result nil)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4839 result)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4840
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4841 (defun tramp-get-remote-readlink (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4842 (with-connection-property vec "readlink"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4843 (tramp-message vec 5 "Finding a suitable `readlink' command")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4844 (let ((result (tramp-find-executable
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4845 vec "readlink" (tramp-get-remote-path vec))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4846 (when (and result
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4847 ;; We don't want to display an error message.
110374
932697ced7aa * net/tramp-compat.el (tramp-compat-with-temp-message)
Michael Albinus <michael.albinus@gmx.de>
parents: 110321
diff changeset
4848 (tramp-compat-with-temp-message (or (current-message) "")
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4849 (ignore-errors
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4850 (tramp-send-command-and-check
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4851 vec (format "%s --canonicalize-missing /" result)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4852 result))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4853
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4854 (defun tramp-get-remote-trash (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4855 (with-connection-property vec "trash"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4856 (tramp-message vec 5 "Finding a suitable `trash' command")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4857 (tramp-find-executable vec "trash" (tramp-get-remote-path vec))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4858
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4859 (defun tramp-get-remote-id (vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4860 (with-connection-property vec "id"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4861 (tramp-message vec 5 "Finding POSIX `id' command")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4862 (or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4863 (catch 'id-found
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4864 (let ((dl (tramp-get-remote-path vec))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4865 result)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4866 (while (and dl (setq result (tramp-find-executable vec "id" dl t t)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4867 ;; Check POSIX parameter.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4868 (when (tramp-send-command-and-check vec (format "%s -u" result))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4869 (throw 'id-found result))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4870 (setq dl (cdr dl)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4871 (tramp-error vec 'file-error "Couldn't find a POSIX `id' command"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4872
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4873 (defun tramp-get-remote-uid (vec id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4874 (with-connection-property vec (format "uid-%s" id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4875 (let ((res (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4876 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4877 (format "%s -u%s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4878 (tramp-get-remote-id vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4879 (if (equal id-format 'integer) "" "n")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4880 (if (equal id-format 'integer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4881 "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/")))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4882 ;; The command might not always return a number.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4883 (if (and (equal id-format 'integer) (not (integerp res))) -1 res))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4884
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4885 (defun tramp-get-remote-gid (vec id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4886 (with-connection-property vec (format "gid-%s" id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4887 (let ((res (tramp-send-command-and-read
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4888 vec
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4889 (format "%s -g%s %s"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4890 (tramp-get-remote-id vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4891 (if (equal id-format 'integer) "" "n")
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4892 (if (equal id-format 'integer)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4893 "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/")))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4894 ;; The command might not always return a number.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4895 (if (and (equal id-format 'integer) (not (integerp res))) -1 res))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4896
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4897 (defun tramp-get-local-uid (id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4898 (if (equal id-format 'integer) (user-uid) (user-login-name)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4899
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4900 (defun tramp-get-local-gid (id-format)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4901 (nth 3 (tramp-compat-file-attributes "~/" id-format)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4902
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4903 ;; Some predefined connection properties.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4904 (defun tramp-get-inline-compress (vec prop size)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4905 "Return the compress command related to PROP.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4906 PROP is either `inline-compress' or `inline-decompress'. SIZE is
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4907 the length of the file to be compressed.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4908
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4909 If no corresponding command is found, nil is returned."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4910 (when (and (integerp tramp-inline-compress-start-size)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4911 (> size tramp-inline-compress-start-size))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4912 (with-connection-property vec prop
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4913 (tramp-find-inline-compress vec)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4914 (tramp-get-connection-property vec prop nil))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4915
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4916 (defun tramp-get-inline-coding (vec prop size)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4917 "Return the coding command related to PROP.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4918 PROP is either `remote-encoding', `remode-decoding',
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4919 `local-encoding' or `local-decoding'.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4920
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4921 SIZE is the length of the file to be coded. Depending on SIZE,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4922 compression might be applied.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4923
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4924 If no corresponding command is found, nil is returned.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4925 Otherwise, either a string is returned which contains a `%s' mark
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4926 to be used for the respective input or output file; or a Lisp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4927 function cell is returned to be applied on a buffer."
111079
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4928 ;; We must catch the errors, because we want to return `nil', when
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4929 ;; no inline coding is found.
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4930 (ignore-errors
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4931 (let ((coding
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4932 (with-connection-property vec prop
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4933 (tramp-find-inline-encoding vec)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4934 (tramp-get-connection-property vec prop nil)))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4935 (prop1 (if (string-match "encoding" prop)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4936 "inline-compress" "inline-decompress"))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4937 compress)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4938 ;; The connection property might have been cached. So we must
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4939 ;; send the script to the remote side - maybe.
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4940 (when (and coding (symbolp coding) (string-match "remote" prop))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4941 (let ((name (symbol-name coding)))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4942 (while (string-match (regexp-quote "-") name)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4943 (setq name (replace-match "_" nil t name)))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4944 (tramp-maybe-send-script vec (symbol-value coding) name)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4945 (setq coding name)))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4946 (when coding
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4947 ;; Check for the `compress' command.
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4948 (setq compress (tramp-get-inline-compress vec prop1 size))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4949 ;; Return the value.
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4950 (cond
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4951 ((and compress (symbolp coding))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4952 (if (string-match "decompress" prop1)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4953 `(lambda (beg end)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4954 (,coding beg end)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4955 (let ((coding-system-for-write 'binary)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4956 (coding-system-for-read 'binary))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4957 (apply
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4958 'call-process-region (point-min) (point-max)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4959 (car (split-string ,compress)) t t nil
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4960 (cdr (split-string ,compress)))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4961 `(lambda (beg end)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4962 (let ((coding-system-for-write 'binary)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4963 (coding-system-for-read 'binary))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4964 (apply
111079
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4965 'call-process-region beg end
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4966 (car (split-string ,compress)) t t nil
111079
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4967 (cdr (split-string ,compress))))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4968 (,coding (point-min) (point-max)))))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4969 ((symbolp coding)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4970 coding)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4971 ((and compress (string-match "decoding" prop))
112238
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4972 (format
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4973 ;; Windows shells need the program file name after
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4974 ;; the pipe symbol be quoted if they use forward
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4975 ;; slashes as directory separators.
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4976 (if (and (string-match "local" prop)
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4977 (memq system-type '(windows-nt)))
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4978 "(%s | \"%s\" >%%s)"
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4979 "(%s | %s >%%s)")
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4980 coding compress))
111079
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4981 (compress
112238
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4982 (format
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4983 ;; Windows shells need the program file name after
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4984 ;; the pipe symbol be quoted if they use forward
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4985 ;; slashes as directory separators.
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4986 (if (and (string-match "local" prop)
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4987 (memq system-type '(windows-nt)))
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4988 "(%s <%%s | \"%s\")"
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4989 "(%s <%%s | %s)")
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
4990 compress coding))
111079
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4991 ((string-match "decoding" prop)
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4992 (format "%s >%%s" coding))
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4993 (t
15b14005a6f2 * net/tramp-sh.el (tramp-do-file-attributes-with-stat): Do not use
Michael Albinus <michael.albinus@gmx.de>
parents: 111034
diff changeset
4994 (format "%s <%%s" coding)))))))
110321
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4995
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4996 ;;; Integration of eshell.el:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4997
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4998 (eval-when-compile
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4999 (defvar eshell-path-env))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5000
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5001 ;; eshell.el keeps the path in `eshell-path-env'. We must change it
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5002 ;; when `default-directory' points to another host.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5003 (defun tramp-eshell-directory-change ()
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5004 "Set `eshell-path-env' to $PATH of the host related to `default-directory'."
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5005 (setq eshell-path-env
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5006 (if (file-remote-p default-directory)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5007 (with-parsed-tramp-file-name default-directory nil
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5008 (mapconcat
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5009 'identity
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5010 (tramp-get-remote-path v)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5011 ":"))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5012 (getenv "PATH"))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5013
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5014 (eval-after-load "esh-util"
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5015 '(progn
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5016 (tramp-eshell-directory-change)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5017 (add-hook 'eshell-directory-change-hook
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5018 'tramp-eshell-directory-change)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5019 (add-hook 'tramp-unload-hook
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5020 (lambda ()
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5021 (remove-hook 'eshell-directory-change-hook
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5022 'tramp-eshell-directory-change)))))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5023
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5024 (add-hook 'tramp-unload-hook
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5025 (lambda ()
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5026 (unload-feature 'tramp-sh 'force)))
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5027
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5028 (provide 'tramp-sh)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5029
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5030 ;;; TODO:
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5031
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5032 ;; * Don't use globbing for directories with many files, as this is
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5033 ;; likely to produce long command lines, and some shells choke on
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5034 ;; long command lines.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5035 ;; * Make it work for different encodings, and for different file name
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5036 ;; encodings, too. (Daniel Pittman)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5037 ;; * Don't search for perl5 and perl. Instead, only search for perl and
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5038 ;; then look if it's the right version (with `perl -v').
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5039 ;; * When editing a remote CVS controlled file as a different user, VC
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5040 ;; gets confused about the file locking status. Try to find out why
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5041 ;; the workaround doesn't work.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5042 ;; * Allow out-of-band methods as _last_ multi-hop. Open a connection
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5043 ;; until the last but one hop via `start-file-process'. Apply it
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5044 ;; also for ftp and smb.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5045 ;; * WIBNI if we had a command "trampclient"? If I was editing in
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5046 ;; some shell with root priviledges, it would be nice if I could
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5047 ;; just call
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5048 ;; trampclient filename.c
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5049 ;; as an editor, and the _current_ shell would connect to an Emacs
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5050 ;; server and would be used in an existing non-priviledged Emacs
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5051 ;; session for doing the editing in question.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5052 ;; That way, I need not tell Emacs my password again and be afraid
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5053 ;; that it makes it into core dumps or other ugly stuff (I had Emacs
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5054 ;; once display a just typed password in the context of a keyboard
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5055 ;; sequence prompt for a question immediately following in a shell
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5056 ;; script run within Emacs -- nasty).
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5057 ;; And if I have some ssh session running to a different computer,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5058 ;; having the possibility of passing a local file there to a local
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5059 ;; Emacs session (in case I can arrange for a connection back) would
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5060 ;; be nice.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5061 ;; Likely the corresponding Tramp server should not allow the
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5062 ;; equivalent of the emacsclient -eval option in order to make this
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5063 ;; reasonably unproblematic. And maybe trampclient should have some
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5064 ;; way of passing credentials, like by using an SSL socket or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5065 ;; something. (David Kastrup)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5066 ;; * Reconnect directly to a compliant shell without first going
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5067 ;; through the user's default shell. (Pete Forman)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5068 ;; * How can I interrupt the remote process with a signal
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5069 ;; (interrupt-process seems not to work)? (Markus Triska)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5070 ;; * Avoid the local shell entirely for starting remote processes. If
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5071 ;; so, I think even a signal, when delivered directly to the local
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5072 ;; SSH instance, would correctly be propagated to the remote process
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5073 ;; automatically; possibly SSH would have to be started with
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5074 ;; "-t". (Markus Triska)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5075 ;; * It makes me wonder if tramp couldn't fall back to ssh when scp
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5076 ;; isn't on the remote host. (Mark A. Hershberger)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5077 ;; * Use lsh instead of ssh. (Alfred M. Szmidt)
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5078 ;; * Optimize out-of-band copying, when both methods are scp-like (not
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5079 ;; rsync).
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5080 ;; * Keep a second connection open for out-of-band methods like scp or
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5081 ;; rsync.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5082 ;; * Try telnet+curl as new method. It might be useful for busybox,
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5083 ;; without built-in uuencode/uudecode.
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5084
4b26adbef9a2 Major code cleanup. Split tramp.el into tramp.el and tramp-sh.el.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5085 ;;; tramp-sh.el ends here