diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 9d8476e3e75..026e19fb779 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -2358,7 +2358,9 @@ unless OK-IF-ALREADY-EXISTS is non-nil." (dired-handle-overwrite newname) (dired-maybe-create-dirs (file-name-directory newname)) (if (and dired-vc-rename-file - (vc-backend file) + (if file-is-dir-p + (ignore-errors (vc-responsible-backend file)) + (vc-backend file)) (ignore-errors (vc-responsible-backend newname))) (vc-rename-file file newname) ;; error is caught in -create-files diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 9d9366eed41..9654f2bb699 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -5032,18 +5032,23 @@ current buffer's file name if it's under version control." (cl-callf expand-file-name old) (cl-callf expand-file-name new) (let ((oldbuf (get-file-buffer old)) - (default-directory (file-name-directory old))) + (default-directory (file-name-directory old)) + (dirp (file-directory-p old))) (when (and oldbuf (buffer-modified-p oldbuf)) (error "Please save files before moving them")) (when (get-file-buffer new) (error "Already editing new file name")) (when (file-exists-p new) (error "New file already exists")) - (let ((state (vc-state old))) - (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) + (unless dirp + (let ((state (vc-state old))) + (unless (memq state '(up-to-date edited added)) + (error "Please %s files before moving them" + (if (stringp state) "check in" "update"))))) + (vc-call-backend (if dirp + (vc-responsible-backend old) + (vc-backend old)) + 'rename-file old new) (vc-file-clearprops old) (vc-file-clearprops new) ;; Move the actual file (unless the backend did it already)