]> git.eshelyaron.com Git - emacs.git/commitdiff
xref--find-file-buffer: Check modified-p and modtime
authorDmitry Gutov <dgutov@yandex.ru>
Fri, 25 Feb 2022 01:34:59 +0000 (03:34 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Fri, 25 Feb 2022 01:35:51 +0000 (03:35 +0200)
* lisp/progmodes/xref.el (xref--find-file-buffer):
Check whether the buffer contents match what's on disk
(bug#54025).

lisp/progmodes/xref.el

index aa98aa89f1552ab07a3c532237cc95094144412d..96fb835d0ffaefdced44506b71e53005e2677592 100644 (file)
@@ -2010,10 +2010,16 @@ Such as the current syntax table and the applied syntax properties."
 
 (defun xref--find-file-buffer (file)
   (unless (equal (car xref--last-file-buffer) file)
-    (setq xref--last-file-buffer
-          ;; `find-buffer-visiting' is considerably slower,
-          ;; especially on remote files.
-          (cons file (get-file-buffer file))))
+    ;; `find-buffer-visiting' is considerably slower,
+    ;; especially on remote files.
+    (let ((buf (get-file-buffer file)))
+      (when (and buf
+                 (or
+                  (buffer-modified-p buf)
+                  (not (verify-visited-file-modtime (current-buffer)))))
+        ;; We can't use buffers whose contents diverge from disk (bug#54025).
+        (setq buf nil))
+      (setq xref--last-file-buffer (cons file buf))))
   (cdr xref--last-file-buffer))
 
 (provide 'xref)