Subject: Re: bug#47262: [platform-testers] Emacs 27.2 RC2

From: Michael Albinus <[email-masked]>
Date: Sun, 21 Mar 2021 13:48:07 +0100

Dagobert Michelsen <[email-masked]> writes:

> Hallo Michael,

Hi Dago,

> Here is the log file from the recent patch:

Thanks. I've appended another patch, which should fix all open problems
on Solaris. Could you pls check?

Furthermore, I have seen that you didn't run the expensive tests
file-notify-test07-many-events and
file-notify-test09-watched-file-in-watched-dir. I expect further
problems there, so please call

# make -C test filenotify-tests.log

Likely, there will be other errors. In that case, set file-notify-debug
to t (line 201), and rerun that expensive test. There will be similar
traces in the log file as you have sent already, which shall allow me to
continue to work.

> Best regards
>   — Dago

Many thanks, and best regards, Michael.

*** /tmp/ediffpZId9s	2021-03-21 13:38:20.876372597 +0100
--- /usr/local/src/emacs-27/test/lisp/filenotify-tests.el	2021-03-21 13:36:24.497655703 +0100
***************
*** 105,115 ****
     (cond
      ;; gio/gpollfilemonitor.c declares POLL_TIME_SECS 5.  So we must
      ;; wait at least this time in the GPollFileMonitor case.  A
!     ;; similar timeout seems to be needed in the GFamFileMonitor case,
!     ;; at least on Cygwin.
      ((and (string-equal (file-notify--test-library) "gfilenotify")
            (memq (file-notify--test-monitor)
!                 '(GFamFileMonitor GPollFileMonitor)))
       7)
      ((string-equal (file-notify--test-library) "gvfs-monitor-dir.exe") 1)
      ((file-remote-p temporary-file-directory) 0.1)
--- 105,115 ----
     (cond
      ;; gio/gpollfilemonitor.c declares POLL_TIME_SECS 5.  So we must
      ;; wait at least this time in the GPollFileMonitor case.  A
!     ;; similar timeout seems to be needed in the GFamFileMonitor and
!     ;; GFamDirectoryMonitor case, at least on cygwin.
      ((and (string-equal (file-notify--test-library) "gfilenotify")
            (memq (file-notify--test-monitor)
!                 '(GFamFileMonitor GFamDirectoryMonitor GPollFileMonitor)))
       7)
      ((string-equal (file-notify--test-library) "gvfs-monitor-dir.exe") 1)
      ((file-remote-p temporary-file-directory) 0.1)
***************
*** 455,461 ****

    (unwind-protect
        ;; Check, that removing watch descriptors out of order do not
!       ;; harm.  This fails on Cygwin because of timing issues unless a
        ;; long `sit-for' is added before the call to
        ;; `file-notify--test-read-event'.
        (unless (eq system-type 'cygwin)
--- 455,461 ----

    (unwind-protect
        ;; Check, that removing watch descriptors out of order do not
!       ;; harm.  This fails on cygwin because of timing issues unless a
        ;; long `sit-for' is added before the call to
        ;; `file-notify--test-read-event'.
        (unless (eq system-type 'cygwin)
***************
*** 542,547 ****
--- 542,551 ----
  	    file-notify--test-results
  	    (append file-notify--test-results `(,result))))))

+ (defun file-notify--test-event-actions ()
+   "Helper function to return retrieved actions, as list."
+   (mapcar #'file-notify--test-event-action file-notify--test-events))
+
  (defun file-notify--test-with-actions-check (actions)
    "Check whether received actions match one of the ACTIONS alternatives."
    (let (result)
***************
*** 550,571 ****
              (or result
                  (if (eq (car elt) :random)
                      (equal (sort (cdr elt) 'string-lessp)
!                            (sort (mapcar #'file-notify--test-event-action
!                                          file-notify--test-events)
                                   'string-lessp))
!                   (equal elt (mapcar #'file-notify--test-event-action
!                                      file-notify--test-events))))))))

  (defun file-notify--test-with-actions-explainer (actions)
    "Explain why `file-notify--test-with-actions-check' fails."
    (if (null (cdr actions))
        (format "Received actions do not match expected actions\n%s\n%s"
!               (mapcar #'file-notify--test-event-action file-notify--test-events)
!               (car actions))
      (format
       "Received actions do not match any sequence of expected actions\n%s\n%s"
!      (mapcar #'file-notify--test-event-action file-notify--test-events)
!      actions)))

  (put 'file-notify--test-with-actions-check 'ert-explainer
       'file-notify--test-with-actions-explainer)
--- 554,578 ----
              (or result
                  (if (eq (car elt) :random)
                      (equal (sort (cdr elt) 'string-lessp)
!                            (sort (file-notify--test-event-actions)
                                   'string-lessp))
!                   (equal elt (file-notify--test-event-actions))))))
!     ;; Do not report result in case we debug.  Write messages instead.
!     (if file-notify-debug
!         (prog1 t
!           (if result
!               (message "Success\n%s" (file-notify--test-event-actions))
!             (message (file-notify--test-with-actions-explainer actions))))
!       result)))

  (defun file-notify--test-with-actions-explainer (actions)
    "Explain why `file-notify--test-with-actions-check' fails."
    (if (null (cdr actions))
        (format "Received actions do not match expected actions\n%s\n%s"
!               (file-notify--test-event-actions) (car actions))
      (format
       "Received actions do not match any sequence of expected actions\n%s\n%s"
!      (file-notify--test-event-actions) actions)))

  (put 'file-notify--test-with-actions-check 'ert-explainer
       'file-notify--test-with-actions-explainer)
***************
*** 635,640 ****
--- 642,650 ----
               ;; cygwin does not raise a `changed' event.
               ((eq system-type 'cygwin)
                '(created deleted stopped))
+ 	     ;; GFamDirectoryMonitor does not report the `changed' event.
+ 	     ((equal (file-notify--test-monitor) 'GFamDirectoryMonitor)
+ 	      '(created deleted stopped))
               (t '(created changed deleted stopped)))
            (write-region
             "another text" nil file-notify--test-tmpfile nil 'no-message)
***************
*** 665,670 ****
--- 675,685 ----
  	     ((string-equal (file-notify--test-library) "gvfs-monitor-dir.exe")
  	      '((deleted stopped)
  		(changed deleted stopped)))
+ 	     ;; GFamDirectoryMonitor does not detect the `changed'
+              ;; event reliably.
+ 	     ((equal (file-notify--test-monitor) 'GFamDirectoryMonitor)
+ 	      '((deleted stopped)
+ 		(changed deleted stopped)))
  	     ;; There could be one or two `changed' events.
  	     (t '((changed deleted stopped)
  		  (changed changed deleted stopped))))
***************
*** 713,718 ****
--- 728,736 ----
  	     ;; cygwin does not raise a `changed' event.
  	     ((eq system-type 'cygwin)
  	      '(created deleted stopped))
+ 	     ;; GFamDirectoryMonitor does not report the `changed' event.
+ 	     ((equal (file-notify--test-monitor) 'GFamDirectoryMonitor)
+ 	      '(created deleted stopped))
  	     ((string-equal (file-notify--test-library) "kqueue")
  	      '(created changed deleted stopped))
  	     (t '(created changed deleted deleted stopped)))
***************
*** 755,763 ****
  	      '((deleted stopped)
  		(created created deleted stopped)))
  	     ;; There are three `deleted' events, for two files and
! 	     ;; for the directory.  Except for cygwin and kqueue.
  	     ((eq system-type 'cygwin)
  	      '(created created changed changed deleted stopped))
  	     ((string-equal (file-notify--test-library) "kqueue")
  	      '(created changed created changed deleted stopped))
               ;; On emba, `deleted' and `stopped' events of the
--- 773,784 ----
  	      '((deleted stopped)
  		(created created deleted stopped)))
  	     ;; There are three `deleted' events, for two files and
! 	     ;; for the directory.  Except for cygwin,
! 	     ;; GFamDirectoryMonitor and kqueue.
  	     ((eq system-type 'cygwin)
  	      '(created created changed changed deleted stopped))
+ 	     ((equal (file-notify--test-monitor) 'GFamDirectoryMonitor)
+ 	      '(created created changed changed deleted stopped))
  	     ((string-equal (file-notify--test-library) "kqueue")
  	      '(created changed created changed deleted stopped))
               ;; On emba, `deleted' and `stopped' events of the
***************
*** 813,823 ****
               ((getenv "EMACS_EMBA_CI")
                '(created changed renamed deleted))
  	     ;; There are two `deleted' events, for the file and for
! 	     ;; the directory.  Except for cygwin and kqueue.  And
! 	     ;; cygwin raises `created' and `deleted' events instead
! 	     ;; of a `renamed' event.
  	     ((eq system-type 'cygwin)
  	      '(created created deleted deleted stopped))
  	     ((string-equal (file-notify--test-library) "kqueue")
  	      '(created changed renamed deleted stopped))
  	     (t '(created changed renamed deleted deleted stopped)))
--- 834,847 ----
               ((getenv "EMACS_EMBA_CI")
                '(created changed renamed deleted))
  	     ;; There are two `deleted' events, for the file and for
! 	     ;; the directory.  Except for cygwin,
! 	     ;; GFamDirectoryMonitor and kqueue.  And cygwin and
! 	     ;; GFamDirectoryMonitor raise `created' and `deleted'
! 	     ;; events instead of a `renamed' event.
  	     ((eq system-type 'cygwin)
  	      '(created created deleted deleted stopped))
+ 	     ((equal (file-notify--test-monitor) 'GFamDirectoryMonitor)
+ 	      '(created created deleted deleted stopped))
  	     ((string-equal (file-notify--test-library) "kqueue")
  	      '(created changed renamed deleted stopped))
  	     (t '(created changed renamed deleted deleted stopped)))
***************
*** 837,844 ****
      (file-notify--test-cleanup))

    (unwind-protect
!       ;; Check attribute change.  Does not work for cygwin.
!       (unless (eq system-type 'cygwin)
  	(setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
  	(write-region
  	 "any text" nil file-notify--test-tmpfile nil 'no-message)
--- 861,870 ----
      (file-notify--test-cleanup))

    (unwind-protect
!       ;; Check attribute change.  Does not work for cygwin and
!       ;; GFamDirectoryMonitor.
!       (unless (or (eq system-type 'cygwin)
!                   (equal (file-notify--test-monitor) 'GFamDirectoryMonitor))
  	(setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
  	(write-region
  	 "any text" nil file-notify--test-tmpfile nil 'no-message)
***************
*** 951,957 ****

  	    ;; Modify file.  We wait for two seconds, in order to
  	    ;; have another timestamp.  One second seems to be too
!             ;; short.  And Cygwin sporadically requires more than two.
              (ert-with-message-capture captured-messages
                (sleep-for (if (eq system-type 'cygwin) 3 2))
                (write-region
--- 977,983 ----

  	    ;; Modify file.  We wait for two seconds, in order to
  	    ;; have another timestamp.  One second seems to be too
!             ;; short.  And cygwin sporadically requires more than two.
              (ert-with-message-capture captured-messages
                (sleep-for (if (eq system-type 'cygwin) 3 2))
                (write-region
***************
*** 1021,1026 ****
--- 1047,1057 ----
  	     ((string-equal (file-notify--test-library) "gvfs-monitor-dir.exe")
  	      '((deleted stopped)
  		(changed deleted stopped)))
+ 	     ;; GFamDirectoryMonitor does not detect the `changed'
+              ;; event reliably.
+ 	     ((equal (file-notify--test-monitor) 'GFamDirectoryMonitor)
+ 	      '((deleted stopped)
+ 	        (changed deleted stopped)))
  	     ;; There could be one or two `changed' events.
  	     (t '((changed deleted stopped)
  		  (changed changed deleted stopped))))
***************
*** 1064,1073 ****
  	        '((deleted stopped)
  	          (created deleted stopped)))
  	       ;; There are two `deleted' events, for the file and for
! 	       ;; the directory.  Except for cygwin and kqueue.  And
! 	       ;; cygwin does not raise a `changed' event.
  	       ((eq system-type 'cygwin)
  	        '(created deleted stopped))
  	       ((string-equal (file-notify--test-library) "kqueue")
  	        '(created changed deleted stopped))
  	       (t '(created changed deleted deleted stopped)))
--- 1095,1107 ----
  	        '((deleted stopped)
  	          (created deleted stopped)))
  	       ;; There are two `deleted' events, for the file and for
! 	       ;; the directory.  Except for cygwin,
! 	       ;; GFamDirectoryMonitor and kqueue.  And cygwin and
! 	       ;; GFamDirectoryMonitor do not raise a `changed' event.
  	       ((eq system-type 'cygwin)
  	        '(created deleted stopped))
+ 	       ((equal (file-notify--test-monitor) 'GFamDirectoryMonitor)
+ 	        '(created deleted stopped))
  	       ((string-equal (file-notify--test-library) "kqueue")
  	        '(created changed deleted stopped))
  	       (t '(created changed deleted deleted stopped)))
***************
*** 1286,1291 ****
--- 1320,1328 ----
               ;; On cygwin we only get the `changed' event.
               ((eq system-type 'cygwin)
                '(changed))
+ 	     ;; GFamDirectoryMonitor reports only the `changed' event.
+ 	     ((equal (file-notify--test-monitor) 'GFamDirectoryMonitor)
+ 	      '(changed))
               (t '(renamed created changed)))
            ;; The file is renamed when creating a backup.  It shall
            ;; still be watched.