Function: cvs-cleanup-collection
cvs-cleanup-collection is a byte-compiled function defined in
pcvs.el.gz.
Signature
(cvs-cleanup-collection C RM-HANDLED RM-DIRS RM-MSGS)
Documentation
Remove undesired entries.
C is the collection
RM-HANDLED if non-nil means remove handled entries (if file is currently
visited, only remove if value is all).
RM-DIRS behaves like cvs-auto-remove-directories.
RM-MSGS if non-nil means remove messages.
Source Code
;; Defined in /usr/src/emacs/lisp/vc/pcvs.el.gz
;; called at the following times:
;; - postparse ((eq cvs-auto-remove-handled t) cvs-auto-remove-directories nil)
;; - pre-run ((eq cvs-auto-remove-handled 'delayed) nil t)
;; - remove-handled (t (or cvs-auto-remove-directories 'handled) t)
;; - cvs-cmd-do (nil nil t)
;; - post-ignore (nil nil nil)
;; - acknowledge (nil nil nil)
;; - remove (nil nil nil)
(defun cvs-cleanup-collection (c rm-handled rm-dirs rm-msgs)
"Remove undesired entries.
C is the collection
RM-HANDLED if non-nil means remove handled entries (if file is currently
visited, only remove if value is `all').
RM-DIRS behaves like `cvs-auto-remove-directories'.
RM-MSGS if non-nil means remove messages."
(let (last-fi first-dir (rerun t))
(while rerun
(setq rerun nil)
(setq first-dir t)
(setq last-fi (cvs-create-fileinfo 'DEAD "../" "" "")) ;place-holder
(ewoc-filter
c (lambda (fi)
(let* ((type (cvs-fileinfo->type fi))
(subtype (cvs-fileinfo->subtype fi))
(keep
(pcase type
;; Remove temp messages and keep the others.
('MESSAGE (not (or rm-msgs (eq subtype 'TEMP))))
;; Remove dead entries.
('DEAD nil)
;; Handled also?
('UP-TO-DATE
(not
(if (find-buffer-visiting (cvs-fileinfo->full-name fi))
(eq rm-handled 'all)
rm-handled)))
;; Keep the rest.
(_ (not (run-hook-with-args-until-success
'cvs-cleanup-functions fi))))))
;; mark dirs for removal
(when (and keep rm-dirs
(eq (cvs-fileinfo->type last-fi) 'DIRCHANGE)
(not (when first-dir (setq first-dir nil) t))
(or (eq rm-dirs 'all)
(not (string-prefix-p
(cvs-fileinfo->dir last-fi)
(cvs-fileinfo->dir fi)))
(and (eq type 'DIRCHANGE) (eq rm-dirs 'empty))
(eq subtype 'FOOTER)))
(setf (cvs-fileinfo->type last-fi) 'DEAD)
(setq rerun t))
(when keep (setq last-fi fi)))))
;; remove empty last dir
(when (and rm-dirs
(not first-dir)
(eq (cvs-fileinfo->type last-fi) 'DIRCHANGE))
(setf (cvs-fileinfo->type last-fi) 'DEAD)
(setq rerun t)))))