From: Michael Albinus Date: Mon, 11 Nov 2013 15:18:07 +0000 (+0100) Subject: * net/tramp-sh.el (tramp-do-copy-or-rename-file-via-buffer) X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~870 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=7ce8fcc3224e694afb7add9461e56687ad317868;p=emacs.git * net/tramp-sh.el (tramp-do-copy-or-rename-file-via-buffer) (tramp-sh-handle-file-local-copy): Don't write a message when saving temporary files. * net/tramp-smb.el (tramp-smb-handle-copy-directory): Fix bug when both directories are remote. (tramp-smb-handle-directory-files): Do not return double entries. Do not expand full file names. (tramp-smb-handle-insert-directory): Accept nil SWITCHES. (tramp-smb-handle-write-region): Implement APPEND. (tramp-smb-get-stat-capability): Fix a stupid bug. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1e1992fae2a..7c4c76eeb12 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,17 @@ +2013-11-11 Michael Albinus + + * net/tramp-sh.el (tramp-do-copy-or-rename-file-via-buffer) + (tramp-sh-handle-file-local-copy): Don't write a message when + saving temporary files. + + * net/tramp-smb.el (tramp-smb-handle-copy-directory): Fix bug when + both directories are remote. + (tramp-smb-handle-directory-files): Do not return double entries. + Do not expand full file names. + (tramp-smb-handle-insert-directory): Accept nil SWITCHES. + (tramp-smb-handle-write-region): Implement APPEND. + (tramp-smb-get-stat-capability): Fix a stupid bug. + 2013-11-11 Stefan Monnier * bindings.el (ctl-x-map): Bind C-x SPC to rectangle-mark-mode. diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 9b15c3655e0..8bed62d7190 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -2013,7 +2013,7 @@ KEEP-DATE is non-nil if NEWNAME should have the same timestamp as FILENAME." ;; `jka-compr-inhibit' to t. (let ((coding-system-for-write 'binary) (jka-compr-inhibit t)) - (write-region (point-min) (point-max) newname))) + (write-region (point-min) (point-max) newname nil 'no-message))) ;; KEEP-DATE handling. (when keep-date (set-file-times newname (nth 5 (file-attributes filename)))) ;; Set the mode. @@ -2932,7 +2932,8 @@ the result will be a local, non-Tramp, filename." ;; epa-file gets confused. (let (file-name-handler-alist (coding-system-for-write 'binary)) - (write-region (point-min) (point-max) tmpfile))) + (write-region + (point-min) (point-max) tmpfile nil 'no-message))) ;; If tramp-decoding-function is not defined for this ;; method, we invoke tramp-decoding-command instead. @@ -2942,7 +2943,8 @@ the result will be a local, non-Tramp, filename." (let (file-name-handler-alist (coding-system-for-write 'binary)) (with-current-buffer (tramp-get-buffer v) - (write-region (point-min) (point-max) tmpfile2))) + (write-region + (point-min) (point-max) tmpfile2 nil 'no-message))) (unwind-protect (tramp-call-local-coding-command loc-dec tmpfile2 tmpfile) diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index 4f294050bb9..e322b6764a1 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -411,10 +411,12 @@ pass to the OPERATION." (tramp-compat-temporary-file-directory))))) (unwind-protect (progn + (make-directory tmpdir) (tramp-compat-copy-directory - dirname tmpdir keep-date parents) + dirname tmpdir keep-date 'parents) (tramp-compat-copy-directory - tmpdir newname keep-date parents)) + (expand-file-name (file-name-nondirectory dirname) tmpdir) + newname keep-date parents)) (tramp-compat-delete-directory tmpdir 'recursive)))) ;; We can copy recursively. @@ -640,7 +642,8 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (directory &optional full match nosort) "Like `directory-files' for Tramp files." (let ((result (mapcar 'directory-file-name - (file-name-all-completions "" directory)))) + (file-name-all-completions "" directory))) + res) ;; Discriminate with regexp. (when match (setq result @@ -651,12 +654,13 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (when full (setq result (mapcar - (lambda (x) (expand-file-name x directory)) + (lambda (x) (format "%s/%s" directory x)) result))) ;; Sort them if necessary. (unless nosort (setq result (sort result 'string-lessp))) - ;; That's it. - result)) + ;; Remove double entries. + (dolist (elt result res) + (add-to-list 'res elt 'append)))) (defun tramp-smb-handle-expand-file-name (name &optional dir) "Like `expand-file-name' for Tramp files." @@ -924,6 +928,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (filename switches &optional wildcard full-directory-p) "Like `insert-directory' for Tramp files." (setq filename (expand-file-name filename)) + (unless switches (setq switches "")) (if full-directory-p ;; Called from `dired-add-entry'. (setq filename (file-name-as-directory filename)) @@ -1441,9 +1446,6 @@ errors for shares like \"C$/\", which are common in Microsoft Windows." "Like `write-region' for Tramp files." (setq filename (expand-file-name filename)) (with-parsed-tramp-file-name filename nil - (unless (eq append nil) - (tramp-error - v 'file-error "Cannot append to file using Tramp (`%s')" filename)) ;; XEmacs takes a coding system as the seventh argument, not `confirm'. (when (and (not (featurep 'xemacs)) confirm (file-exists-p filename)) @@ -1456,6 +1458,8 @@ errors for shares like \"C$/\", which are common in Microsoft Windows." (tramp-flush-file-property v localname) (let ((curbuf (current-buffer)) (tmpfile (tramp-compat-make-temp-file filename))) + (when (and append (file-exists-p filename)) + (copy-file filename tmpfile 'ok)) ;; We say `no-message' here because we don't want the visited file ;; modtime data to be clobbered from the temp file. We call ;; `set-visited-file-modtime' ourselves later on. @@ -1727,7 +1731,7 @@ Result is the list (LOCALNAME MODE SIZE MTIME)." ;; When we are not logged in yet, we return nil. (if (and (tramp-smb-get-share vec) (let ((p (tramp-get-connection-process vec))) - p (processp p) (memq (process-status p) '(run open)))) + (and p (processp p) (memq (process-status p) '(run open))))) (with-tramp-connection-property (tramp-get-connection-process vec) "stat-capability" (tramp-smb-send-command vec "stat \"/\""))))