Function: cvs-status-get-tags
cvs-status-get-tags is an autoloaded and byte-compiled function
defined in cvs-status.el.gz.
Signature
(cvs-status-get-tags)
Documentation
Look for a list of tags, read them in and delete them.
Return nil if there was an empty list of tags and t if there wasn't even a list. Else, return the list of tags where each element of the list is a three-string list TAG, KIND, REV.
Source Code
;; Defined in /usr/src/emacs/lisp/vc/cvs-status.el.gz
(defun cvs-status-get-tags ()
"Look for a list of tags, read them in and delete them.
Return nil if there was an empty list of tags and t if there wasn't
even a list. Else, return the list of tags where each element of
the list is a three-string list TAG, KIND, REV."
(let ((tags nil))
(if (not (re-search-forward cvs-status-tags-leader-re nil t)) t
(forward-char 1)
(let ((pt (point))
(lastrev nil)
(case-fold-search t))
(or
(looking-at "\\s-+no\\s-+tags")
(progn ; normal listing
(while (looking-at "^[ \t]+\\([^ \t\n]+\\)[ \t]+(\\([a-z]+\\): \\(.+\\))$")
(push (list (match-string 1) (match-string 2) (match-string 3)) tags)
(forward-line 1))
(unless (looking-at "^$") (setq tags nil) (goto-char pt))
tags)
(progn ; cvstree-style listing
(while (or (looking-at "^ .+\\(.\\) \\([0-9.]+\\): \\([^\n\t .0-9][^\n\t ]*\\)?$")
(and lastrev
(looking-at "^ .+\\(\\) \\(8\\)? \\([^\n\t .0-9][^\n\t ]*\\)$")))
(setq lastrev (or (match-string 2) lastrev))
(push (list (match-string 3)
(if (equal (match-string 1) " ") "branch" "revision")
lastrev) tags)
(forward-line 1))
(unless (looking-at "^$") (setq tags nil) (goto-char pt))
(setq tags (nreverse tags)))
(progn ; new tree style listing
(let* ((re-lead "[ \t]*\\(-+\\)?\\(|\n?[ \t]+\\)*")
(re3 (concat re-lead "\\(\\.\\)?\\(" cvs-status-rev-re "\\)"))
(re2 (concat re-lead cvs-status-tag-re "\\(\\)"))
(re1 (concat re-lead cvs-status-tag-re
" (\\(" cvs-status-rev-re "\\))")))
(while (or (looking-at re1) (looking-at re2) (looking-at re3))
(push (list (match-string 3)
(if (match-string 1) "branch" "revision")
(match-string 4)) tags)
(goto-char (match-end 0))
(when (eolp) (forward-char 1))))
(unless (looking-at "^$") (setq tags nil) (goto-char pt))
(setq tags (nreverse tags))))
(delete-region pt (point)))
tags)))