From: Michael Albinus Date: Tue, 5 Oct 2010 14:20:24 +0000 (+0200) Subject: * net/tramp.el (tramp-handle-directory-files-and-attributes) X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~438^2~46^2~170 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bd8fadca2740ff8da308845199799641f25c3934;p=emacs.git * net/tramp.el (tramp-handle-directory-files-and-attributes) (tramp-handle-file-exists-p, tramp-handle-file-newer-than-file-p): New defuns, taken from tramp-smb.el. (tramp-coding-system-change-eol-conversion) (tramp-set-process-query-on-exit-flag): Removed. * net/tramp-compat.el (top): Do not check for byte-compiler objects. (tramp-compat-coding-system-change-eol-conversion) (tramp-compat-set-process-query-on-exit-flag): New defuns, taken from tramp.el. * net/tramp-gvfs.el: * net/tramp-gw.el: Replace `tramp-set-process-query-on-exit-flag' by `tramp-compat-set-process-query-on-exit-flag'. * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Use `tramp-handle-directory-files-and-attributes', `tramp-handle-file-exists-p' and `tramp-handle-file-newer-than-file-p'. (tramp-imap-handle-file-exists-p) (tramp-imap-handle-file-executable-p) (tramp-imap-handle-file-readable-p) (tramp-imap-handle-directory-files-and-attributes) (tramp-imap-handle-file-newer-than-file-p): Removed. * net/tramp-sh.el: Replace `tramp-set-process-query-on-exit-flag' by `tramp-compat-set-process-query-on-exit-flag' and `tramp-coding-system-change-eol-conversion' by `tramp-compat-coding-system-change-eol-conversion'. * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Use `tramp-handle-directory-files-and-attributes', `tramp-handle-file-exists-p' and `tramp-handle-file-newer-than-file-p'. (tramp-smb-handle-directory-files-and-attributes) (tramp-smb-handle-file-exists-p) (tramp-smb-handle-file-newer-than-file-p): Removed. (tramp-smb-maybe-open-connection): Replace `tramp-set-process-query-on-exit-flag' by `tramp-compat-set-process-query-on-exit-flag'. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 03dee4d904d..6bda1609804 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,47 @@ +2010-10-05 Michael Albinus + + * net/tramp.el (tramp-handle-directory-files-and-attributes) + (tramp-handle-file-exists-p, tramp-handle-file-newer-than-file-p): + New defuns, taken from tramp-smb.el. + (tramp-coding-system-change-eol-conversion) + (tramp-set-process-query-on-exit-flag): Removed. + + * net/tramp-compat.el (top): Do not check for byte-compiler + objects. + (tramp-compat-coding-system-change-eol-conversion) + (tramp-compat-set-process-query-on-exit-flag): New defuns, taken + from tramp.el. + + * net/tramp-gvfs.el: + * net/tramp-gw.el: Replace `tramp-set-process-query-on-exit-flag' + by `tramp-compat-set-process-query-on-exit-flag'. + + * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Use + `tramp-handle-directory-files-and-attributes', + `tramp-handle-file-exists-p' and + `tramp-handle-file-newer-than-file-p'. + (tramp-imap-handle-file-exists-p) + (tramp-imap-handle-file-executable-p) + (tramp-imap-handle-file-readable-p) + (tramp-imap-handle-directory-files-and-attributes) + (tramp-imap-handle-file-newer-than-file-p): Removed. + + * net/tramp-sh.el: Replace `tramp-set-process-query-on-exit-flag' + by `tramp-compat-set-process-query-on-exit-flag' and + `tramp-coding-system-change-eol-conversion' by + `tramp-compat-coding-system-change-eol-conversion'. + + * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Use + `tramp-handle-directory-files-and-attributes', + `tramp-handle-file-exists-p' and + `tramp-handle-file-newer-than-file-p'. + (tramp-smb-handle-directory-files-and-attributes) + (tramp-smb-handle-file-exists-p) + (tramp-smb-handle-file-newer-than-file-p): Removed. + (tramp-smb-maybe-open-connection): Replace + `tramp-set-process-query-on-exit-flag' by + `tramp-compat-set-process-query-on-exit-flag'. + 2010-10-05 Glenn Morris * obsolete/rnews.el, obsolete/rnewspost.el: Remove files. diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el index 0a7502399f6..130e3122df9 100644 --- a/lisp/net/tramp-compat.el +++ b/lisp/net/tramp-compat.el @@ -90,12 +90,10 @@ ;; needed to pacify Emacs byte-compiler. ;; Note that it was removed altogether in Emacs 24.1. (when (boundp 'directory-sep-char) - (unless (boundp 'byte-compile-not-obsolete-var) - (defvar byte-compile-not-obsolete-var nil)) + (defvar byte-compile-not-obsolete-var nil) (setq byte-compile-not-obsolete-var 'directory-sep-char) ;; Emacs 23.2. - (unless (boundp 'byte-compile-not-obsolete-vars) - (defvar byte-compile-not-obsolete-vars nil)) + (defvar byte-compile-not-obsolete-vars nil) (setq byte-compile-not-obsolete-vars '(directory-sep-char))) ;; `remote-file-name-inhibit-cache' has been introduced with Emacs 24.1. @@ -497,10 +495,36 @@ This is the last value stored with `(process-put PROCESS PROPNAME VALUE)'." It can be retrieved with `(process-get PROCESS PROPNAME)'." (ignore-errors (tramp-compat-funcall 'process-put process propname value))) +(defun tramp-compat-set-process-query-on-exit-flag (process flag) + "Specify if query is needed for process when Emacs is exited. +If the second argument flag is non-nil, Emacs will query the user before +exiting if process is running." + (if (fboundp 'set-process-query-on-exit-flag) + (tramp-compat-funcall 'set-process-query-on-exit-flag process flag) + (tramp-compat-funcall 'process-kill-without-query process flag))) + (add-hook 'tramp-unload-hook (lambda () (unload-feature 'tramp-compat 'force))) +(defun tramp-compat-coding-system-change-eol-conversion (coding-system eol-type) + "Return a coding system like CODING-SYSTEM but with given EOL-TYPE. +EOL-TYPE can be one of `dos', `unix', or `mac'." + (cond ((fboundp 'coding-system-change-eol-conversion) + (tramp-compat-funcall + 'coding-system-change-eol-conversion coding-system eol-type)) + ((fboundp 'subsidiary-coding-system) + (tramp-compat-funcall + 'subsidiary-coding-system coding-system + (cond ((eq eol-type 'dos) 'crlf) + ((eq eol-type 'unix) 'lf) + ((eq eol-type 'mac) 'cr) + (t + (error "Unknown EOL-TYPE `%s', must be %s" + eol-type + "`dos', `unix', or `mac'"))))) + (t (error "Can't change EOL conversion -- is MULE missing?")))) + (provide 'tramp-compat) ;;; TODO: diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index 0d9bd36cc05..32322680f14 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -401,7 +401,6 @@ Every entry is a list (NAME ADDRESS).") (file-name-directory . tramp-handle-file-name-directory) (file-name-nondirectory . tramp-handle-file-name-nondirectory) ;; `file-name-sans-versions' performed by default handler. - ;; CCC: Must be checked! (file-newer-than-file-p . tramp-handle-file-newer-than-file-p) (file-ownership-preserved-p . ignore) (file-readable-p . tramp-gvfs-handle-file-readable-p) @@ -1194,7 +1193,7 @@ connection if a previous connection has died for some reason." :name (tramp-buffer-name vec) :buffer (tramp-get-buffer vec) :server t :host 'local :service t))) - (tramp-set-process-query-on-exit-flag p nil))) + (tramp-compat-set-process-query-on-exit-flag p nil))) (unless (tramp-gvfs-connection-mounted-p vec) (let* ((method (tramp-file-name-method vec)) diff --git a/lisp/net/tramp-gw.el b/lisp/net/tramp-gw.el index a550d46b9b5..71a23fd2d07 100644 --- a/lisp/net/tramp-gw.el +++ b/lisp/net/tramp-gw.el @@ -107,7 +107,7 @@ tramp-gw-vector 4 "Opening auxiliary process `%s', speaking with process `%s'" proc tramp-gw-gw-proc) - (tramp-set-process-query-on-exit-flag proc nil) + (tramp-compat-set-process-query-on-exit-flag proc nil) ;; We don't want debug messages, because the corresponding debug ;; buffer might be undecided. (let (tramp-verbose) @@ -154,7 +154,7 @@ instead of the host name declared in TARGET-VEC." :name (tramp-buffer-name aux-vec) :buffer nil :host 'local :server t :noquery t :service t :coding 'binary)) (set-process-sentinel tramp-gw-aux-proc 'tramp-gw-aux-proc-sentinel) - (tramp-set-process-query-on-exit-flag tramp-gw-aux-proc nil) + (tramp-compat-set-process-query-on-exit-flag tramp-gw-aux-proc nil) (tramp-message vec 4 "Opening auxiliary process `%s', listening on port %d" tramp-gw-aux-proc (process-contact tramp-gw-aux-proc :service)))) @@ -199,7 +199,7 @@ instead of the host name declared in TARGET-VEC." (tramp-file-name-real-host target-vec) (tramp-file-name-port target-vec))) (set-process-sentinel tramp-gw-gw-proc 'tramp-gw-gw-proc-sentinel) - (tramp-set-process-query-on-exit-flag tramp-gw-gw-proc nil) + (tramp-compat-set-process-query-on-exit-flag tramp-gw-gw-proc nil) (tramp-message vec 4 "Opened %s process `%s'" (case gw-method ('tunnel "HTTP tunnel") ('socks "SOCKS")) @@ -230,7 +230,7 @@ authentication is requested from proxy server, provide it." (setq proc (open-network-stream name buffer (nth 1 socks-server) (nth 2 socks-server))) (set-process-coding-system proc 'binary 'binary) - (tramp-set-process-query-on-exit-flag proc nil) + (tramp-compat-set-process-query-on-exit-flag proc nil) ;; Send CONNECT command. (process-send-string proc (format "%s%s\r\n" command authentication)) (tramp-message diff --git a/lisp/net/tramp-imap.el b/lisp/net/tramp-imap.el index 4a5e2418cfb..dade2052126 100644 --- a/lisp/net/tramp-imap.el +++ b/lisp/net/tramp-imap.el @@ -122,7 +122,7 @@ (directory-file-name . tramp-handle-directory-file-name) (directory-files . tramp-handle-directory-files) (directory-files-and-attributes - . tramp-imap-handle-directory-files-and-attributes) + . tramp-handle-directory-files-and-attributes) (dired-call-process . ignore) ;; `dired-compress-file' performed by default handler ;; `dired-uncache' performed by default handler @@ -130,8 +130,8 @@ ;; `file-accessible-directory-p' performed by default handler (file-attributes . tramp-imap-handle-file-attributes) (file-directory-p . tramp-imap-handle-file-directory-p) - (file-executable-p . tramp-imap-handle-file-executable-p) - (file-exists-p . tramp-imap-handle-file-exists-p) + (file-executable-p . ignore) + (file-exists-p . tramp-handle-file-exists-p) (file-local-copy . tramp-imap-handle-file-local-copy) (file-modes . tramp-handle-file-modes) (file-name-all-completions . tramp-imap-handle-file-name-all-completions) @@ -140,9 +140,9 @@ (file-name-directory . tramp-handle-file-name-directory) (file-name-nondirectory . tramp-handle-file-name-nondirectory) ;; `file-name-sans-versions' performed by default handler - (file-newer-than-file-p . tramp-imap-handle-file-newer-than-file-p) + (file-newer-than-file-p . tramp-handle-file-newer-than-file-p) (file-ownership-preserved-p . ignore) - (file-readable-p . tramp-imap-handle-file-readable-p) + (file-readable-p . tramp-handle-file-exists-p) (file-regular-p . tramp-handle-file-regular-p) (file-remote-p . tramp-handle-file-remote-p) ;; `file-selinux-context' performed by default handler. @@ -526,10 +526,6 @@ SIZE MODE WEIRD INODE DEVICE)." (goto-char point) (list (expand-file-name filename) size)))))) -(defun tramp-imap-handle-file-exists-p (filename) - "Like `file-exists-p' for Tramp files." - (and (file-attributes filename) t)) - (defun tramp-imap-handle-file-directory-p (filename) "Like `file-directory-p' for Tramp-IMAP files." ;; We allow only mailboxes to be a directory. @@ -549,14 +545,6 @@ SIZE MODE WEIRD INODE DEVICE)." "Get inode equivalent \(actually the UID) for Tramp-IMAP FILENAME." (nth 10 (tramp-compat-file-attributes filename id-format))) -(defun tramp-imap-handle-file-executable-p (filename) - "Like `file-executable-p' for Tramp files. False for IMAP." - nil) - -(defun tramp-imap-handle-file-readable-p (filename) - "Like `file-readable-p' for Tramp files. True for IMAP." - (file-exists-p filename)) - (defun tramp-imap-handle-file-writable-p (filename) "Like `file-writable-p' for Tramp files. True for IMAP." ;; `file-exists-p' does not work yet for directories. @@ -571,24 +559,6 @@ SIZE MODE WEIRD INODE DEVICE)." (let ((iht (tramp-imap-make-iht v))) (imap-hash-rem (tramp-imap-get-file-inode filename) iht)))))) -(defun tramp-imap-handle-directory-files-and-attributes - (directory &optional full match nosort id-format) - "Like `directory-files-and-attributes' for Tramp files." - (mapcar - (lambda (x) - (cons x (tramp-compat-file-attributes - (if full x (expand-file-name x directory)) id-format))) - (directory-files directory full match nosort))) - -;; TODO: fix this in tramp-imap-get-file-entries. -(defun tramp-imap-handle-file-newer-than-file-p (file1 file2) - "Like `file-newer-than-file-p' for Tramp files." - (cond - ((not (file-exists-p file1)) nil) - ((not (file-exists-p file2)) t) - (t (tramp-time-less-p (nth 5 (file-attributes file2)) - (nth 5 (file-attributes file1)))))) - (defun tramp-imap-handle-file-local-copy (filename) "Like `file-local-copy' for Tramp files." (with-parsed-tramp-file-name (expand-file-name filename) nil diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 2d1ea436240..0953342b79f 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -2310,7 +2310,7 @@ The method used must be an out-of-band method." (append copy-args (list source target)))))) (tramp-message v 6 "%s" (mapconcat 'identity (process-command p) " ")) - (tramp-set-process-query-on-exit-flag p nil) + (tramp-compat-set-process-query-on-exit-flag p nil) (tramp-process-actions p v tramp-actions-copy-out-of-band)))) ;; Reset the transfer process properties. @@ -2677,7 +2677,7 @@ the result will be a local, non-Tramp, filename." ;; Set sentinel and query flag for this process. (tramp-set-connection-property p "vector" v) (set-process-sentinel p 'tramp-process-sentinel) - (tramp-set-process-query-on-exit-flag p t) + (tramp-compat-set-process-query-on-exit-flag p t) ;; Return process. p)) ;; Save exit. @@ -3694,10 +3694,10 @@ process to set up. VEC specifies the connection." (setq cs-encode (cdr cs)) (unless cs-decode (setq cs-decode 'undecided)) (unless cs-encode (setq cs-encode 'undecided)) - (setq cs-encode (tramp-coding-system-change-eol-conversion + (setq cs-encode (tramp-compat-coding-system-change-eol-conversion cs-encode 'unix)) (when (search-forward "\r" nil t) - (setq cs-decode (tramp-coding-system-change-eol-conversion + (setq cs-decode (tramp-compat-coding-system-change-eol-conversion cs-decode 'dos))) (tramp-compat-funcall 'set-buffer-process-coding-system cs-decode cs-encode) @@ -4244,7 +4244,7 @@ connection if a previous connection has died for some reason." vec 6 "%s" (mapconcat 'identity (process-command p) " ")) ;; Check whether process is alive. - (tramp-set-process-query-on-exit-flag p nil) + (tramp-compat-set-process-query-on-exit-flag p nil) (tramp-barf-if-no-shell-prompt p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell) diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index 84d11972115..d2308216821 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -153,7 +153,7 @@ See `tramp-actions-before-shell' for more info.") (directory-file-name . tramp-handle-directory-file-name) (directory-files . tramp-smb-handle-directory-files) (directory-files-and-attributes - . tramp-smb-handle-directory-files-and-attributes) + . tramp-handle-directory-files-and-attributes) (dired-call-process . ignore) (dired-compress-file . ignore) (dired-uncache . tramp-handle-dired-uncache) @@ -161,8 +161,8 @@ See `tramp-actions-before-shell' for more info.") (file-accessible-directory-p . tramp-smb-handle-file-directory-p) (file-attributes . tramp-smb-handle-file-attributes) (file-directory-p . tramp-smb-handle-file-directory-p) - (file-executable-p . tramp-smb-handle-file-exists-p) - (file-exists-p . tramp-smb-handle-file-exists-p) + (file-executable-p . tramp-handle-file-exists-p) + (file-exists-p . tramp-handle-file-exists-p) (file-local-copy . tramp-smb-handle-file-local-copy) (file-modes . tramp-handle-file-modes) (file-name-all-completions . tramp-smb-handle-file-name-all-completions) @@ -171,9 +171,9 @@ See `tramp-actions-before-shell' for more info.") (file-name-directory . tramp-handle-file-name-directory) (file-name-nondirectory . tramp-handle-file-name-nondirectory) ;; `file-name-sans-versions' performed by default handler. - (file-newer-than-file-p . tramp-smb-handle-file-newer-than-file-p) + (file-newer-than-file-p . tramp-handle-file-newer-than-file-p) (file-ownership-preserved-p . ignore) - (file-readable-p . tramp-smb-handle-file-exists-p) + (file-readable-p . tramp-handle-file-exists-p) (file-regular-p . tramp-handle-file-regular-p) (file-remote-p . tramp-handle-file-remote-p) ;; `file-selinux-context' performed by default handler. @@ -451,15 +451,6 @@ PRESERVE-UID-GID is completely ignored." ;; That's it. result)) -(defun tramp-smb-handle-directory-files-and-attributes - (directory &optional full match nosort id-format) - "Like `directory-files-and-attributes' for Tramp files." - (mapcar - (lambda (x) - (cons x (tramp-compat-file-attributes - (if full x (expand-file-name x directory)) id-format))) - (directory-files directory full match nosort))) - (defun tramp-smb-handle-expand-file-name (name &optional dir) "Like `expand-file-name' for Tramp files." ;; If DIR is not given, use DEFAULT-DIRECTORY or "/". @@ -597,10 +588,6 @@ PRESERVE-UID-GID is completely ignored." (and (file-exists-p filename) (eq ?d (aref (nth 8 (file-attributes filename)) 0)))) -(defun tramp-smb-handle-file-exists-p (filename) - "Like `file-exists-p' for Tramp files." - (not (null (file-attributes filename)))) - (defun tramp-smb-handle-file-local-copy (filename) "Like `file-local-copy' for Tramp files." (with-parsed-tramp-file-name filename nil @@ -638,14 +625,6 @@ PRESERVE-UID-GID is completely ignored." (nth 0 x)))) entries))))))) -(defun tramp-smb-handle-file-newer-than-file-p (file1 file2) - "Like `file-newer-than-file-p' for Tramp files." - (cond - ((not (file-exists-p file1)) nil) - ((not (file-exists-p file2)) t) - (t (tramp-time-less-p (nth 5 (file-attributes file2)) - (nth 5 (file-attributes file1)))))) - (defun tramp-smb-handle-file-writable-p (filename) "Like `file-writable-p' for Tramp files." (if (file-exists-p filename) @@ -1323,7 +1302,7 @@ connection if a previous connection has died for some reason." (tramp-message vec 6 "%s" (mapconcat 'identity (process-command p) " ")) - (tramp-set-process-query-on-exit-flag p nil) + (tramp-compat-set-process-query-on-exit-flag p nil) ;; Set variables for computing the prompt for reading password. (setq tramp-current-method tramp-smb-method diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 1ad5c3aac2c..7b2d8a0a6e6 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -2609,6 +2609,15 @@ User is always nil." result))) (if nosort result (sort result 'string<))))) +(defun tramp-handle-directory-files-and-attributes + (directory &optional full match nosort id-format) + "Like `directory-files-and-attributes' for Tramp files." + (mapcar + (lambda (x) + (cons x (tramp-compat-file-attributes + (if full x (expand-file-name x directory)) id-format))) + (directory-files directory full match nosort))) + (defun tramp-handle-dired-uncache (dir &optional dir-p) "Like `dired-uncache' for Tramp files." ;; DIR-P is valid for XEmacs only. @@ -2616,6 +2625,10 @@ User is always nil." (if (or dir-p (file-directory-p dir)) dir (file-name-directory dir)) nil (tramp-flush-directory-property v localname))) +(defun tramp-handle-file-exists-p (filename) + "Like `file-exists-p' for Tramp files." + (not (null (file-attributes filename)))) + (defun tramp-handle-file-modes (filename) "Like `file-modes' for Tramp files." (let ((truename (or (file-truename filename) filename))) @@ -2669,6 +2682,14 @@ User is always nil." (with-parsed-tramp-file-name file nil (tramp-run-real-handler 'file-name-nondirectory (list localname)))) +(defun tramp-handle-file-newer-than-file-p (file1 file2) + "Like `file-newer-than-file-p' for Tramp files." + (cond + ((not (file-exists-p file1)) nil) + ((not (file-exists-p file2)) t) + (t (tramp-time-less-p (nth 5 (file-attributes file2)) + (nth 5 (file-attributes file1)))))) + (defun tramp-handle-file-regular-p (filename) "Like `file-regular-p' for Tramp files." (and (file-exists-p filename) @@ -3551,32 +3572,6 @@ T1 and T2 are time values (as returned by `current-time' for example)." (cadr time) (/ (or (nth 2 time) 0) 1000000.0)))))) -(defun tramp-coding-system-change-eol-conversion (coding-system eol-type) - "Return a coding system like CODING-SYSTEM but with given EOL-TYPE. -EOL-TYPE can be one of `dos', `unix', or `mac'." - (cond ((fboundp 'coding-system-change-eol-conversion) - (tramp-compat-funcall - 'coding-system-change-eol-conversion coding-system eol-type)) - ((fboundp 'subsidiary-coding-system) - (tramp-compat-funcall - 'subsidiary-coding-system coding-system - (cond ((eq eol-type 'dos) 'crlf) - ((eq eol-type 'unix) 'lf) - ((eq eol-type 'mac) 'cr) - (t - (error "Unknown EOL-TYPE `%s', must be %s" - eol-type - "`dos', `unix', or `mac'"))))) - (t (error "Can't change EOL conversion -- is MULE missing?")))) - -(defun tramp-set-process-query-on-exit-flag (process flag) - "Specify if query is needed for process when Emacs is exited. -If the second argument flag is non-nil, Emacs will query the user before -exiting if process is running." - (if (fboundp 'set-process-query-on-exit-flag) - (tramp-compat-funcall 'set-process-query-on-exit-flag process flag) - (tramp-compat-funcall 'process-kill-without-query process flag))) - ;; Currently (as of Emacs 20.5), the function `shell-quote-argument' ;; does not deal well with newline characters. Newline is replaced by ;; backslash newline. But if, say, the string `a backslash newline b'