Subject: bug#19449: 25.0.50; `auto-revert-tail-mode' tries to revert remote files even if `auto-revert-remote-files' is nil

From: Filipp Gunbin <[email-masked]>
Date: Fri, 26 Dec 2014 23:24:43 +0300

Below is the suggested patch.

Analysis:

When the `auto-revert-tail-mode' is called it temporarily enables
auto-revert-mode:

      (or auto-revert-mode
	  (let ((auto-revert-tail-mode t))
	    (auto-revert-mode 1)))

`auto-revert-mode' then calls `auto-revert-buffers' which in turn calls
`auto-revert-handler' (fixed by the patch).

Then, this code yielded t:

+	      (and (or auto-revert-mode
+		       global-auto-revert-non-file-buffers)

which resulted as `revert' set to t.

In the end, `(auto-revert-tail-handler size)' was evaluted with nil
size.

This produces error:

Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil)
  auto-revert-tail-handler(nil)

Fix:

In `revert' value calculation, `or' is changed to `if'.  The "then"
clause applies to file-visiting buffers, this is where the result of
`file-remote-p' is analyzed.  The "else" clause case applies to non-file
buffers.

Ok to apply?

Filipp

diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index f1074e2..514dc2b 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -589,8 +589,8 @@ This is an internal function used by Auto-Revert Mode."
 	   ;; the values.
 	   (remote-file-name-inhibit-cache t)
 	   (revert
-	    (or (and buffer-file-name
-		     (or auto-revert-remote-files
+	    (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)
@@ -603,11 +603,11 @@ This is an internal function used by Auto-Revert Mode."
 		       (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))))
+	      (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