Function: tramp-smb-handle-add-name-to-file
tramp-smb-handle-add-name-to-file is a byte-compiled function defined
in tramp-smb.el.gz.
Signature
(tramp-smb-handle-add-name-to-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)
Documentation
Like add-name-to-file for Tramp files.
Source Code
;; Defined in /usr/src/emacs/lisp/net/tramp-smb.el.gz
;; File name primitives.
(defun tramp-smb-handle-add-name-to-file
(filename newname &optional ok-if-already-exists)
"Like `add-name-to-file' for Tramp files."
(unless (tramp-equal-remote filename newname)
(with-parsed-tramp-file-name
(if (tramp-tramp-file-p filename) filename newname) nil
(tramp-error
v 'file-error
"add-name-to-file: %s"
"only implemented for same method, same user, same host")))
(with-parsed-tramp-file-name filename v1
(with-parsed-tramp-file-name newname v2
(when (file-directory-p filename)
(tramp-error
v2 'file-error
"add-name-to-file: %s must not be a directory" filename))
;; Do the 'confirm if exists' thing.
(when (file-exists-p newname)
;; What to do?
(if (or (null ok-if-already-exists) ; not allowed to exist
(and (numberp ok-if-already-exists)
(not (yes-or-no-p
(format
"File %s already exists; make it a link anyway?"
v2-localname)))))
(tramp-error v2 'file-already-exists newname)
(delete-file newname)))
;; We must also flush the cache of the directory, because
;; `file-attributes' reads the values from there.
(tramp-flush-file-properties v2 v2-localname)
(unless
(tramp-smb-send-command
v1
(format
"%s \"%s\" \"%s\""
(if (tramp-smb-get-cifs-capabilities v1) "link" "hardlink")
(tramp-smb-get-localname v1)
(tramp-smb-get-localname v2)))
(tramp-error
v2 'file-error
"error with add-name-to-file, see buffer `%s' for details"
(buffer-name))))))