changeset 84406:38bcf4ef30c3

* net/tramp.el (top): Remove declarations of `tramp-gw-*' symbols, they are useless with the byte compiler. (tramp-make-temp-file, tramp-make-tramp-temp-file): Move up. (tramp-do-copy-or-rename-file-directly): Rearrange let-bindings. (tramp-compute-multi-hops): Mask `tramp-gw-*' symbols. (tramp-file-name-real-host, tramp-file-name-port) (tramp-find-method, tramp-find-user, tramp-find-host): Make them defuns. * net/tramp-cache.el (top): Improve error message when `tramp-persistency-file-name' is corrupted.
author Michael Albinus <michael.albinus@gmx.de>
date Sun, 09 Sep 2007 08:31:27 +0000
parents 13336fdc4429
children 54d6b66f0b5c
files lisp/ChangeLog lisp/net/tramp-cache.el lisp/net/tramp.el
diffstat 3 files changed, 157 insertions(+), 144 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sun Sep 09 07:51:35 2007 +0000
+++ b/lisp/ChangeLog	Sun Sep 09 08:31:27 2007 +0000
@@ -1,3 +1,17 @@
+2007-09-09  Michael Albinus  <michael.albinus@gmx.de>
+
+	* net/tramp.el (top): Remove declarations of `tramp-gw-*' symbols,
+	they are useless with the byte compiler.
+	(tramp-make-temp-file, tramp-make-tramp-temp-file): Move up.
+	(tramp-do-copy-or-rename-file-directly): Rearrange let-bindings.
+	(tramp-compute-multi-hops): Mask `tramp-gw-*' symbols.
+	(tramp-file-name-real-host, tramp-file-name-port)
+	(tramp-find-method, tramp-find-user, tramp-find-host): Make them
+	defuns.
+
+	* net/tramp-cache.el (top): Improve error message when
+	`tramp-persistency-file-name' is corrupted.
+
 2007-09-09  Carsten Dominik  <dominik@science.uva.nl>
 
 	* textmodes/org.el (org-re): Also replace the :alpha: class.
@@ -51,7 +65,7 @@
 
 	* progmodes/which-func.el (which-func-modes): Added diff-mode.
 
-	* progmodes/cc-langs.el: Support new keywords added to 
+	* progmodes/cc-langs.el: Support new keywords added to
 	objective-c frontend of gcc.
 	(c-simple-stmt-kwds): Added @throw.
 	(c-block-stmt-2-kwds): Added @synchronized.
--- a/lisp/net/tramp-cache.el	Sun Sep 09 07:51:35 2007 +0000
+++ b/lisp/net/tramp-cache.el	Sun Sep 09 08:31:27 2007 +0000
@@ -291,7 +291,8 @@
     res))
 
 ;; Read persistent connection history.
-(when (zerop (hash-table-count tramp-cache-data))
+(when (and (stringp tramp-persistency-file-name)
+	   (zerop (hash-table-count tramp-cache-data)))
   (condition-case err
       (with-temp-buffer
 	(insert-file-contents tramp-persistency-file-name)
@@ -306,7 +307,8 @@
      (clrhash tramp-cache-data))
     (error
      ;; File is corrupted.
-     (message "%s" (error-message-string err))
+     (message "Tramp persistency file '%s' is corrupted: %s"
+	      tramp-persistency-file-name (error-message-string err))
      (clrhash tramp-cache-data))))
 
 (provide 'tramp-cache)
--- a/lisp/net/tramp.el	Sun Sep 09 07:51:35 2007 +0000
+++ b/lisp/net/tramp.el	Sun Sep 09 08:31:27 2007 +0000
@@ -149,17 +149,12 @@
 		    (unload-feature 'tramp-fish 'force))))
 
      ;; Load gateways.  It needs `make-network-process' from Emacs 22.
-     (if (functionp 'make-network-process)
-	 (progn
-	   (require 'tramp-gw)
-	   (add-hook 'tramp-unload-hook
-		     '(lambda ()
-			(when (featurep 'tramp-gw)
-			  (unload-feature 'tramp-gw 'force)))))
-       ;; We need to declare used tramp-gw-* symbols at least.
-       (setq tramp-gw-tunnel-method ""
-	     tramp-gw-socks-method "")
-       (defalias 'tramp-gw-open-connection 'ignore))
+     (when (functionp 'make-network-process)
+       (require 'tramp-gw)
+       (add-hook 'tramp-unload-hook
+		 '(lambda ()
+		    (when (featurep 'tramp-gw)
+		      (unload-feature 'tramp-gw 'force)))))
 
      ;; tramp-util offers integration into other (X)Emacs packages like
      ;; compile.el, gud.el etc.  Not necessary in Emacs 23.
@@ -2024,6 +2019,22 @@
 (put 'tramp-let-maybe 'lisp-indent-function 2)
 (put 'tramp-let-maybe 'edebug-form-spec t)
 
+(defsubst tramp-make-temp-file (filename)
+  (concat
+   (funcall (if (fboundp 'make-temp-file) 'make-temp-file 'make-temp-name)
+	    (expand-file-name tramp-temp-name-prefix
+			      (tramp-temporary-file-directory)))
+   (file-name-extension filename t)))
+
+(defsubst tramp-make-tramp-temp-file (vec)
+  (format
+   "/tmp/%s%s"
+   tramp-temp-name-prefix
+   (if (get-buffer-process (tramp-get-connection-buffer vec))
+       (process-id (get-buffer-process (tramp-get-connection-buffer vec)))
+     (emacs-pid))))
+
+
 ;;; Config Manipulation Functions:
 
 (defun tramp-set-completion-function (method function-list)
@@ -3030,114 +3041,114 @@
 KEEP-DATE means to make sure that NEWNAME has the same timestamp
 as FILENAME.  PRESERVE-UID-GID, when non-nil, instructs to keep
 the uid and gid from FILENAME."
-  (with-parsed-tramp-file-name (if t1 filename newname) nil
-    (let* ((cmd (cond ((and (eq op 'copy) preserve-uid-gid) "cp -f -p")
-		      ((eq op 'copy) "cp -f")
-		      ((eq op 'rename) "mv -f")
-		      (t (tramp-error
-			  vec 'file-error
-			  "Unknown operation `%s', must be `copy' or `rename'"
-			  op))))
-	   (t1 (tramp-tramp-file-p filename))
-	   (t2 (tramp-tramp-file-p newname))
-	   (localname1
-	    (if t1 (tramp-handle-file-remote-p filename 'localname) filename))
-	   (localname2
-	    (if t2 (tramp-handle-file-remote-p newname 'localname) newname))
-	   (prefix (tramp-handle-file-remote-p (if t1 filename newname)))
-	   (tmpfile (tramp-make-temp-file localname1)))
-
-      (cond
-       ;; Both files are on a remote host, with same user.
-       ((and t1 t2)
-	(tramp-send-command
-	 v
-	 (format "%s %s %s" cmd
-		 (tramp-shell-quote-argument localname1)
-		 (tramp-shell-quote-argument localname2)))
-	(with-current-buffer (tramp-get-buffer v)
-	  (goto-char (point-min))
-	  (unless
-	      (or
-	       (and keep-date
-		    ;; Mask cp -f error.
-		    (re-search-forward
-		     tramp-operation-not-permitted-regexp nil t))
-	       (zerop (tramp-send-command-and-check v nil)))
-	    (tramp-error-with-buffer
-	     nil v 'file-error
-	     "Copying directly failed, see buffer `%s' for details."
-	     (buffer-name)))))
-
-       ;; We are on the local host.
-       ((or t1 t2)
+  (let ((t1 (tramp-tramp-file-p filename))
+	(t2 (tramp-tramp-file-p newname)))
+    (with-parsed-tramp-file-name (if t1 filename newname) nil
+      (let* ((cmd (cond ((and (eq op 'copy) preserve-uid-gid) "cp -f -p")
+			((eq op 'copy) "cp -f")
+			((eq op 'rename) "mv -f")
+			(t (tramp-error
+			    v 'file-error
+			    "Unknown operation `%s', must be `copy' or `rename'"
+			    op))))
+	     (localname1
+	      (if t1 (tramp-handle-file-remote-p filename 'localname) filename))
+	     (localname2
+	      (if t2 (tramp-handle-file-remote-p newname 'localname) newname))
+	     (prefix (tramp-handle-file-remote-p (if t1 filename newname)))
+	     (tmpfile (tramp-make-temp-file localname1)))
+
 	(cond
-	 ;; We can do it directly.
-	 ((and (file-readable-p localname1)
-	       (file-writable-p (file-name-directory localname2)))
-	  (if (eq op 'copy)
-	      (copy-file
-	       localname1 localname2 ok-if-already-exists
-	       keep-date preserve-uid-gid)
-	    (rename-file localname1 localname2 ok-if-already-exists)))
-
-	 ;; We can do it directly with `tramp-send-command'
-	 ((and (file-readable-p (concat prefix localname1))
-	       (file-writable-p
-		(file-name-directory (concat prefix localname2))))
-	  (tramp-do-copy-or-rename-file-directly
-	   op (concat prefix localname1) (concat prefix localname2)
-	   ok-if-already-exists keep-date t)
-	  ;; We must change the ownership to the local user.
-	  (tramp-set-file-uid-gid
-	   (concat prefix localname2)
-	   (tramp-get-local-uid 'integer)
-	   (tramp-get-local-gid 'integer)))
-
-	 ;; We need a temporary file in between.
-	 (t
-	  ;; Create the temporary file.
+	 ;; Both files are on a remote host, with same user.
+	 ((and t1 t2)
+	  (tramp-send-command
+	   v
+	   (format "%s %s %s" cmd
+		   (tramp-shell-quote-argument localname1)
+		   (tramp-shell-quote-argument localname2)))
+	  (with-current-buffer (tramp-get-buffer v)
+	    (goto-char (point-min))
+	    (unless
+		(or
+		 (and keep-date
+		      ;; Mask cp -f error.
+		      (re-search-forward
+		       tramp-operation-not-permitted-regexp nil t))
+		 (zerop (tramp-send-command-and-check v nil)))
+	      (tramp-error-with-buffer
+	       nil v 'file-error
+	       "Copying directly failed, see buffer `%s' for details."
+	       (buffer-name)))))
+
+	 ;; We are on the local host.
+	 ((or t1 t2)
 	  (cond
-	   (t1
-	    (tramp-send-command
-	     v (format
-		"%s %s %s" cmd
-		(tramp-shell-quote-argument localname1)
-		(tramp-shell-quote-argument tmpfile)))
-	    ;; We must change the ownership as remote user.
+	   ;; We can do it directly.
+	   ((and (file-readable-p localname1)
+		 (file-writable-p (file-name-directory localname2)))
+	    (if (eq op 'copy)
+		(copy-file
+		 localname1 localname2 ok-if-already-exists
+		 keep-date preserve-uid-gid)
+	      (rename-file localname1 localname2 ok-if-already-exists)))
+
+	   ;; We can do it directly with `tramp-send-command'
+	   ((and (file-readable-p (concat prefix localname1))
+		 (file-writable-p
+		  (file-name-directory (concat prefix localname2))))
+	    (tramp-do-copy-or-rename-file-directly
+	     op (concat prefix localname1) (concat prefix localname2)
+	     ok-if-already-exists keep-date t)
+	    ;; We must change the ownership to the local user.
 	    (tramp-set-file-uid-gid
-	     (concat prefix tmpfile)
+	     (concat prefix localname2)
 	     (tramp-get-local-uid 'integer)
 	     (tramp-get-local-gid 'integer)))
-	   (t2
-	    (if (eq op 'copy)
-		(copy-file
-		 localname1 tmpfile ok-if-already-exists
-		 keep-date preserve-uid-gid)
-	      (rename-file localname1 tmpfile ok-if-already-exists))
-	    ;; We must change the ownership as local user.
-	    (tramp-set-file-uid-gid
-	     tmpfile
-	     (tramp-get-remote-uid v 'integer)
-	     (tramp-get-remote-gid v 'integer))))
-
-	  ;; Move the temporary file to its destination.
-	  (cond
-	   (t2
-	    (tramp-send-command
-	     v (format
-		"%s %s %s" cmd
-		(tramp-shell-quote-argument tmpfile)
-		(tramp-shell-quote-argument localname2))))
-	   (t1
-	    (if (eq op 'copy)
-		(copy-file
-		 tmpfile localname2 ok-if-already-exists
-		 keep-date preserve-uid-gid)
-	      (rename-file tmpfile localname2 ok-if-already-exists))))
-
-	  ;; Remove temporary file.
-	  (when (eq op 'copy) (delete-file tmpfile))))))
+
+	   ;; We need a temporary file in between.
+	   (t
+	    ;; Create the temporary file.
+	    (cond
+	     (t1
+	      (tramp-send-command
+	       v (format
+		  "%s %s %s" cmd
+		  (tramp-shell-quote-argument localname1)
+		  (tramp-shell-quote-argument tmpfile)))
+	      ;; We must change the ownership as remote user.
+	      (tramp-set-file-uid-gid
+	       (concat prefix tmpfile)
+	       (tramp-get-local-uid 'integer)
+	       (tramp-get-local-gid 'integer)))
+	     (t2
+	      (if (eq op 'copy)
+		  (copy-file
+		   localname1 tmpfile ok-if-already-exists
+		   keep-date preserve-uid-gid)
+		(rename-file localname1 tmpfile ok-if-already-exists))
+	      ;; We must change the ownership as local user.
+	      (tramp-set-file-uid-gid
+	       tmpfile
+	       (tramp-get-remote-uid v 'integer)
+	       (tramp-get-remote-gid v 'integer))))
+
+	    ;; Move the temporary file to its destination.
+	    (cond
+	     (t2
+	      (tramp-send-command
+	       v (format
+		  "%s %s %s" cmd
+		  (tramp-shell-quote-argument tmpfile)
+		  (tramp-shell-quote-argument localname2))))
+	     (t1
+	      (if (eq op 'copy)
+		  (copy-file
+		   tmpfile localname2 ok-if-already-exists
+		   keep-date preserve-uid-gid)
+		(rename-file tmpfile localname2 ok-if-already-exists))))
+
+	    ;; Remove temporary file.
+	    (when (eq op 'copy) (delete-file tmpfile)))))))
 
       ;; Set the time and mode. Mask possible errors.
       ;; Won't be applied for 'rename.
@@ -3577,21 +3588,6 @@
 
 ;;; Remote commands.
 
-(defsubst tramp-make-temp-file (filename)
-  (concat
-   (funcall (if (fboundp 'make-temp-file) 'make-temp-file 'make-temp-name)
-	    (expand-file-name tramp-temp-name-prefix
-			      (tramp-temporary-file-directory)))
-   (file-name-extension filename t)))
-
-(defsubst tramp-make-tramp-temp-file (vec)
-  (format
-   "/tmp/%s%s"
-   tramp-temp-name-prefix
-   (if (get-buffer-process (tramp-get-connection-buffer vec))
-       (process-id (get-buffer-process (tramp-get-connection-buffer vec)))
-     (emacs-pid))))
-
 (defun tramp-handle-executable-find (command)
   "Like `executable-find' for Tramp files."
   (with-parsed-tramp-file-name default-directory nil
@@ -4339,8 +4335,7 @@
 	 ((and completion (zerop (length localname))
 	       (memq operation '(file-name-as-directory)))
 	  filename)
-	 ;; Call the backend function.  Set a connection property
-	 ;; first, it will be reused for user/host name completion.
+	 ;; Call the backend function.
 	 (foreign (apply foreign operation args))
 	 ;; Nothing to do for us.
 	 (t (tramp-run-real-handler operation args)))))))
@@ -5945,10 +5940,12 @@
 	    (setq choices tramp-default-proxies-alist)))))
 
     ;; Handle gateways.
-    (when (string-match (format
-			 "^\\(%s\\|%s\\)$"
-			 tramp-gw-tunnel-method tramp-gw-socks-method)
-			(tramp-file-name-method (car target-alist)))
+    (when (and (boundp 'tramp-gw-tunnel-method)
+	       (string-match (format
+			      "^\\(%s\\|%s\\)$"
+			      (symbol-value 'tramp-gw-tunnel-method)
+			      (symbol-value 'tramp-gw-socks-method))
+			     (tramp-file-name-method (car target-alist))))
       (let ((gw (pop target-alist))
 	    (hop (pop target-alist)))
 	;; Is the method prepared for gateways?
@@ -5973,7 +5970,7 @@
 	 'target-alist
 	 (vector
 	  (tramp-file-name-method hop) (tramp-file-name-user hop)
-	  (tramp-gw-open-connection vec gw hop) nil))
+	  (funcall (intern "tramp-gw-open-connection") vec gw hop) nil))
 	;; For the password prompt, we need the correct values.
 	;; Therefore, we must remember the gateway vector.  But we
 	;; cannot do it as connection property, because it shouldn't
@@ -6524,7 +6521,7 @@
 
 ;; The host part of a Tramp file name vector can be of kind
 ;; "host#port".  Sometimes, we must extract these parts.
-(defsubst tramp-file-name-real-host (vec)
+(defun tramp-file-name-real-host (vec)
   "Return the host name of VEC without port."
   (let ((host (tramp-file-name-host vec)))
     (if (and (stringp host)
@@ -6532,7 +6529,7 @@
 	(match-string 1 host)
       host)))
 
-(defsubst tramp-file-name-port (vec)
+(defun tramp-file-name-port (vec)
   "Return the port number of VEC."
   (let ((host (tramp-file-name-host vec)))
     (and (stringp host)
@@ -6544,7 +6541,7 @@
   (save-match-data
     (string-match tramp-file-name-regexp name)))
 
-(defsubst tramp-find-method (method user host)
+(defun tramp-find-method (method user host)
   "Return the right method string to use.
 This is METHOD, if non-nil. Otherwise, do a lookup in
 `tramp-default-method-alist'."
@@ -6560,7 +6557,7 @@
 	lmethod)
       tramp-default-method))
 
-(defsubst tramp-find-user (method user host)
+(defun tramp-find-user (method user host)
   "Return the right user string to use.
 This is USER, if non-nil. Otherwise, do a lookup in
 `tramp-default-user-alist'."
@@ -6576,7 +6573,7 @@
 	luser)
       tramp-default-user))
 
-(defsubst tramp-find-host (method user host)
+(defun tramp-find-host (method user host)
   "Return the right host string to use.
 This is HOST, if non-nil. Otherwise, it is `tramp-default-host'."
   (or (and (> (length host) 0) host)