GNU bug report logs - #75626
31.0.50; Dired misses or double-processes files when auto-revert-mode is enabled

Previous Next

Package: emacs;

Reported by: Tassilo Horn <tsdh <at> gnu.org>

Date: Fri, 17 Jan 2025 07:43:01 UTC

Severity: normal

Found in version 31.0.50

Done: Tassilo Horn <tsdh <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #301 received at 75626-done <at> debbugs.gnu.org (full text, mbox):

From: Tassilo Horn <tsdh <at> gnu.org>
To: Michael Albinus <michael.albinus <at> gmx.de>
Cc: Michael Heerdegen <michael_heerdegen <at> web.de>, Eli Zaretskii <eliz <at> gnu.org>,
 75626-done <at> debbugs.gnu.org
Subject: Re: bug#75626: 31.0.50; Dired misses or double-processes files when
 auto-revert-mode is enabled
Date: Sun, 02 Feb 2025 13:55:47 +0100
Michael Albinus <michael.albinus <at> gmx.de> writes:

>> Why is the macro inhibit-auto-revert defined in a progn?  I think,
>> I've never seen that before.
>
> This is a trick to bring the defmacro body into loaddefs.el. See also
> the declaration of define-short-documentation-group, for example.

Interesting, I didn't know.  Thanks!

>> And why does dired-buffer-stale-p check if the current dired buffer
>> is member of inhibit-auto-revert-buffers?  Isn't the point to move
>> the allowance check from packages' buffer-stale-function to
>> auto-revert itself?  In that case, the buffer-read-only check (set by
>> wdired-mode) should probably also be rewritten to add the currently
>> edited dired buffer to inhibit-auto-revert-buffers and to remove it
>> when wdired-mode is deactivated (wdired-finish-edit).
>
> Yes, I've moved the check of a buffer being member of
> inhibit-auto-revert-buffers to autorevert.el, see patch below. Thanks
> for the heads-up.

You're welcome.

>> Furthermore, the member check in auto-revert-buffer causes this
>> buffer to be removed from auto-revert-buffer-list meaning it will
>> never ever be reverted in the future, at least not by polling.
>
> Yes, and this is intended.  We disable auto-reverting for a given
> time.  With consequences.

That's the part I don't understand, yet.  Auto-reverts are skipped by
auto-revert-handler now for buffers in inhibit-auto-revert-buffers.
That's what I had expected and did in my previous inhibit-auto-revert
patch, too.

But my reading of the code is that the polling timer calls

  auto-revert-buffers -> auto-revert-buffer -> auto-revert-handler

where auto-revert-buffer now removes the inhibited buffer from
auto-revert-buffer-list.  So in addition to skipping it in
auto-revert-handler this time, the future polling rounds won't see it
anymore, too, because auto-revert--buffer-candidates uses
auto-revert--polled-buffers which is basically auto-revert-buffer-list +
auto-revert-remaining-buffers, at least if global-auto-revert-mode isn't
used.

So when you say "we disable auto-reverting for a given time" where I
assume "given time" is not "forever", what am I missing?  If anything, I
would expect that auto-revert-buffer pushes the inhibited buffer onto
auto-revert-remaining-buffers to prioritize it for next time.

Bye,
Tassilo




This bug report was last modified 196 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.