(tramp-error
v2 'file-error
"add-name-to-file: file %s already exists" newname))
+ (tramp-flush-file-property v2 (file-name-directory v2-localname))
(tramp-flush-file-property v2 v2-localname)
(tramp-barf-unless-okay
v1
'copy dirname newname keep-date))
;; We must do it file-wise.
(tramp-run-real-handler
- 'copy-directory (list dirname newname keep-date parents))))))
+ 'copy-directory (list dirname newname keep-date parents)))
+
+ ;; When newname did exist, we have wrong cached values.
+ (when t2
+ (with-parsed-tramp-file-name newname nil
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-file-property v localname))))))
(defun tramp-handle-rename-file
(filename newname &optional ok-if-already-exists)
;; In case of `rename', we must flush the cache of the source file.
(when (and t1 (eq op 'rename))
(with-parsed-tramp-file-name filename nil
+ (tramp-flush-file-property v (file-name-directory localname))
(tramp-flush-file-property v localname)))
;; When newname did exist, we have wrong cached values.
(when t2
(with-parsed-tramp-file-name newname nil
+ (tramp-flush-file-property v (file-name-directory localname))
(tramp-flush-file-property v localname)))
(with-parsed-tramp-file-name (if t1 filename newname) nil
;; Both are Tramp files. We shall optimize it, when the
;; methods for filename and newname are the same.
- (let ((tmpfile (tramp-compat-make-temp-file localname)))
+ (let ((tmpfile
+ (if (file-regular-p filename)
+ (tramp-compat-make-temp-file localname)
+ (make-temp-name
+ (expand-file-name
+ tramp-temp-name-prefix
+ (tramp-compat-temporary-file-directory))))))
(unwind-protect
(progn
(tramp-do-copy-or-rename-file-out-of-band
'rename tmpfile newname keep-date))
;; Save exit.
(condition-case nil
- (delete-file tmpfile)
+ (if (file-regular-p tmpfile)
+ (delete-file tmpfile)
+ (delete-directory tmpfile 'recursive))
(error))))
;; Expand hops. Might be necessary for gateway methods.
;; If the operation was `rename', delete the original file.
(unless (eq op 'copy)
- (delete-file filename)))))
+ (if (file-regular-p filename)
+ (delete-file filename)
+ (delete-directory filename 'recursive))))))
(defun tramp-handle-make-directory (dir &optional parents)
"Like `make-directory' for Tramp files."
"Like `delete-directory' for Tramp files."
(setq directory (expand-file-name directory))
(with-parsed-tramp-file-name directory nil
+ (tramp-flush-file-property v (file-name-directory localname))
(tramp-flush-directory-property v localname)
(unless (zerop (tramp-send-command-and-check
v
"Like `delete-file' for Tramp files."
(setq filename (expand-file-name filename))
(with-parsed-tramp-file-name filename nil
+ (tramp-flush-file-property v (file-name-directory localname))
(tramp-flush-file-property v localname)
(unless (zerop (tramp-send-command-and-check
v
;; This might take a while, allow it plenty of time.
(tramp-wait-for-output (tramp-get-connection-process v) 120)
;; Make sure that it worked...
+ (tramp-flush-file-property v (file-name-directory localname))
(tramp-flush-directory-property v localname)
(and (file-exists-p filename)
(tramp-error
(or (file-directory-p localname)
(file-writable-p localname)))))
;; Short track: if we are on the local host, we can run directly.
- (progn
- (tramp-run-real-handler
- 'write-region
- (list start end localname append 'no-message lockname confirm))
- (tramp-flush-file-property v localname))
+ (tramp-run-real-handler
+ 'write-region
+ (list start end localname append 'no-message lockname confirm))
(let ((rem-dec (tramp-get-remote-coding v "remote-decoding"))
(loc-enc (tramp-get-local-coding v "local-encoding"))
" decode using `%s' failed")
filename rem-dec)))
(tramp-message
- v 5 "Decoding region into remote file %s...done" filename)
- (tramp-flush-file-property v localname))
+ v 5 "Decoding region into remote file %s...done" filename))
;; Save exit.
(delete-file tmpfile)))
(when coding-system-used
(set 'last-coding-system-used coding-system-used))))
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-file-property v localname)
+
;; We must protect `last-coding-system-used', now we have set it
;; to its correct value.
(let (last-coding-system-used (need-chown t))