1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-28 07:45:00 +00:00

Don't bother making files writable for commit with modern VCS

* lisp/vc/vc.el (vc-next-action):
Only gripe about committing read-only files for RCS and SCCS.

Fixes: debbugs:9781
This commit is contained in:
Glenn Morris 2012-09-26 23:59:21 -07:00
parent 4695c85095
commit daee954c00
2 changed files with 26 additions and 18 deletions

View File

@ -1,3 +1,8 @@
2012-09-27 Glenn Morris <rgm@gnu.org>
* vc/vc.el (vc-next-action): Only gripe about committing read-only
files for RCS and SCCS. (Bug#9781)
2012-09-27 Chong Yidong <cyd@gnu.org>
* progmodes/verilog-mode.el (verilog-mode-release-emacs): Fix last

View File

@ -1105,24 +1105,27 @@ For old-style locking-based version control systems, like RCS:
;; Files have local changes
((vc-compatible-state state 'edited)
(let ((ready-for-commit files))
;; If files are edited but read-only, give user a chance to correct.
(dolist (file files)
;; If committing a mix of removed and edited files, the
;; fileset has state = 'edited. Rather than checking the
;; state of each individual file in the fileset, it seems
;; simplest to just check if the file exists. Bug#9781.
(when (and (file-exists-p file) (not (file-writable-p file)))
;; Make the file+buffer read-write.
(unless (y-or-n-p (format "%s is edited but read-only; make it writable and continue? " file))
(error "Aborted"))
;; Maybe we somehow lost permissions on the directory.
(condition-case nil
(set-file-modes file (logior (file-modes file) 128))
(error (error "Unable to make file writable")))
(let ((visited (get-file-buffer file)))
(when visited
(with-current-buffer visited
(read-only-mode -1))))))
;; CVS, SVN and bzr don't care about read-only (bug#9781).
;; RCS does, SCCS might (someone should check...).
(when (memq backend '(RCS SCCS))
;; If files are edited but read-only, give user a chance to correct.
(dolist (file files)
;; If committing a mix of removed and edited files, the
;; fileset has state = 'edited. Rather than checking the
;; state of each individual file in the fileset, it seems
;; simplest to just check if the file exists. Bug#9781.
(when (and (file-exists-p file) (not (file-writable-p file)))
;; Make the file+buffer read-write.
(unless (y-or-n-p (format "%s is edited but read-only; make it writable and continue? " file))
(error "Aborted"))
;; Maybe we somehow lost permissions on the directory.
(condition-case nil
(set-file-modes file (logior (file-modes file) 128))
(error (error "Unable to make file writable")))
(let ((visited (get-file-buffer file)))
(when visited
(with-current-buffer visited
(read-only-mode -1)))))))
;; Allow user to revert files with no changes
(save-excursion
(dolist (file files)