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-shell-quote-localname v1)
		(tramp-smb-shell-quote-localname v2)))
	(tramp-error
	 v2 'file-error
	 "error with add-name-to-file, see buffer `%s' for details"
	 (buffer-name))))))