GNU bug report logs - #65904
29.1.50; autorevert can't revert files in a symlink directory

Previous Next

Package: emacs;

Reported by: Zhang Haijun <ccsmile2008 <at> outlook.com>

Date: Wed, 13 Sep 2023 04:01:02 UTC

Severity: wishlist

Merged with 16113, 18883, 64061

Found in versions 24.3.50, 24.4, 29.1.50, 30.0.50

To reply to this bug, email your comments to 65904 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#65904; Package emacs. (Wed, 13 Sep 2023 04:01:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Zhang Haijun <ccsmile2008 <at> outlook.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Wed, 13 Sep 2023 04:01:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Zhang Haijun <ccsmile2008 <at> outlook.com>
To: "bug-gnu-emacs <at> gnu.org" <bug-gnu-emacs <at> gnu.org>
Subject: 29.1.50; autorevert can't revert files in a symlink directory
Date: Wed, 13 Sep 2023 03:55:15 +0000
[Message part 1 (text/plain, inline)]
It works in Emacs 26/27, But it doesn't work in Emacs 29.

0. emacs -Q
1. use the following code to open an existing file in a symlink directory
(progn
  (setq auto-revert-use-notify t
            auto-revert-interval 3)
  (global-auto-revert-mode 1)
  (setq find-file-hook (delq 'vc-refresh-state find-file-hook))
  (find-file "~/symlink_dir/test.txt"))

2. modify the test file in external program and save
3. emacs doesn't autorevert the file



In GNU Emacs 29.1.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.37, cairo version 1.16.0) of 2023-09-05 built on debian-think
Repository revision: 4995c0e685f994a554d6f82c4f6d9b24ea722b66
Repository branch: emacs-29-mod
Windowing system distributor 'The X.Org Foundation', version 11.0.12101007
System Description: Debian GNU/Linux 12 (bookworm)

Configured using:
 'configure --prefix=/home/jun/apps/emacs-29 --with-x-toolkit=gtk3
 --with-modules --without-makeinfo CFLAGS=-O2'

Configured features:
CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON
LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND
SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM
XINPUT2 XPM GTK3 ZLIB

Important settings:
  value of $LC_CTYPE: zh_CN.UTF-8
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=fcitx
  locale-coding-system: utf-8-unix

Major mode: Text

Minor modes in effect:
  global-auto-revert-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search time-date subr-x mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils
autorevert filenotify cl-loaddefs cl-lib china-util rmc iso-transl
tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
simple cl-generic indonesian philippine cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite emoji-zwj charscript charprop case-table
epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
loaddefs theme-loaddefs faces cus-face macroexp files window
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget keymap hashtable-print-readable backquote threads dbusbind
inotify dynamic-setting system-font-setting font-render-setting cairo
move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process
emacs)

Memory information:
((conses 16 38732 5890)
 (symbols 48 5317 0)
 (strings 32 13519 1764)
 (string-bytes 1 390023)
 (vectors 16 10997)
 (vector-slots 8 211846 7863)
 (floats 8 22 23)
 (intervals 56 235 0)
 (buffers 984 11))

[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65904; Package emacs. (Wed, 13 Sep 2023 12:57:02 GMT) Full text and rfc822 format available.

Message #8 received at 65904 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Zhang Haijun <ccsmile2008 <at> outlook.com>,
 Michael Albinus <michael.albinus <at> gmx.de>
Cc: 65904 <at> debbugs.gnu.org
Subject: Re: bug#65904: 29.1.50;
 autorevert can't revert files in a symlink directory
Date: Wed, 13 Sep 2023 15:55:23 +0300
> From: Zhang Haijun <ccsmile2008 <at> outlook.com>
> Date: Wed, 13 Sep 2023 03:55:15 +0000
> 
> 
> It works in Emacs 26/27, But it doesn't work in Emacs 29.
> 
> 0. emacs -Q
> 1. use the following code to open an existing file in a symlink directory
> (progn
>   (setq auto-revert-use-notify t
>             auto-revert-interval 3)
>   (global-auto-revert-mode 1)
>   (setq find-file-hook (delq 'vc-refresh-state find-file-hook))
>   (find-file "~/symlink_dir/test.txt"))
> 
> 2. modify the test file in external program and save
> 3. emacs doesn't autorevert the file

AFAICT, we don't support autoreverting symlinks, since Dec 2013, so it
sounds strange that you say it worked in Emacs 27.

The relevant discussion is here:

  https://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00282.html

The reason for this non-support seems to be performance.

I hope Michael (CC'ed) will be able to tell more about this.

A workaround is to set auto-revert-use-notify to nil.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65904; Package emacs. (Wed, 13 Sep 2023 13:13:01 GMT) Full text and rfc822 format available.

Message #11 received at 65904 <at> debbugs.gnu.org (full text, mbox):

From: zhanghj <ccsmile2008 <at> outlook.com>
To: Eli Zaretskii <eliz <at> gnu.org>, Michael Albinus <michael.albinus <at> gmx.de>
Cc: 65904 <at> debbugs.gnu.org
Subject: Re: bug#65904: 29.1.50; autorevert can't revert files in a symlink
 directory
Date: Wed, 13 Sep 2023 21:12:30 +0800
Do you mean that the test file itself is a symlink file?

In my case, the test file itself is a normal file. But its parent 
directory is a symlink.

I just tested:  'file-symlink-p' return nil for the test file.


On 9/13/23 20:56, Eli Zaretskii wrote:
>> From: Zhang Haijun <ccsmile2008 <at> outlook.com>
>> Date: Wed, 13 Sep 2023 03:55:15 +0000
>>
>>
>> It works in Emacs 26/27, But it doesn't work in Emacs 29.
>>
>> 0. emacs -Q
>> 1. use the following code to open an existing file in a symlink directory
>> (progn
>>    (setq auto-revert-use-notify t
>>             auto-revert-interval 3)
>>    (global-auto-revert-mode 1)
>>    (setq find-file-hook (delq 'vc-refresh-state find-file-hook))
>>    (find-file "~/symlink_dir/test.txt"))
>>
>> 2. modify the test file in external program and save
>> 3. emacs doesn't autorevert the file
> AFAICT, we don't support autoreverting symlinks, since Dec 2013, so it
> sounds strange that you say it worked in Emacs 27.
>
> The relevant discussion is here:
>
>    https://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00282.html
>
> The reason for this non-support seems to be performance.
>
> I hope Michael (CC'ed) will be able to tell more about this.
>
> A workaround is to set auto-revert-use-notify to nil.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65904; Package emacs. (Wed, 13 Sep 2023 13:30:02 GMT) Full text and rfc822 format available.

Message #14 received at 65904 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: zhanghj <ccsmile2008 <at> outlook.com>
Cc: michael.albinus <at> gmx.de, 65904 <at> debbugs.gnu.org
Subject: Re: bug#65904: 29.1.50; autorevert can't revert files in a symlink
 directory
Date: Wed, 13 Sep 2023 16:28:35 +0300
> Date: Wed, 13 Sep 2023 21:12:30 +0800
> Cc: 65904 <at> debbugs.gnu.org
> From: zhanghj <ccsmile2008 <at> outlook.com>
> 
> Do you mean that the test file itself is a symlink file?
> 
> In my case, the test file itself is a normal file. But its parent 
> directory is a symlink.
> 
> I just tested:  'file-symlink-p' return nil for the test file.

Emacs watches the parent directory of the file, not the file itself
(because certain changes regarding the file are only seen if we watch
the directory).

But I will let Michael chime in, in case I'm missing something.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65904; Package emacs. (Wed, 13 Sep 2023 13:35:01 GMT) Full text and rfc822 format available.

Message #17 received at 65904 <at> debbugs.gnu.org (full text, mbox):

From: Michael Albinus <michael.albinus <at> gmx.de>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 65904 <at> debbugs.gnu.org, Zhang Haijun <ccsmile2008 <at> outlook.com>
Subject: Re: bug#65904: 29.1.50; autorevert can't revert files in a symlink
 directory
Date: Wed, 13 Sep 2023 15:33:50 +0200
Eli Zaretskii <eliz <at> gnu.org> writes:

Hi,

>> 0. emacs -Q
>> 1. use the following code to open an existing file in a symlink directory
>> (progn
>>   (setq auto-revert-use-notify t
>>             auto-revert-interval 3)
>>   (global-auto-revert-mode 1)
>>   (setq find-file-hook (delq 'vc-refresh-state find-file-hook))
>>   (find-file "~/symlink_dir/test.txt"))
>> 
>> 2. modify the test file in external program and save
>> 3. emacs doesn't autorevert the file
>
> AFAICT, we don't support autoreverting symlinks, since Dec 2013, so it
> sounds strange that you say it worked in Emacs 27.
>
> The relevant discussion is here:
>
>   https://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00282.html
>
> The reason for this non-support seems to be performance.
>
> I hope Michael (CC'ed) will be able to tell more about this.

Yes, we don't support autorevert of files in a symlinked directory via
file notifications. There are other bugs with the same topic, see
bug#16113, bug#18883 and bug#64061. I'll merge this bug with the other
ones.

> A workaround is to set auto-revert-use-notify to nil.

Yep.

Best regards, Michael.




Severity set to 'wishlist' from 'normal' Request was from Michael Albinus <michael.albinus <at> gmx.de> to control <at> debbugs.gnu.org. (Wed, 13 Sep 2023 13:54:01 GMT) Full text and rfc822 format available.

Merged 16113 18883 64061 65904. Request was from Michael Albinus <michael.albinus <at> gmx.de> to control <at> debbugs.gnu.org. (Wed, 13 Sep 2023 13:54:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65904; Package emacs. (Wed, 13 Sep 2023 14:17:01 GMT) Full text and rfc822 format available.

Message #24 received at 65904 <at> debbugs.gnu.org (full text, mbox):

From: zhanghj <ccsmile2008 <at> outlook.com>
To: Michael Albinus <michael.albinus <at> gmx.de>, Eli Zaretskii <eliz <at> gnu.org>
Cc: 65904 <at> debbugs.gnu.org
Subject: Re: bug#65904: 29.1.50; autorevert can't revert files in a symlink
 directory
Date: Wed, 13 Sep 2023 22:16:23 +0800
How does it work in Emacs 26/27? Why don't you let it keep the old behavior?

I just tried again with the following test code(with 
auto-revert-interval be a big value). There was a long delay(about 30s) 
before the first reverting. But the following ones were instant.

(progn
  (setq auto-revert-use-notify t
        auto-revert-interval 30)
  (global-auto-revert-mode 1)
  (setq find-file-hook (delq 'vc-refresh-state find-file-hook))
  (find-file "~/symlink_dir/abc.txt"))


On 9/13/23 21:33, Michael Albinus wrote:
> Eli Zaretskii <eliz <at> gnu.org> writes:
>
> Hi,
>
>>> 0. emacs -Q
>>> 1. use the following code to open an existing file in a symlink directory
>>> (progn
>>>    (setq auto-revert-use-notify t
>>>             auto-revert-interval 3)
>>>    (global-auto-revert-mode 1)
>>>    (setq find-file-hook (delq 'vc-refresh-state find-file-hook))
>>>    (find-file "~/symlink_dir/test.txt"))
>>>
>>> 2. modify the test file in external program and save
>>> 3. emacs doesn't autorevert the file
>> AFAICT, we don't support autoreverting symlinks, since Dec 2013, so it
>> sounds strange that you say it worked in Emacs 27.
>>
>> The relevant discussion is here:
>>
>>    https://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00282.html
>>
>> The reason for this non-support seems to be performance.
>>
>> I hope Michael (CC'ed) will be able to tell more about this.
> Yes, we don't support autorevert of files in a symlinked directory via
> file notifications. There are other bugs with the same topic, see
> bug#16113, bug#18883 and bug#64061. I'll merge this bug with the other
> ones.
>
>> A workaround is to set auto-revert-use-notify to nil.
> Yep.
>
> Best regards, Michael.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65904; Package emacs. (Thu, 14 Sep 2023 11:59:01 GMT) Full text and rfc822 format available.

Message #27 received at 65904 <at> debbugs.gnu.org (full text, mbox):

From: Michael Albinus <michael.albinus <at> gmx.de>
To: zhanghj <ccsmile2008 <at> outlook.com>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 65904 <at> debbugs.gnu.org
Subject: Re: bug#65904: 29.1.50; autorevert can't revert files in a symlink
 directory
Date: Thu, 14 Sep 2023 13:58:05 +0200
[Message part 1 (text/plain, inline)]
zhanghj <ccsmile2008 <at> outlook.com> writes:

Hi,

> How does it work in Emacs 26/27? Why don't you let it keep the old behavior?

That time, it was unspecified, whether symlinked files/directories are
watched. Some file notification backends did, other backends didn't. In
Emacs 29, this was clarified, see (info "(elisp) File Notifications")

--8<---------------cut here---------------start------------->8---
     If FILE is a symlink, it doesn’t follow that link.  Just FILE
     itself will be watched.
--8<---------------cut here---------------end--------------->8---

There is the idea to add a new flag to the `file-notify-add-watch'
function, `follow'. This would allow to follow symlinks, with different
implementations in the different backends. Buth this hasn't been
implemented yet.

If you need this feature urgently in inotify (I guess you're using this
backend), try the appended patch in filenotify.el (untested).

Best regards, Michael.

[Message part 2 (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65904; Package emacs. (Mon, 18 Sep 2023 21:10:01 GMT) Full text and rfc822 format available.

Message #30 received at 65904 <at> debbugs.gnu.org (full text, mbox):

From: zhanghj <ccsmile2008 <at> outlook.com>
To: Michael Albinus <michael.albinus <at> gmx.de>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 65904 <at> debbugs.gnu.org
Subject: Re: bug#65904: 29.1.50; autorevert can't revert files in a symlink
 directory
Date: Tue, 19 Sep 2023 05:08:46 +0800
I tried your patch on GNU/Linux. It works as you said(the same as in 
Emacs 26/27 now). I will try it on macOS later.

I have added some debug message and see that without this patch, the 
`filenotiy' also watch the file but `autorevert.el` can't receives 
events for the test file. After applying the patch, it can receive 
events for the test file. It seems that the patch is not harmful. Can 
you apply it in Emacs 29?

Thanks.


On 9/14/23 19:58, Michael Albinus wrote:
> zhanghj <ccsmile2008 <at> outlook.com> writes:
>
> Hi,
>
>> How does it work in Emacs 26/27? Why don't you let it keep the old behavior?
> That time, it was unspecified, whether symlinked files/directories are
> watched. Some file notification backends did, other backends didn't. In
> Emacs 29, this was clarified, see (info "(elisp) File Notifications")
>
> --8<---------------cut here---------------start------------->8---
>       If FILE is a symlink, it doesn’t follow that link.  Just FILE
>       itself will be watched.
> --8<---------------cut here---------------end--------------->8---
>
> There is the idea to add a new flag to the `file-notify-add-watch'
> function, `follow'. This would allow to follow symlinks, with different
> implementations in the different backends. Buth this hasn't been
> implemented yet.
>
> If you need this feature urgently in inotify (I guess you're using this
> backend), try the appended patch in filenotify.el (untested).
>
> Best regards, Michael.
>




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65904; Package emacs. (Tue, 19 Sep 2023 07:20:01 GMT) Full text and rfc822 format available.

Message #33 received at 65904 <at> debbugs.gnu.org (full text, mbox):

From: Michael Albinus <michael.albinus <at> gmx.de>
To: zhanghj <ccsmile2008 <at> outlook.com>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 65904 <at> debbugs.gnu.org
Subject: Re: bug#65904: 29.1.50; autorevert can't revert files in a symlink
 directory
Date: Tue, 19 Sep 2023 09:18:58 +0200
zhanghj <ccsmile2008 <at> outlook.com> writes:

Hi,

> I tried your patch on GNU/Linux. It works as you said(the same as in
> Emacs 26/27 now). I will try it on macOS later.

Thanks for the check. On macOS, inotify isn't used, so the change
wouldn't work.

> I have added some debug message and see that without this patch, the
> `filenotiy' also watch the file but `autorevert.el` can't receives
> events for the test file. After applying the patch, it can receive
> events for the test file. It seems that the patch is not harmful. Can
> you apply it in Emacs 29?

As said, there is the idea to support symlinked files/directories in
general. Once this is implemented, the proposed change for inotify will
be installed.

> Thanks.

Best regards, Michael.




This bug report was last modified 1 year and 267 days ago.

Previous Next


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