diff lisp/net/tramp-gvfs.el @ 110264:ec526909f60b

Migrate to Tramp 2.2. Rearrange load dependencies. (Bug#1529, Bug#5448, Bug#5705) * Makefile.in (TRAMP_DIR, TRAMP_SRC): New variables. ($(TRAMP_DIR)/tramp-loaddefs.el): New target. (LOADDEFS): Add $(lisp)/net/tramp-loaddefs.el. * net/tramp.el (top): Remove all other tramp-* loads except tramp-compat.el. Remove all changes to tramp-unload-hook for other tramp-* packages. Rearrange defun order. Change calls of `tramp-compat-call-process', `tramp-compat-decimal-to-octal', `tramp-compat-octal-to-decimal' to new function names. (tramp-terminal-type, tramp-initial-end-of-output) (tramp-methods, tramp-foreign-file-name-handler-alist) (tramp-tramp-file-p, tramp-completion-mode-p) (tramp-send-command-and-check, tramp-get-remote-path) (tramp-get-remote-tmpdir, tramp-get-remote-ln) (tramp-shell-quote-argument): Set tramp-autoload cookie. (with-file-property, with-connection-property): Move to tramp-cache.el. (tramp-local-call-process, tramp-decimal-to-octal) (tramp-octal-to-decimal): Move to tramp-compat.el. (tramp-handle-shell-command): Do not require 'shell. (tramp-compute-multi-hops): No special handling for tramp-gw-* symbols. (tramp-unload-tramp): Do not call `tramp-unload-file-name-handlers'. * net/tramp-cache.el (top): Require 'tramp. Add to `tramp-unload-hook'. (tramp-cache-data, tramp-get-file-property) (tramp-set-file-property, tramp-flush-file-property) (tramp-flush-directory-property, tramp-get-connection-property) (tramp-set-connection-property, tramp-flush-connection-property) (tramp-cache-print, tramp-list-connections): Set tramp-autoload cookie. (with-file-property, with-connection-property): New defuns, moved from tramp.el. (tramp-flush-file-function): Use `with-parsed-tramp-file-name' macro. * net/tramp-cmds.el (top): Add to `tramp-unload-hook'. (tramp-version): Set tramp-autoload cookie. * net/tramp-compat.el (top): Require 'tramp-loaddefs. Remove all changes to tramp-unload-hook for other tramp-* packages. Add to `tramp-unload-hook'. (tramp-compat-decimal-to-octal, tramp-compat-octal-to-decimal) (tramp-compat-call-process): New defuns, moved from tramp.el. * net/tramp-fish.el (top) Require just 'tramp. Add objects to `tramp-methods' and `tramp-foreign-file-name-handler-alist'. Add to `tramp-unload-hook'. Change call of `tramp-compat-decimal-to-octal' to new function name. (tramp-fish-method): Make it a defconst. (tramp-fish-file-name-p): Make it a defsubst. (tramp-fish-method, tramp-fish-file-name-handler) (tramp-fish-file-name-p): Set tramp-autoload cookie. * net/tramp-ftp.el (top) Add objects to `tramp-methods' and `tramp-foreign-file-name-handler-alist'. Add to `tramp-unload-hook'. (tramp-ftp-method): Make it a defconst. (tramp-ftp-file-name-p): Make it a defsubst. (tramp-ftp-method, tramp-ftp-file-name-handler) (tramp-ftp-file-name-p): Set tramp-autoload cookie. * net/tramp-gvfs.el (top) Add objects to `tramp-methods' and `tramp-foreign-file-name-handler-alist'. Add to `tramp-unload-hook'. Change checks, whether package can be loaded. (tramp-gvfs-file-name-p): Make it a defsubst. (tramp-gvfs-methods, tramp-gvfs-file-name-handler) (tramp-gvfs-file-name-p): Set tramp-autoload cookie. (tramp-gvfs-handle-file-directory-p): New defun. (tramp-gvfs-file-name-handler-alist): Use it. * net/tramp-gw.el (top) Add objects to `tramp-methods' and `tramp-foreign-file-name-handler-alist'. Add to `tramp-unload-hook'. (tramp-gw-tunnel-method, tramp-gw-default-tunnel-port) (tramp-gw-socks-method, tramp-gw-default-socks-port): Make it a defconst. (tramp-gw-tunnel-method, tramp-gw-socks-method) (tramp-gw-open-connection): Set tramp-autoload cookie. * net/tramp-imap.el (top) Require just 'tramp. Add objects to `tramp-methods' and `tramp-foreign-file-name-handler-alist'. Add to `tramp-unload-hook'. Change checks, whether package can be loaded. (tramp-imap-file-name-p): Make it a defsubst. (tramp-imap-method, tramp-imaps-method) (tramp-imap-file-name-handler) (tramp-imap-file-name-p): Set tramp-autoload cookie. * net/tramp-smb.el (top) Require just 'tramp. Add objects to `tramp-methods' and `tramp-foreign-file-name-handler-alist'. Add to `tramp-unload-hook'. Change checks, whether package can be loaded. Change call of `tramp-compat-decimal-to-octal' to new function name. (tramp-smb-tunnel-method): Make it a defconst. (tramp-smb-file-name-p): Make it a defsubst. (tramp-smb-method, tramp-smb-file-name-handler) (tramp-smb-file-name-p): Set tramp-autoload cookie. * net/tramp-uu.el (top) Add to `tramp-unload-hook'. (tramp-uuencode-region): Set tramp-autoload cookie. * net/trampver.el (top) Add to `tramp-unload-hook'. (tramp-version, tramp-bug-report-address): Set tramp-autoload cookie. Update release number.
author Michael Albinus <michael.albinus@gmx.de>
date Wed, 08 Sep 2010 16:42:54 +0200
parents 280c8ae2476d
children 4b26adbef9a2
line wrap: on
line diff
--- a/lisp/net/tramp-gvfs.el	Tue Sep 07 20:01:23 2010 +0200
+++ b/lisp/net/tramp-gvfs.el	Wed Sep 08 16:42:54 2010 +0200
@@ -108,6 +108,7 @@
 (require 'url-util)
 (require 'zeroconf)
 
+;;;###tramp-autoload
 (defcustom tramp-gvfs-methods '("dav" "davs" "obex" "synce")
   "*List of methods for remote files, accessed with GVFS."
   :group 'tramp
@@ -133,11 +134,11 @@
 
 ;; Add the methods to `tramp-methods', in order to allow minibuffer
 ;; completion.
-(eval-after-load "tramp-gvfs"
-  '(when (featurep 'tramp-gvfs)
-     (dolist (elt tramp-gvfs-methods)
-       (unless (assoc elt tramp-methods)
-	 (add-to-list 'tramp-methods (cons elt nil))))))
+;;;###tramp-autoload
+(when (featurep 'dbusbind)
+  (dolist (elt tramp-gvfs-methods)
+    (unless (assoc elt tramp-methods)
+      (add-to-list 'tramp-methods (cons elt nil)))))
 
 (defconst tramp-gvfs-path-tramp (concat dbus-path-emacs "/Tramp")
   "The preceeding object path for own objects.")
@@ -145,9 +146,12 @@
 (defconst tramp-gvfs-service-daemon "org.gtk.vfs.Daemon"
   "The well known name of the GVFS daemon.")
 
-;; Check that GVFS is available.
-(unless (dbus-ping :session tramp-gvfs-service-daemon 100)
-  (throw 'tramp-loading nil))
+;; Check that GVFS is available.  D-Bus integration is available since
+;; Emacs 23 on some system types.  We don't call `dbus-ping', because
+;; this would load dbus.el.
+(unless (and (tramp-compat-funcall 'dbus-get-unique-name :session)
+	     (tramp-compat-process-running-p "gvfs-fuse-daemon"))
+  (error "Package `tramp-gvfs' not supported"))
 
 (defconst tramp-gvfs-path-mounttracker "/org/gtk/vfs/mounttracker"
   "The object path of the GVFS daemon.")
@@ -385,7 +389,7 @@
     (expand-file-name . tramp-gvfs-handle-expand-file-name)
     ;; `file-accessible-directory-p' performed by default handler.
     (file-attributes . tramp-gvfs-handle-file-attributes)
-    (file-directory-p . tramp-smb-handle-file-directory-p)
+    (file-directory-p . tramp-gvfs-handle-file-directory-p)
     (file-executable-p . tramp-gvfs-handle-file-executable-p)
     (file-exists-p . tramp-gvfs-handle-file-exists-p)
     (file-local-copy . tramp-gvfs-handle-file-local-copy)
@@ -431,13 +435,15 @@
   "Alist of handler functions for Tramp GVFS method.
 Operations not mentioned here will be handled by the default Emacs primitives.")
 
-(defun tramp-gvfs-file-name-p (filename)
+;;;###tramp-autoload
+(defsubst tramp-gvfs-file-name-p (filename)
   "Check if it's a filename handled by the GVFS daemon."
   (and (tramp-tramp-file-p filename)
        (let ((method
 	      (tramp-file-name-method (tramp-dissect-file-name filename))))
 	 (and (stringp method) (member method tramp-gvfs-methods)))))
 
+;;;###tramp-autoload
 (defun tramp-gvfs-file-name-handler (operation &rest args)
   "Invoke the GVFS related OPERATION.
 First arg specifies the OPERATION, second arg is a list of arguments to
@@ -449,8 +455,10 @@
 
 ;; This might be moved to tramp.el.  It shall be the first file name
 ;; handler.
-(add-to-list 'tramp-foreign-file-name-handler-alist
-	     (cons 'tramp-gvfs-file-name-p 'tramp-gvfs-file-name-handler))
+;;;###tramp-autoload
+(when (featurep 'dbusbind)
+  (add-to-list 'tramp-foreign-file-name-handler-alist
+	       (cons 'tramp-gvfs-file-name-p 'tramp-gvfs-file-name-handler)))
 
 (defun tramp-gvfs-stringify-dbus-message (message)
   "Convert a D-Bus message into readable UTF8 strings, used for traces."
@@ -494,7 +502,7 @@
   `(let ((fuse-file-name  (regexp-quote (tramp-gvfs-fuse-file-name ,filename)))
 	 elt)
      (condition-case err
-	 (funcall ,handler ,@args)
+	 (tramp-compat-funcall ,handler ,@args)
        (error
 	(setq elt (cdr err))
 	(while elt
@@ -647,6 +655,10 @@
   "Like `file-attributes' for Tramp files."
   (file-attributes (tramp-gvfs-fuse-file-name filename) id-format))
 
+(defun tramp-gvfs-handle-file-directory-p (filename)
+  "Like `file-directory-p' for Tramp files."
+  (file-directory-p (tramp-gvfs-fuse-file-name filename)))
+
 (defun tramp-gvfs-handle-file-executable-p (filename)
   "Like `file-executable-p' for Tramp files."
   (file-executable-p (tramp-gvfs-fuse-file-name filename)))
@@ -1403,6 +1415,10 @@
 (tramp-set-completion-function
  "synce" '((tramp-synce-parse-device-names "")))
 
+(add-hook 'tramp-unload-hook
+	  (lambda ()
+	    (unload-feature 'tramp-gvfs 'force)))
+
 (provide 'tramp-gvfs)
 
 ;;; TODO: