unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#65904: 29.1.50; autorevert can't revert files in a symlink directory
@ 2023-09-13  3:55 Zhang Haijun
  2023-09-13 12:55 ` Eli Zaretskii
  0 siblings, 1 reply; 9+ messages in thread
From: Zhang Haijun @ 2023-09-13  3:55 UTC (permalink / raw)
  To: 65904

[-- Attachment #1: Type: text/plain, Size: 3728 bytes --]

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))


[-- Attachment #2: Type: text/html, Size: 7720 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* bug#65904: 29.1.50; autorevert can't revert files in a symlink directory
  2023-09-13  3:55 bug#65904: 29.1.50; autorevert can't revert files in a symlink directory Zhang Haijun
@ 2023-09-13 12:55 ` Eli Zaretskii
  2023-09-13 13:12   ` zhanghj
  2023-09-13 13:33   ` Michael Albinus
  0 siblings, 2 replies; 9+ messages in thread
From: Eli Zaretskii @ 2023-09-13 12:55 UTC (permalink / raw)
  To: Zhang Haijun, Michael Albinus; +Cc: 65904

> From: Zhang Haijun <ccsmile2008@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.





^ permalink raw reply	[flat|nested] 9+ messages in thread

* bug#65904: 29.1.50; autorevert can't revert files in a symlink directory
  2023-09-13 12:55 ` Eli Zaretskii
@ 2023-09-13 13:12   ` zhanghj
  2023-09-13 13:28     ` Eli Zaretskii
  2023-09-13 13:33   ` Michael Albinus
  1 sibling, 1 reply; 9+ messages in thread
From: zhanghj @ 2023-09-13 13:12 UTC (permalink / raw)
  To: Eli Zaretskii, Michael Albinus; +Cc: 65904

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@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.





^ permalink raw reply	[flat|nested] 9+ messages in thread

* bug#65904: 29.1.50; autorevert can't revert files in a symlink directory
  2023-09-13 13:12   ` zhanghj
@ 2023-09-13 13:28     ` Eli Zaretskii
  0 siblings, 0 replies; 9+ messages in thread
From: Eli Zaretskii @ 2023-09-13 13:28 UTC (permalink / raw)
  To: zhanghj; +Cc: michael.albinus, 65904

> Date: Wed, 13 Sep 2023 21:12:30 +0800
> Cc: 65904@debbugs.gnu.org
> From: zhanghj <ccsmile2008@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.





^ permalink raw reply	[flat|nested] 9+ messages in thread

* bug#65904: 29.1.50; autorevert can't revert files in a symlink directory
  2023-09-13 12:55 ` Eli Zaretskii
  2023-09-13 13:12   ` zhanghj
@ 2023-09-13 13:33   ` Michael Albinus
  2023-09-13 14:16     ` zhanghj
  1 sibling, 1 reply; 9+ messages in thread
From: Michael Albinus @ 2023-09-13 13:33 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 65904, Zhang Haijun

Eli Zaretskii <eliz@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.





^ permalink raw reply	[flat|nested] 9+ messages in thread

* bug#65904: 29.1.50; autorevert can't revert files in a symlink directory
  2023-09-13 13:33   ` Michael Albinus
@ 2023-09-13 14:16     ` zhanghj
  2023-09-14 11:58       ` Michael Albinus
  0 siblings, 1 reply; 9+ messages in thread
From: zhanghj @ 2023-09-13 14:16 UTC (permalink / raw)
  To: Michael Albinus, Eli Zaretskii; +Cc: 65904

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@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.





^ permalink raw reply	[flat|nested] 9+ messages in thread

* bug#65904: 29.1.50; autorevert can't revert files in a symlink directory
  2023-09-13 14:16     ` zhanghj
@ 2023-09-14 11:58       ` Michael Albinus
  2023-09-18 21:08         ` zhanghj
  0 siblings, 1 reply; 9+ messages in thread
From: Michael Albinus @ 2023-09-14 11:58 UTC (permalink / raw)
  To: zhanghj; +Cc: Eli Zaretskii, 65904

[-- Attachment #1: Type: text/plain, Size: 979 bytes --]

zhanghj <ccsmile2008@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.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 534 bytes --]

diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index e9f8d4e515d..6025f35cb6e 100644
--- a/lisp/filenotify.el
+++ b/lisp/filenotify.el
@@ -339,7 +339,6 @@ file-notify--add-watch-inotify
   "Add a watch for FILE in DIR with FLAGS, using inotify."
   (inotify-add-watch dir
                      (append
-                      '(dont-follow)
                       (and (memq 'change flags)
                            '(create delete delete-self modify move-self move))
                       (and (memq 'attribute-change flags)

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* bug#65904: 29.1.50; autorevert can't revert files in a symlink directory
  2023-09-14 11:58       ` Michael Albinus
@ 2023-09-18 21:08         ` zhanghj
  2023-09-19  7:18           ` Michael Albinus
  0 siblings, 1 reply; 9+ messages in thread
From: zhanghj @ 2023-09-18 21:08 UTC (permalink / raw)
  To: Michael Albinus; +Cc: Eli Zaretskii, 65904

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@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.
>





^ permalink raw reply	[flat|nested] 9+ messages in thread

* bug#65904: 29.1.50; autorevert can't revert files in a symlink directory
  2023-09-18 21:08         ` zhanghj
@ 2023-09-19  7:18           ` Michael Albinus
  0 siblings, 0 replies; 9+ messages in thread
From: Michael Albinus @ 2023-09-19  7:18 UTC (permalink / raw)
  To: zhanghj; +Cc: Eli Zaretskii, 65904

zhanghj <ccsmile2008@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.





^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2023-09-19  7:18 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-13  3:55 bug#65904: 29.1.50; autorevert can't revert files in a symlink directory Zhang Haijun
2023-09-13 12:55 ` Eli Zaretskii
2023-09-13 13:12   ` zhanghj
2023-09-13 13:28     ` Eli Zaretskii
2023-09-13 13:33   ` Michael Albinus
2023-09-13 14:16     ` zhanghj
2023-09-14 11:58       ` Michael Albinus
2023-09-18 21:08         ` zhanghj
2023-09-19  7:18           ` Michael Albinus

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).