From: Michael Albinus Date: Wed, 22 Mar 2017 19:33:03 +0000 (+0000) Subject: Fix filenotify.el issue for kqueue X-Git-Tag: emacs-26.0.90~522^2~55 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=560d6f91246ee90ac6e630ae941097a4d4f8f730;p=emacs.git Fix filenotify.el issue for kqueue * lisp/filenotify.el (file-notify-add-watch): Use directory for remote file name handlers. * test/lisp/filenotify-tests.el (file-notify-test01-add-watch): Create/delete temporary file only for "kqueue". (file-notify-test02-rm-watch): Create/delete temporary files. --- diff --git a/lisp/filenotify.el b/lisp/filenotify.el index 7eb6229976a..80e9f898b2e 100644 --- a/lisp/filenotify.el +++ b/lisp/filenotify.el @@ -347,13 +347,7 @@ FILE is the name of the file whose event is being reported." (if handler ;; A file name handler could exist even if there is no local ;; file notification support. - (setq desc (funcall - handler 'file-notify-add-watch - ;; kqueue does not report file changes in - ;; directory monitor. So we must watch the file - ;; itself. - (if (eq file-notify--library 'kqueue) file dir) - flags callback)) + (setq desc (funcall handler 'file-notify-add-watch dir flags callback)) ;; Check, whether Emacs has been compiled with file notification ;; support. @@ -391,6 +385,8 @@ FILE is the name of the file whose event is being reported." ;; Call low-level function. (setq desc (funcall + ;; kqueue does not report file changes in directory + ;; monitor. So we must watch the file itself. func (if (eq file-notify--library 'kqueue) file dir) l-flags 'file-notify-callback))) diff --git a/test/lisp/filenotify-tests.el b/test/lisp/filenotify-tests.el index 654e1af1123..329ea58d3bb 100644 --- a/test/lisp/filenotify-tests.el +++ b/test/lisp/filenotify-tests.el @@ -294,13 +294,20 @@ This returns only for the local case and gfilenotify; otherwise it is nil. (file-notify-add-watch temporary-file-directory '(change attribute-change) #'ignore))) (file-notify-rm-watch file-notify--test-desc) - (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) + + ;; File monitors like kqueue insist, that the watched file + ;; exists. Directory monitors are not bound to this + ;; restriction. + (when (string-equal (file-notify--test-library) "kqueue") + (write-region + "any text" nil file-notify--test-tmpfile nil 'no-message)) (should (setq file-notify--test-desc (file-notify-add-watch file-notify--test-tmpfile '(change attribute-change) #'ignore))) (file-notify-rm-watch file-notify--test-desc) - (delete-file file-notify--test-tmpfile) + (when (string-equal (file-notify--test-library) "kqueue") + (delete-file file-notify--test-tmpfile)) ;; Check error handling. (should-error (file-notify-add-watch 1 2 3 4) @@ -378,6 +385,8 @@ This returns only for the local case and gfilenotify; otherwise it is nil. (progn (setq file-notify--test-tmpfile (file-notify--test-make-temp-name) file-notify--test-tmpfile1 (file-notify--test-make-temp-name)) + (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) + (write-region "any text" nil file-notify--test-tmpfile1 nil 'no-message) (should (setq file-notify--test-desc (file-notify-add-watch @@ -390,6 +399,8 @@ This returns only for the local case and gfilenotify; otherwise it is nil. (file-notify-rm-watch file-notify--test-desc) (file-notify-rm-watch file-notify--test-desc) (file-notify-rm-watch file-notify--test-desc1) + (delete-file file-notify--test-tmpfile) + (delete-file file-notify--test-tmpfile1) ;; The environment shall be cleaned up. (file-notify--test-cleanup-p))