(diff-find-source-location): Declare.
authorGlenn Morris <rgm@gnu.org>
Sat, 6 Sep 2008 19:38:44 +0000 (19:38 +0000)
committerGlenn Morris <rgm@gnu.org>
Sat, 6 Sep 2008 19:38:44 +0000 (19:38 +0000)
(find-change-log): If called from a diff buffer, try to switch to the
source buffer (e.g. to respect change-log-default-name there).

lisp/ChangeLog
lisp/add-log.el

index 907d8cb..71c10d6 100644 (file)
@@ -1,5 +1,9 @@
 2008-09-06  Glenn Morris  <rgm@gnu.org>
 
+       * add-log.el (diff-find-source-location): Declare.
+       (find-change-log): If called from a diff buffer, try to switch to the
+       source buffer (e.g. to respect change-log-default-name there).
+
        * progmodes/sh-script.el (sh-get-kw): Remove '()' from the list of
        unallowed characters; added 2006-10-10 without comment.  (Bug#753)
 
index 6bb1178..98aa910 100644 (file)
@@ -665,6 +665,8 @@ nil, by matching `change-log-version-number-regexp-list'."
                        regexps nil))))
            version)))))
 
+(declare-function diff-find-source-location "diff-mode"
+                 (&optional other-file reverse))
 
 ;;;###autoload
 (defun find-change-log (&optional file-name buffer-file)
@@ -682,12 +684,18 @@ directory and its successive parents for a file so named.
 Once a file is found, `change-log-default-name' is set locally in the
 current buffer to the complete file name.
 Optional arg BUFFER-FILE overrides `buffer-file-name'."
-  ;; If user specified a file name or if this buffer knows which one to use,
-  ;; just use that.
-  (or file-name
-      (setq file-name (and change-log-default-name
-                          (file-name-directory change-log-default-name)
-                          change-log-default-name))
+  ;; If we are called from a diff, first switch to the source buffer;
+  ;; in order to respect buffer-local settings of change-log-default-name, etc.
+  (let ((buff (if (eq major-mode 'diff-mode)
+                 (car (ignore-errors (diff-find-source-location))))))
+    (with-current-buffer (if (buffer-live-p buff) buff
+                          (current-buffer))
+      ;; If user specified a file name or if this buffer knows which one to use,
+      ;; just use that.
+      (or file-name
+         (setq file-name (and change-log-default-name
+                              (file-name-directory change-log-default-name)
+                              change-log-default-name)))
       (progn
        ;; Chase links in the source file
        ;; and use the change log in the dir where it points.
@@ -720,9 +728,9 @@ Optional arg BUFFER-FILE overrides `buffer-file-name'."
                         parent-dir)))
          ;; If we found a change log in a parent, use that.
          (if (or (get-file-buffer file1) (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)
+             (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)
 
 (defun add-log-file-name (buffer-file log-file)