log-edit.el fix for bug#7598.
authorGlenn Morris <rgm@gnu.org>
Fri, 8 Apr 2011 03:21:30 +0000 (20:21 -0700)
committerGlenn Morris <rgm@gnu.org>
Fri, 8 Apr 2011 03:21:30 +0000 (20:21 -0700)
* lisp/vc/log-edit.el (log-edit-empty-buffer-p): New function.
(log-edit-insert-cvs-template, log-edit-insert-cvs-rcstemplate):
Use log-edit-empty-buffer-p.

lisp/ChangeLog
lisp/vc/log-edit.el

index ae36e17..6e13e1e 100644 (file)
@@ -1,5 +1,9 @@
 2011-04-08  Glenn Morris  <rgm@gnu.org>
 
+       * vc/log-edit.el (log-edit-empty-buffer-p): New function.
+       (log-edit-insert-cvs-template, log-edit-insert-cvs-rcstemplate):
+       Use log-edit-empty-buffer-p.  (Bug#7598)
+
        * net/rlogin.el (rlogin-process-connection-type): Simplify.
        (rlogin-mode-map): Initialize in the defvar.
        (rlogin): Use ignore-errors.
index 54a2cb4..b3f5cfb 100644 (file)
@@ -531,13 +531,25 @@ If you want to abort the commit, simply delete the buffer."
        (shrink-window-if-larger-than-buffer)
        (selected-window)))))
 
+(defun log-edit-empty-buffer-p ()
+  "Return non-nil if the buffer is \"empty\"."
+  (or (= (point-min) (point-max))
+      (save-excursion
+        (goto-char (point-min))
+        (while (and (looking-at "^\\(Summary: \\)?$")
+                    (zerop (forward-line 1))))
+        (eobp))))
+
 (defun log-edit-insert-cvs-template ()
   "Insert the template specified by the CVS administrator, if any.
 This simply uses the local CVS/Template file."
   (interactive)
   (when (or (called-interactively-p 'interactive)
-           (= (point-min) (point-max)))
+            (log-edit-empty-buffer-p))
+    ;; Should the template take precedence over an empty Summary:,
+    ;; ie should we first erase the buffer?
     (when (file-readable-p "CVS/Template")
+      (goto-char (point-max))
       (insert-file-contents "CVS/Template"))))
 
 (defun log-edit-insert-cvs-rcstemplate ()
@@ -546,8 +558,9 @@ This contacts the repository to get the rcstemplate file and
 can thus take some time."
   (interactive)
   (when (or (called-interactively-p 'interactive)
-           (= (point-min) (point-max)))
+            (log-edit-empty-buffer-p))
     (when (file-readable-p "CVS/Root")
+      (goto-char (point-max))
       ;; Ignore the stderr stuff, even if it's an error.
       (call-process "cvs" nil '(t nil) nil
                     "checkout" "-p" "CVSROOT/rcstemplate"))))