Function: projectile--watch-handle-deleted
projectile--watch-handle-deleted is a byte-compiled function defined
in projectile.el.
Signature
(projectile--watch-handle-deleted PROJECT FILE)
Documentation
Handle the deletion of FILE (absolute) inside PROJECT.
FILE no longer exists, so whether it was a file or a directory can't be
queried; cached entries at the path and below it are removed, and so
are the watches of any directories below it. Returns non-nil when the
cached list was mutated. Throws projectile--watch-fallback when FILE
is the project root itself - there is nothing left to watch, so the
whole cache is invalidated instead.
Source Code
;; Defined in ~/.emacs.d/elpa/projectile-20260820.1509/projectile.el
(defun projectile--watch-handle-deleted (project file)
"Handle the deletion of FILE (absolute) inside PROJECT.
FILE no longer exists, so whether it was a file or a directory can't be
queried; cached entries at the path and below it are removed, and so
are the watches of any directories below it. Returns non-nil when the
cached list was mutated. Throws `projectile--watch-fallback' when FILE
is the project root itself - there is nothing left to watch, so the
whole cache is invalidated instead."
(let* ((relative (file-relative-name file project))
(dir-absolute (file-name-as-directory (expand-file-name file)))
(dir-relative (file-name-as-directory relative))
(files (gethash project projectile-projects-cache)))
(when (string= dir-absolute
(file-name-as-directory (expand-file-name project)))
(throw 'projectile--watch-fallback "the project root itself was deleted"))
;; Drop the watches under the deleted path. Their backends may emit a
;; `stopped' event on removal; by then the descriptors are no longer
;; registered, so `projectile--handle-watch-event' discards it.
(let ((watches (gethash project projectile--project-watches))
(remaining nil))
(dolist (entry watches)
(if (string-prefix-p dir-absolute (cdr entry))
(ignore-errors (file-notify-rm-watch (car entry)))
(push entry remaining)))
;; `remaining' always contains at least the root watch here (only a
;; root deletion prunes everything, and that threw above), but never
;; store nil: a nil registry value would read as "not watched".
(if remaining
(puthash project (nreverse remaining) projectile--project-watches)
(remhash project projectile--project-watches)))
(let ((new-files (seq-remove
(lambda (f)
(or (string= f relative)
(string-prefix-p dir-relative f)))
files)))
(unless (= (length new-files) (length files))
(puthash project new-files projectile-projects-cache)
t))))