# HG changeset patch # User Michael Albinus # Date 1259840051 0 # Node ID 4eee659fa95492ce3c6aa2de2423fa6bec325b1b # Parent b537bb8db7d99b480a439c079178377908883372 Cleanup. * eshell/em-unix.el (top): Require 'esh-opt and 'pcomplete. (eshell/su, eshell/sudo): Require 'tramp. Fix problems reading arguments. Expand `default-directory'. * net/tramp.el (tramp-handle-file-remote-p): Expand FILENAME for the benefit of returning an expanded localname. (tramp-tramp-file-p): Handle the case NAME is not a string. diff -r b537bb8db7d9 -r 4eee659fa954 lisp/ChangeLog --- a/lisp/ChangeLog Thu Dec 03 08:53:54 2009 +0000 +++ b/lisp/ChangeLog Thu Dec 03 11:34:11 2009 +0000 @@ -1,3 +1,14 @@ +2009-12-03 Michael Albinus + + Cleanup. + * eshell/em-unix.el (top): Require 'esh-opt and 'pcomplete. + (eshell/su, eshell/sudo): Require 'tramp. Fix problems reading + arguments. Expand `default-directory'. + + * net/tramp.el (tramp-handle-file-remote-p): Expand FILENAME for + the benefit of returning an expanded localname. + (tramp-tramp-file-p): Handle the case NAME is not a string. + 2009-12-03 Dan Nicolaescu Add support for bzr shelve/unshelve. diff -r b537bb8db7d9 -r 4eee659fa954 lisp/eshell/em-unix.el --- a/lisp/eshell/em-unix.el Thu Dec 03 08:53:54 2009 +0000 +++ b/lisp/eshell/em-unix.el Thu Dec 03 11:34:11 2009 +0000 @@ -37,6 +37,8 @@ ;;; Code: (require 'eshell) +(require 'esh-opt) +(require 'pcomplete) ;;;###autoload (eshell-defgroup eshell-unix nil @@ -1048,10 +1050,11 @@ (defun eshell/su (&rest args) "Alias \"su\" to call Tramp." + (require 'tramp) (setq args (eshell-stringify-list (eshell-flatten-list args))) - (let (login) + (let ((orig-args (copy-tree args))) (eshell-eval-using-options - "sudo" args + "su" args '((?h "help" nil nil "show this usage screen") (?l "login" nil login "provide a login environment") (? nil nil login "provide a login environment") @@ -1062,13 +1065,18 @@ (host (or (file-remote-p default-directory 'host) "localhost")) (dir (or (file-remote-p default-directory 'localname) - default-directory))) + (expand-file-name default-directory)))) (eshell-for arg args (if (string-equal arg "-") (setq login t) (setq user arg))) + ;; `eshell-eval-using-options' does not handle "-". + (if (member "-" orig-args) (setq login t)) (if login (setq dir "~/")) (if (and (file-remote-p default-directory) - (not (string-equal - user (file-remote-p default-directory 'user)))) + (or + (not (string-equal + "su" (file-remote-p default-directory 'method))) + (not (string-equal + user (file-remote-p default-directory 'user))))) (add-to-list 'tramp-default-proxies-alist (list host user (file-remote-p default-directory)))) @@ -1079,8 +1087,9 @@ (defun eshell/sudo (&rest args) "Alias \"sudo\" to call Tramp." + (require 'tramp) (setq args (eshell-stringify-list (eshell-flatten-list args))) - (let (user) + (let ((orig-args (copy-tree args))) (eshell-eval-using-options "sudo" args '((?h "help" nil nil "show this usage screen") @@ -1089,19 +1098,26 @@ :usage "[(-u | --user) USER] COMMAND Execute a COMMAND as the superuser or another USER.") (throw 'eshell-external - (let* ((user (or user "root")) - (host (or (file-remote-p default-directory 'host) - "localhost")) - (dir (or (file-remote-p default-directory 'localname) - default-directory))) + (let ((user (or user "root")) + (host (or (file-remote-p default-directory 'host) + "localhost")) + (dir (or (file-remote-p default-directory 'localname) + (expand-file-name default-directory)))) + ;; `eshell-eval-using-options' reads options of COMMAND. + (while (and (stringp (car orig-args)) + (member (car orig-args) '("-u" "--user"))) + (setq orig-args (cddr orig-args))) (if (and (file-remote-p default-directory) - (not (string-equal - user (file-remote-p default-directory 'user)))) + (or + (not (string-equal + "sudo" (file-remote-p default-directory 'method))) + (not (string-equal + user (file-remote-p default-directory 'user))))) (add-to-list 'tramp-default-proxies-alist (list host user (file-remote-p default-directory)))) (let ((default-directory (format "/sudo:%s@%s:%s" user host dir))) - (eshell-named-command (car args) (cdr args)))))))) + (eshell-named-command (car orig-args) (cdr orig-args)))))))) (put 'eshell/sudo 'eshell-no-numeric-conversions t) diff -r b537bb8db7d9 -r 4eee659fa954 lisp/net/tramp.el --- a/lisp/net/tramp.el Thu Dec 03 08:53:54 2009 +0000 +++ b/lisp/net/tramp.el Thu Dec 03 11:34:11 2009 +0000 @@ -4629,7 +4629,7 @@ (defun tramp-handle-file-remote-p (filename &optional identification connected) "Like `file-remote-p' for Tramp files." (when (tramp-tramp-file-p filename) - (with-parsed-tramp-file-name filename nil + (with-parsed-tramp-file-name (expand-file-name filename) nil (and (or (not connected) (let ((p (tramp-get-connection-process v))) (and p (processp p) (memq (process-status p) '(run open))))) @@ -7709,9 +7709,9 @@ (string-to-number (match-string 2 host)))))) (defun tramp-tramp-file-p (name) - "Return t if NAME is a Tramp file." + "Return t if NAME is a string with Tramp file name syntax." (save-match-data - (string-match tramp-file-name-regexp name))) + (and (stringp name) (string-match tramp-file-name-regexp name)))) (defun tramp-find-method (method user host) "Return the right method string to use.