X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/f0398ec17f8a00d6c6d828c3d04522d94337d156..15ecb7923af303497eec1e7918f7c70aafd33cde:/lisp/net/tramp-cmds.el diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el index 462f0d8836..856011fc0e 100644 --- a/lisp/net/tramp-cmds.el +++ b/lisp/net/tramp-cmds.el @@ -1,6 +1,6 @@ ;;; tramp-cmds.el --- Interactive commands for Tramp -;; Copyright (C) 2007-2013 Free Software Foundation, Inc. +;; Copyright (C) 2007-2016 Free Software Foundation, Inc. ;; Author: Michael Albinus ;; Keywords: comm, processes @@ -30,6 +30,13 @@ (require 'tramp) +;; Pacify byte-compiler. +(declare-function mml-mode "mml") +(declare-function mml-insert-empty-tag "mml") +(declare-function reporter-dump-variable "reporter") +(defvar reporter-eval-buffer) +(defvar reporter-prompt-for-summary-p) + (defun tramp-list-tramp-buffers () "Return a list of all Tramp connection buffers." (append @@ -44,16 +51,15 @@ nil (mapcar (lambda (x) - (with-current-buffer x - (when (and (stringp default-directory) - (file-remote-p default-directory)) - x))) + (with-current-buffer x (when (tramp-tramp-file-p default-directory) x))) (buffer-list)))) ;;;###tramp-autoload -(defun tramp-cleanup-connection (vec) +(defun tramp-cleanup-connection (vec &optional keep-debug keep-password) "Flush all connection related objects. -This includes password cache, file cache, connection cache, buffers. +This includes password cache, file cache, connection cache, +buffers. KEEP-DEBUG non-nil preserves the debug buffer. +KEEP-PASSWORD non-nil preserves the password cache. When called interactively, a Tramp connection has to be selected." (interactive ;; When interactive, select the Tramp remote identification. @@ -75,15 +81,20 @@ When called interactively, a Tramp connection has to be selected." (completing-read "Enter Tramp connection: " connections nil t (try-completion "" connections))) - (when (and name (file-remote-p name)) - (with-parsed-tramp-file-name name nil v)))))) + (and (tramp-tramp-file-p name) (tramp-dissect-file-name name)))) + nil nil)) (if (not vec) ;; Nothing to do. (message "No Tramp connection found.") ;; Flush password cache. - (tramp-clear-passwd vec) + (unless keep-password (tramp-clear-passwd vec)) + + ;; Cleanup `tramp-current-connection'. Otherwise, we would be + ;; suppressed in the test suite. We use `keep-password' as + ;; indicator; it is not worth to add a new argument. + (when keep-password (setq tramp-current-connection nil)) ;; Flush file cache. (tramp-flush-directory-property vec "") @@ -97,7 +108,8 @@ When called interactively, a Tramp connection has to be selected." ;; Remove buffers. (dolist (buf (list (get-buffer (tramp-buffer-name vec)) - (get-buffer (tramp-debug-buffer-name vec)) + (unless keep-debug + (get-buffer (tramp-debug-buffer-name vec))) (tramp-get-connection-property vec "process-buffer" nil))) (when (bufferp buf) (kill-buffer buf))))) @@ -105,8 +117,7 @@ When called interactively, a Tramp connection has to be selected." (defun tramp-cleanup-this-connection () "Flush all connection related objects of the current buffer's connection." (interactive) - (and (stringp default-directory) - (file-remote-p default-directory) + (and (tramp-tramp-file-p default-directory) (tramp-cleanup-connection (tramp-dissect-file-name default-directory 'noexpand)))) @@ -120,7 +131,7 @@ This includes password cache, file cache, connection cache, buffers." (setq tramp-locked nil) ;; Flush password cache. - (tramp-compat-funcall 'password-reset) + (password-reset) ;; Flush file and connection cache. (clrhash tramp-cache-data) @@ -134,7 +145,7 @@ This includes password cache, file cache, connection cache, buffers." "Kill all remote buffers." (interactive) - ;; Remove all Tramp related buffers. + ;; Remove all Tramp related connections. (tramp-cleanup-all-connections) ;; Remove all buffers with a remote default-directory. @@ -149,8 +160,8 @@ This includes password cache, file cache, connection cache, buffers." (interactive "P") (if arg (insert tramp-version) (message tramp-version))) -;; Make the `reporter` functionality available for making bug reports about -;; the package. A most useful piece of code. +;; Make the "reporter" functionality available for making bug reports about +;; the package. A most useful piece of code. (autoload 'reporter-submit-bug-report "reporter") @@ -158,7 +169,6 @@ This includes password cache, file cache, connection cache, buffers." (defun tramp-bug () "Submit a bug report to the Tramp developers." (interactive) - (require 'reporter) (catch 'dont-send (let ((reporter-prompt-for-summary-p t)) (reporter-submit-bug-report @@ -177,7 +187,6 @@ This includes password cache, file cache, connection cache, buffers." backup-by-copying-when-mismatch backup-by-copying-when-privileged-mismatch backup-directory-alist - bkup-backup-directory-info password-cache password-cache-expiry remote-file-name-inhibit-cache @@ -186,7 +195,8 @@ This includes password cache, file cache, connection cache, buffers." 'tramp-load-report-modules ; pre-hook 'tramp-append-tramp-buffers ; post-hook - (propertize "\n" 'display "\ + (propertize + "\n" 'display "\ Enter your bug report in this message, including as much detail as you possibly can about the problem, what you did to cause it and what the local and remote machines are. @@ -199,7 +209,7 @@ Before reproducing the bug, you might apply M-x tramp-cleanup-all-connections -This allows to investigate from a clean environment. Another +This allows us to investigate from a clean environment. Another useful thing to do is to put (setq tramp-verbose 9) @@ -226,11 +236,14 @@ buffer in your bug report. (string-match (concat "[^" (symbol-value 'mm-7bit-chars) "]") val)) (with-current-buffer reporter-eval-buffer - (set varsym (format "(base64-decode-string \"%s\")" - (base64-encode-string val)))))) + (set + varsym + (format + "(decode-coding-string (base64-decode-string \"%s\") 'raw-text)" + (base64-encode-string (encode-coding-string val 'raw-text))))))) ;; Dump variable. - (tramp-compat-funcall 'reporter-dump-variable varsym mailbuf) + (reporter-dump-variable varsym mailbuf) (unless (hash-table-p val) ;; Remove string quotation. @@ -251,21 +264,15 @@ buffer in your bug report. (defun tramp-load-report-modules () "Load needed modules for reporting." - ;; We load message.el and mml.el from Gnus. - (if (featurep 'xemacs) - (progn - (load "message" 'noerror) - (load "mml" 'noerror)) - (require 'message nil 'noerror) - (require 'mml nil 'noerror)) - (tramp-compat-funcall 'message-mode) - (tramp-compat-funcall 'mml-mode t)) + (message-mode) + (mml-mode t)) (defun tramp-append-tramp-buffers () "Append Tramp buffers and buffer local variables into the bug report." (goto-char (point-max)) ;; Dump buffer local variables. + (insert "\nlocal variables:\n================") (dolist (buffer (delq nil (mapcar @@ -273,21 +280,23 @@ buffer in your bug report. (when (string-match "\\*tramp/" (buffer-name b)) b)) (buffer-list)))) (let ((reporter-eval-buffer buffer) - (buffer-name (buffer-name buffer)) (elbuf (get-buffer-create " *tmp-reporter-buffer*"))) (with-current-buffer elbuf (emacs-lisp-mode) (erase-buffer) - (insert "\n(setq\n") + (insert (format "\n;; %s\n(setq-local\n" (buffer-name buffer))) (lisp-indent-line) - (tramp-compat-funcall - 'reporter-dump-variable 'buffer-name (current-buffer)) - (dolist (varsym-or-cons-cell (buffer-local-variables buffer)) - (let ((varsym (or (car-safe varsym-or-cons-cell) - varsym-or-cons-cell))) - (when (string-match "tramp" (symbol-name varsym)) - (tramp-compat-funcall - 'reporter-dump-variable varsym (current-buffer))))) + (dolist + (varsym + (sort + (append + (mapcar + 'intern + (all-completions "tramp-" (buffer-local-variables buffer))) + ;; Non-tramp variables of interest. + '(default-directory)) + 'string<)) + (reporter-dump-variable varsym elbuf)) (lisp-indent-line) (insert ")\n")) (insert-buffer-substring elbuf))) @@ -297,7 +306,7 @@ buffer in your bug report. (ignore-errors (mapc (lambda (x) (when (string-match "tramp" x) (insert x "\n"))) - (split-string (tramp-compat-funcall 'list-load-path-shadows t) "\n"))) + (split-string (list-load-path-shadows t) "\n"))) ;; Append buffers only when we are in message mode. (when (and @@ -306,7 +315,7 @@ buffer in your bug report. (symbol-value 'mml-mode)) (let ((tramp-buf-regexp "\\*\\(debug \\)?tramp/") - (buffer-list (tramp-compat-funcall 'tramp-list-tramp-buffers)) + (buffer-list (tramp-list-tramp-buffers)) (curbuf (current-buffer))) ;; There is at least one Tramp buffer. @@ -353,8 +362,8 @@ This is a special notion of the `gnus/message' package. If you use another mail agent (by copying the contents of this buffer) please ensure that the buffers are attached to your email.\n\n")) (dolist (buffer buffer-list) - (tramp-compat-funcall - 'mml-insert-empty-tag 'part 'type "text/plain" + (mml-insert-empty-tag + 'part 'type "text/plain" 'encoding "base64" 'disposition "attachment" 'buffer buffer 'description buffer)) (set-buffer-modified-p nil))