diff options
author | Richard M. Stallman <rms@gnu.org> | 1993-11-12 22:31:12 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1993-11-12 22:31:12 +0000 |
commit | d52f0de91eba27581cccf8521546e0368494a0ce (patch) | |
tree | 96a4a66bbcc51b669082f26fdeb317ee44cea3fd | |
parent | ae06ea79c817b855e68347eb43f8b84b61458150 (diff) | |
download | emacs-d52f0de91eba27581cccf8521546e0368494a0ce.tar.gz |
(vc-rename-file): Don't overwrite an existing file.
Fix test for unsaved files.
Calculate name of new master file properly.
-rw-r--r-- | lisp/vc.el | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/lisp/vc.el b/lisp/vc.el index 5adf1ca8147..145be72c7c5 100644 --- a/lisp/vc.el +++ b/lisp/vc.el @@ -1137,19 +1137,38 @@ A prefix argument means do not revert the buffer afterwards." "Rename file OLD to NEW, and rename its master file likewise." (interactive "fVC rename file: \nFRename to: ") (let ((oldbuf (get-file-buffer old))) - (if (buffer-modified-p oldbuf) + (if (and oldbuf (buffer-modified-p oldbuf)) (error "Please save files before moving them")) (if (get-file-buffer new) (error "Already editing new file name")) + (if (file-exists-p new) + (error "New file already exists")) (let ((oldmaster (vc-name old))) (if oldmaster - (if (vc-locking-user old) - (error "Please check in files before moving them")) - (if (or (file-symlink-p oldmaster) - ;; This had FILE, I changed it to OLD. -- rms. - (file-symlink-p (vc-backend-subdirectory-name old))) - (error "This is not a safe thing to do in the presence of symbolic links")) - (rename-file oldmaster (vc-name new))) + (progn + (if (vc-locking-user old) + (error "Please check in files before moving them")) + (if (or (file-symlink-p oldmaster) + ;; This had FILE, I changed it to OLD. -- rms. + (file-symlink-p (vc-backend-subdirectory-name old))) + (error "This is not a safe thing to do in the presence of symbolic links")) + (rename-file + oldmaster + (let ((backend (vc-backend-deduce old)) + (newdir (or (file-name-directory new) "")) + (newbase (file-name-nondirectory new))) + (catch 'found + (mapcar + (function + (lambda (s) + (if (eq backend (cdr s)) + (let* ((newmaster (format (car s) newdir newbase)) + (newmasterdir (file-name-directory newmaster))) + (if (or (not newmasterdir) + (file-directory-p newmasterdir)) + (throw 'found newmaster)))))) + vc-master-templates) + (error "New file lacks a version control directory")))))) (if (or (not oldmaster) (file-exists-p old)) (rename-file old new))) ; ?? Renaming a file might change its contents due to keyword expansion. |