GNU bug report logs - #21435
25.0.50; file-notify has problems after renames

Previous Next

Package: emacs;

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

Date: Tue, 8 Sep 2015 08:48:01 UTC

Severity: normal

Found in version 25.0.50

Done: Michael Albinus <michael.albinus <at> gmx.de>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Michael Albinus <michael.albinus <at> gmx.de>
To: Tassilo Horn <tsdh <at> gnu.org>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 21435 <at> debbugs.gnu.org
Subject: bug#21435: 25.0.50; file-notify has problems after renames
Date: Thu, 10 Sep 2015 19:50:21 +0200
Tassilo Horn <tsdh <at> gnu.org> writes:

>>>   1. Now `file-notify-test02-events-remote' fails because after every
>>>      expected `changed' event an additional `attribute-changed' event is
>>>      received.  This is wrong because when adding the watch, only
>>>      '(change) is given as FLAGS argument, not '(change
>>>      attribute-change).
>>
>> I'll contact the Tramp maintainer about :-)
>
> Deliver him my best wishes. :-)

Done. He's working on the problem.

> Ah, ok, so when you write to a file you'll only get a `changed' event,
> and not an additional `attribute-changed' event for the changed
> modification time.  So basically, attribute changes are subsumed by
> `changed' and `created' events.
>
> By the way, I think it could be hard to test `attribute-changed' events
> because those probably depend on the filesystem and mount options on the
> machine where the tests are run, e.g., if access time recording is
> enabled or not.

Yes. And I also expect here the most notable differences between the
native libraries. Not checked yet, 'tho.

> I've added a new macro to the tests now which lets you do things this
> way:
>
>         ;; Check creation, change, and deletion.
>         (file-notify--test-with-events
>             3 3 (lambda (events)
>                   (should (equal '(created changed deleted)
>                                  (mapcar #'cadr events))))
>           (write-region
>            "any text" nil file-notify--test-tmpfile nil 'no-message)
>           (delete-file file-notify--test-tmpfile))
>
> This means we're waiting for 3 events for at most 3 seconds, and then
> apply the lambda to the received events.  The rest is the code which
> causes the events to be emitted.

That's good, yes. Please add a docstring to that macro (boring, I know,
but it will help other people like Eli and me).

One point: you don't call any longer `read-event'. I believe it still
makes sense; IIRC I did it because sometimes you must trigger Emacs to
check all its file descriptors for new events.

> Another thing: the remote tests, especially the test03-autorevert one,
> take really, really long (maybe 30 seconds).  I saw that this uses some
> mock TRAMP method which suggests it is a mockup connection which can
> probably simulate a fast or a slow connection.  If so, I'd prefer to
> have a reasonably fast one so that I don't try to avoid running all
> tests frequently.

Well, the mockup method is a silly one and it even doesn't require a
remote connection, so it shall be faster than any other Tramp method.
And I do not experience serious delays when testing.

You could alway skip all the remote tests. Call

# env REMOTE_TEMPORARY_FILE_DIRECTORY=/dev/null make -C test/automated file-notify-tests

> Bye,
> Tassilo

Best regards, Michael.




This bug report was last modified 9 years and 308 days ago.

Previous Next


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