changeset 2712:8291de1718d4

(find-change-log): If there is a buffer-local value of change-log-default-name, just return it with no searching. Previously a if it was set to a nonexistent file name, we would loop forever.
author Roland McGrath <roland@gnu.org>
date Sun, 09 May 1993 23:16:19 +0000
parents 2c2052ec537d
children fd3e1f2d7ae5
files lisp/add-log.el
diffstat 1 files changed, 31 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/add-log.el	Sun May 09 22:52:15 1993 +0000
+++ b/lisp/add-log.el	Sun May 09 23:16:19 1993 +0000
@@ -55,31 +55,37 @@
   (or file-name
       (setq file-name (or change-log-default-name
 			  default-directory)))
-  (if (file-directory-p file-name)
-      (setq file-name (expand-file-name (change-log-name) file-name)))
-  ;; Chase links before visiting the file.
-  ;; This makes it easier to use a single change log file
-  ;; for several related directories.
-  (setq file-name
-	(expand-file-name (or (file-symlink-p file-name) file-name)))
-  ;; Move up in the dir hierarchy till we find a change log file.
-  (let ((file1 file-name)
-	parent-dir)
-    (while (and (not (file-exists-p file1))
-		(progn (setq parent-dir
-			     (file-name-directory
-			      (directory-file-name
-			       (file-name-directory file1))))
-		       ;; Give up if we are already at the root dir.
-		       (not (string= (file-name-directory file1) parent-dir))))
-      ;; Move up to the parent dir and try again.
-      (setq file1 (expand-file-name (change-log-name) parent-dir)))
-    ;; If we found a change log in a parent, use that.
-    (if (file-exists-p file1)
-	(setq file-name file1)))
-  ;; Make a local variable in this buffer so we needn't search again.
-  (set (make-local-variable 'change-log-default-name) file-name)
-  file-name)
+  (if (and (eq file-name change-log-default-name)
+	   (assq 'change-log-default-name (buffer-local-variables)))
+      ;; Don't do the searching if we already have a buffer-local value.
+      file-name
+
+    (if (file-directory-p file-name)
+	(setq file-name (expand-file-name (change-log-name) file-name)))
+    ;; Chase links before visiting the file.
+    ;; This makes it easier to use a single change log file
+    ;; for several related directories.
+    (setq file-name
+	  (expand-file-name (or (file-symlink-p file-name) file-name)))
+    ;; Move up in the dir hierarchy till we find a change log file.
+    (let ((file1 file-name)
+	  parent-dir)
+      (while (and (not (file-exists-p file1))
+		  (progn (setq parent-dir
+			       (file-name-directory
+				(directory-file-name
+				 (file-name-directory file1))))
+			 ;; Give up if we are already at the root dir.
+			 (not (string= (file-name-directory file1)
+				       parent-dir))))
+	;; Move up to the parent dir and try again.
+	(setq file1 (expand-file-name (change-log-name) parent-dir)))
+      ;; If we found a change log in a parent, use that.
+      (if (file-exists-p file1)
+	  (setq file-name file1)))
+    ;; Make a local variable in this buffer so we needn't search again.
+    (set (make-local-variable 'change-log-default-name) file-name)
+    file-name))
 
 ;;;###autoload
 (defun add-change-log-entry (&optional whoami file-name other-window)