Function: vc-dir--count-outgoing
vc-dir--count-outgoing is a byte-compiled function defined in
vc-dir.el.gz.
Signature
(vc-dir--count-outgoing BACKEND OVERLAY)
Documentation
Populate OVERLAY with count of outgoing revisions for backend BACKEND.
See vc-dir-async-header-values for an explanation of how this function
uses OVERLAY.
Source Code
;; Defined in /usr/src/emacs/lisp/vc/vc-dir.el.gz
(defun vc-dir--count-outgoing (backend overlay)
"Populate OVERLAY with count of outgoing revisions for backend BACKEND.
See `vc-dir-async-header-values' for an explanation of how this function
uses OVERLAY."
(cl-flet ((set-overlay-text (text)
(with-current-buffer (overlay-buffer overlay)
(save-excursion
(let ((inhibit-read-only t)
(start (overlay-start overlay)))
(delete-region start (overlay-end overlay))
(goto-char start)
(insert text)
(move-overlay overlay start (point)))))))
(set-overlay-text (propertize "[counting ...]"
'face 'vc-dir-header-value))
;; `vc-incoming-outgoing-internal' invokes external processes
;; synchronously before we can get to the `vc-run-delayed', so
;; postpone running it a little.
(overlay-put
overlay 'timer
(run-with-idle-timer
0.2 nil
(lambda ()
(let* ((default-directory
(buffer-local-value 'default-directory
(overlay-buffer overlay)))
(display-buffer-overriding-action
'(display-buffer-no-window (allow-no-window . t)))
(unknown (propertize "<<unknown>>" 'face 'vc-dir-header-value))
(buf (generate-new-buffer " *temp*" t))
proc)
(without-local-variable-queries
(with-current-buffer buf
(condition-case _
(progn
(vc-incoming-outgoing-internal backend nil
(current-buffer)
'(log-outgoing short))
(setq proc (get-buffer-process (current-buffer)))
(set-process-query-on-exit-flag proc nil)
(overlay-put overlay 'proc proc)
(vc-run-delayed
(unwind-protect
(set-overlay-text
(if (or (not (eq (process-status proc) 'exit))
(plusp (process-exit-status proc)))
unknown
(goto-char (point-min))
(let ((count (how-many log-view-message-re)))
(if (zerop count)
(propertize "No unpushed revisions"
'face 'vc-dir-header-value)
(propertize
(format (ngettext "%d unpushed revision"
"%d unpushed revisions"
count)
count)
'face 'vc-dir-header-urgent-value
'mouse-face 'highlight
'keymap vc-dir-outgoing-revisions-map
'help-echo "\\<vc-dir-outgoing-revisions-map>\
\\[vc-root-log-outgoing]: List outgoing revisions")))))
(kill-buffer))))
(error (kill-buffer buf)
(set-overlay-text unknown)))))))))))