From: Stefan Monnier <monnier@iro.umontreal.ca>
Date: Wed, 9 Jul 2014 18:54:06 +0000 (-0400)
Subject: * lisp/vc/log-edit.el (log-edit-changelog-entries): Don't both visiting
X-Git-Tag: emacs-24.3.93~77
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5d71cc6bfd658ae103baf9fb30de5daa2681b723;p=emacs.git

* lisp/vc/log-edit.el (log-edit-changelog-entries): Don't both visiting
a non-existing file.

Fixes: debbugs:17970
---

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 1ad086acf61..a236e0470bc 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,8 @@
 2014-07-09  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* vc/log-edit.el (log-edit-changelog-entries): Don't both visiting
+	a non-existing file (bug#17970).
+
 	* faces.el (face-name): Undo last change.
 	(x-resolve-font-name): Don't call face-name (bug#17956).
 
diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el
index 1d75411ec1f..322a9057fbc 100644
--- a/lisp/vc/log-edit.el
+++ b/lisp/vc/log-edit.el
@@ -905,44 +905,45 @@ where LOGBUFFER is the name of the ChangeLog buffer, and each
              ;; that memoizing which is undesired here.
              (setq change-log-default-name nil)
              (find-change-log)))))
-    (with-current-buffer (find-file-noselect changelog-file-name)
-      (unless (eq major-mode 'change-log-mode) (change-log-mode))
-      (goto-char (point-min))
-      (if (looking-at "\\s-*\n") (goto-char (match-end 0)))
-      (if (not (log-edit-changelog-ours-p))
-	  (list (current-buffer))
-	(save-restriction
-	  (log-edit-narrow-changelog)
-	  (goto-char (point-min))
-
-	  ;; Search for the name of FILE relative to the ChangeLog.  If that
-	  ;; doesn't occur anywhere, they're not using full relative
-	  ;; filenames in the ChangeLog, so just look for FILE; we'll accept
-	  ;; some false positives.
-	  (let ((pattern (file-relative-name
-			  file (file-name-directory changelog-file-name))))
-	    (if (or (string= pattern "")
-		    (not (save-excursion
-			   (search-forward pattern nil t))))
-		(setq pattern (file-name-nondirectory file)))
-
-            (setq pattern (concat "\\(^\\|[^[:alnum:]]\\)"
-                                  (regexp-quote pattern)
-                                  "\\($\\|[^[:alnum:]]\\)"))
-
-	    (let (texts
-                  (pos (point)))
-	      (while (and (not (eobp)) (re-search-forward pattern nil t))
-		(let ((entry (log-edit-changelog-entry)))
-                  (if (< (elt entry 1) (max (1+ pos) (point)))
-                      ;; This is not relevant, actually.
-                      nil
-                    (push entry texts))
-                  ;; Make sure we make progress.
-                  (setq pos (max (1+ pos) (elt entry 1)))
-		  (goto-char pos)))
-
-	      (cons (current-buffer) texts))))))))
+    (when (file-exists-p changelog-file-name)
+      (with-current-buffer (find-file-noselect changelog-file-name)
+        (unless (eq major-mode 'change-log-mode) (change-log-mode))
+        (goto-char (point-min))
+        (if (looking-at "\\s-*\n") (goto-char (match-end 0)))
+        (if (not (log-edit-changelog-ours-p))
+            (list (current-buffer))
+          (save-restriction
+            (log-edit-narrow-changelog)
+            (goto-char (point-min))
+
+            ;; Search for the name of FILE relative to the ChangeLog.  If that
+            ;; doesn't occur anywhere, they're not using full relative
+            ;; filenames in the ChangeLog, so just look for FILE; we'll accept
+            ;; some false positives.
+            (let ((pattern (file-relative-name
+                            file (file-name-directory changelog-file-name))))
+              (if (or (string= pattern "")
+                      (not (save-excursion
+                             (search-forward pattern nil t))))
+                  (setq pattern (file-name-nondirectory file)))
+
+              (setq pattern (concat "\\(^\\|[^[:alnum:]]\\)"
+                                    (regexp-quote pattern)
+                                    "\\($\\|[^[:alnum:]]\\)"))
+
+              (let (texts
+                    (pos (point)))
+                (while (and (not (eobp)) (re-search-forward pattern nil t))
+                  (let ((entry (log-edit-changelog-entry)))
+                    (if (< (elt entry 1) (max (1+ pos) (point)))
+                        ;; This is not relevant, actually.
+                        nil
+                      (push entry texts))
+                    ;; Make sure we make progress.
+                    (setq pos (max (1+ pos) (elt entry 1)))
+                    (goto-char pos)))
+
+                (cons (current-buffer) texts)))))))))
 
 (defun log-edit-changelog-insert-entries (buffer beg end &rest files)
   "Insert the text from BUFFER between BEG and END.