Don't bother making files writable for commit with modern VCS
authorGlenn Morris <rgm@gnu.org>
Thu, 27 Sep 2012 06:59:21 +0000 (23:59 -0700)
committerGlenn Morris <rgm@gnu.org>
Thu, 27 Sep 2012 06:59:21 +0000 (23:59 -0700)
* lisp/vc/vc.el (vc-next-action):
Only gripe about committing read-only files for RCS and SCCS.

Fixes: debbugs:9781

lisp/ChangeLog
lisp/vc/vc.el

index 2bca856..7c803fc 100644 (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
index 89e0d0c..2da721b 100644 (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)