1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-04 11:40:22 +00:00

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.
This commit is contained in:
Michael Albinus 2017-03-22 19:33:03 +00:00
parent 716b468489
commit 560d6f9124
2 changed files with 16 additions and 9 deletions

View File

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

View File

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