]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix Bug#20943.
authorMichael Albinus <michael.albinus@gmx.de>
Thu, 16 Jul 2015 18:04:07 +0000 (20:04 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Thu, 16 Jul 2015 18:04:07 +0000 (20:04 +0200)
* lisp/autorevert.el (auto-revert-handler): Do not check for
`buffer-modified-p'.

* lisp/files.el (buffer-stale--default-function): Check for
`buffer-modified-p'.

* test/automated/auto-revert-tests.el
(auto-revert-test02-auto-revert-mode-dired): Adapt test.

lisp/autorevert.el
lisp/files.el
test/automated/auto-revert-tests.el

index 2ff7c0115f347f26afcb990474766987e91d892b..0081419acbfaae509e6fee1194535e44c7caf885 100644 (file)
@@ -615,64 +615,63 @@ no more reverts are possible until the next call of
 (defun auto-revert-handler ()
   "Revert current buffer, if appropriate.
 This is an internal function used by Auto-Revert Mode."
-  (when (or auto-revert-tail-mode (not (buffer-modified-p)))
-    (let* ((buffer (current-buffer)) size
-          ;; Tramp caches the file attributes.  Setting
-          ;; `remote-file-name-inhibit-cache' forces Tramp to reread
-          ;; the values.
-          (remote-file-name-inhibit-cache t)
-          (revert
-           (if buffer-file-name
-               (and (or auto-revert-remote-files
-                        (not (file-remote-p buffer-file-name)))
-                    (or (not auto-revert-use-notify)
-                        auto-revert-notify-modified-p)
-                    (if auto-revert-tail-mode
-                        (and (file-readable-p buffer-file-name)
-                             (/= auto-revert-tail-pos
-                                 (setq size
-                                       (nth 7 (file-attributes
-                                               buffer-file-name)))))
-                      (funcall (or buffer-stale-function
-                                    #'buffer-stale--default-function)
-                                t)))
-             (and (or auto-revert-mode
-                      global-auto-revert-non-file-buffers)
-                  (funcall (or buffer-stale-function
-                               #'buffer-stale--default-function)
-                           t))))
-          eob eoblist)
-      (setq auto-revert-notify-modified-p nil)
-      (when revert
-       (when (and auto-revert-verbose
-                  (not (eq revert 'fast)))
-         (message "Reverting buffer `%s'." (buffer-name)))
-       ;; If point (or a window point) is at the end of the buffer,
-       ;; we want to keep it at the end after reverting.  This allows
-       ;; to tail a file.
-       (when buffer-file-name
-         (setq eob (eobp))
-         (walk-windows
-          (lambda (window)
-            (and (eq (window-buffer window) buffer)
-                 (= (window-point window) (point-max))
-                 (push window eoblist)))
-          'no-mini t))
-       (if auto-revert-tail-mode
-           (auto-revert-tail-handler size)
-         ;; Bind buffer-read-only in case user has done C-x C-q,
-         ;; so as not to forget that.  This gives undesirable results
-         ;; when the file's mode changes, but that is less common.
-         (let ((buffer-read-only buffer-read-only))
-           (revert-buffer 'ignore-auto 'dont-ask 'preserve-modes)))
-       (when buffer-file-name
-         (when eob (goto-char (point-max)))
-         (dolist (window eoblist)
-           (set-window-point window (point-max)))))
-      ;; `preserve-modes' avoids changing the (minor) modes.  But we
-      ;; do want to reset the mode for VC, so we do it manually.
-      (when (or revert auto-revert-check-vc-info)
-       (vc-find-file-hook)))))
+  (let* ((buffer (current-buffer)) size
+         ;; Tramp caches the file attributes.  Setting
+         ;; `remote-file-name-inhibit-cache' forces Tramp to reread
+         ;; the values.
+         (remote-file-name-inhibit-cache t)
+         (revert
+          (if buffer-file-name
+              (and (or auto-revert-remote-files
+                       (not (file-remote-p buffer-file-name)))
+                   (or (not auto-revert-use-notify)
+                       auto-revert-notify-modified-p)
+                   (if auto-revert-tail-mode
+                       (and (file-readable-p buffer-file-name)
+                            (/= auto-revert-tail-pos
+                                (setq size
+                                      (nth 7 (file-attributes
+                                              buffer-file-name)))))
+                     (funcall (or buffer-stale-function
+                                  #'buffer-stale--default-function)
+                              t)))
+            (and (or auto-revert-mode
+                     global-auto-revert-non-file-buffers)
+                 (funcall (or buffer-stale-function
+                              #'buffer-stale--default-function)
+                          t))))
+         eob eoblist)
+    (setq auto-revert-notify-modified-p nil)
+    (when revert
+      (when (and auto-revert-verbose
+                 (not (eq revert 'fast)))
+        (message "Reverting buffer `%s'." (buffer-name)))
+      ;; If point (or a window point) is at the end of the buffer, we
+      ;; want to keep it at the end after reverting.  This allows to
+      ;; tail a file.
+      (when buffer-file-name
+        (setq eob (eobp))
+        (walk-windows
+         (lambda (window)
+           (and (eq (window-buffer window) buffer)
+                (= (window-point window) (point-max))
+                (push window eoblist)))
+         'no-mini t))
+      (if auto-revert-tail-mode
+          (auto-revert-tail-handler size)
+        ;; Bind buffer-read-only in case user has done C-x C-q, so as
+        ;; not to forget that.  This gives undesirable results when
+        ;; the file's mode changes, but that is less common.
+        (let ((buffer-read-only buffer-read-only))
+          (revert-buffer 'ignore-auto 'dont-ask 'preserve-modes)))
+      (when buffer-file-name
+        (when eob (goto-char (point-max)))
+        (dolist (window eoblist)
+          (set-window-point window (point-max)))))
+    ;; `preserve-modes' avoids changing the (minor) modes.  But we do
+    ;; want to reset the mode for VC, so we do it manually.
+    (when (or revert auto-revert-check-vc-info)
+      (vc-find-file-hook))))
 
 (defun auto-revert-tail-handler (size)
   (let ((modified (buffer-modified-p))
index 9e04b9c7cea318ed44bb06454d4306087516d4ca..a371344d116c0381d5b3bcbc5e2cd08fb12c2a9b 100644 (file)
@@ -5424,6 +5424,7 @@ This function only handles buffers that are visiting files.
 Non-file buffers need a custom function"
   (and buffer-file-name
        (file-readable-p buffer-file-name)
+       (not (buffer-modified-p (current-buffer)))
        (not (verify-visited-file-modtime (current-buffer)))))
 
 (defvar buffer-stale-function #'buffer-stale--default-function
index a98428f7d8963f820aa58c299830c70d2264c673..204e03d423df95e4d54216bcc19828a43b0479e5 100644 (file)
              (null
               (string-match name (substring-no-properties (buffer-string)))))
 
-            ;; When the dired buffer is modified, it shall not be
-            ;; reverted.  This is questionable, see Bug#20943.
+            ;; Make dired buffer modified.  Check, that the buffer has
+            ;; been still reverted.
             (with-current-buffer (get-buffer-create "*Messages*")
               (narrow-to-region (point-max) (point-max)))
             (set-buffer-modified-p t)
                            (format "Reverting buffer `%s'." (buffer-name buf))
                            (buffer-string)))
                   (read-event nil nil 0.1))))
-            (should-not
+            (should
              (string-match name (substring-no-properties (buffer-string))))))
 
       ;; Exit.