diff options
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/dired-aux.el | 17 | ||||
-rw-r--r-- | lisp/vc/vc.el | 3 |
2 files changed, 18 insertions, 2 deletions
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index b1521ecf018..722d036e3fc 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -1635,11 +1635,26 @@ If `ask', ask for user confirmation." dired-create-files-failures) (dired-log "Can't set date on %s:\n%s\n" from err)))))) +(defcustom dired-vc-rename-file nil + "Whether Dired should register file renaming in underlying vc system. +If nil, use default `rename-file'. +If non-nil and the renamed files are under version control, +rename them using `vc-rename-file'." + :type '(choice (const :tag "Use rename-file" nil) + (const :tag "Use vc-rename-file" t)) + :group 'dired + :version "27.1") + ;;;###autoload (defun dired-rename-file (file newname ok-if-already-exists) (dired-handle-overwrite newname) (dired-maybe-create-dirs (file-name-directory newname)) - (rename-file file newname ok-if-already-exists) ; error is caught in -create-files + (if (and dired-vc-rename-file + (vc-backend file) + (ignore-errors (vc-responsible-backend newname))) + (vc-rename-file file newname) + ;; error is caught in -create-files + (rename-file file newname ok-if-already-exists)) ;; Silently rename the visited file of any buffer visiting this file. (and (get-file-buffer file) (with-current-buffer (get-file-buffer file) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index c982b0220e3..20056dec7f9 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2913,11 +2913,12 @@ current buffer's file name if it's under version control." (when (file-exists-p new) (error "New file already exists")) (let ((state (vc-state old))) - (unless (memq state '(up-to-date edited)) + (unless (memq state '(up-to-date edited added)) (error "Please %s files before moving them" (if (stringp state) "check in" "update")))) (vc-call rename-file old new) (vc-file-clearprops old) + (vc-file-clearprops new) ;; Move the actual file (unless the backend did it already) (when (file-exists-p old) (rename-file old new)) ;; ?? Renaming a file might change its contents due to keyword expansion. |