Function: cvs-make-cvs-buffer
cvs-make-cvs-buffer is a byte-compiled function defined in pcvs.el.gz.
Signature
(cvs-make-cvs-buffer DIR &optional NEW)
Documentation
Create the *cvs* buffer for directory DIR.
If non-nil, NEW means to create a new buffer no matter what.
Source Code
;; Defined in /usr/src/emacs/lisp/vc/pcvs.el.gz
(defun cvs-make-cvs-buffer (dir &optional new)
"Create the *cvs* buffer for directory DIR.
If non-nil, NEW means to create a new buffer no matter what."
;; the real cvs-buffer creation
(setq dir (cvs-expand-dir-name dir))
(let* ((buffer-name (eval cvs-buffer-name `((dir . ,dir))))
(buffer
(or (and (not new)
(eq cvs-reuse-cvs-buffer 'current)
(cvs-buffer-p) ;reuse the current buffer if possible
(current-buffer))
;; look for another cvs buffer visiting the same directory
(save-excursion
(unless new
(cl-dolist (buffer (cons (current-buffer) (buffer-list)))
(set-buffer buffer)
(and (cvs-buffer-p)
(pcase cvs-reuse-cvs-buffer
('always t)
('subdir
(or (string-prefix-p default-directory dir)
(string-prefix-p dir default-directory)))
('samedir (string= default-directory dir)))
(cl-return buffer)))))
;; we really have to create a new buffer:
;; we temporarily bind cwd to "" to prevent
;; create-file-buffer from using directory info
;; unless it is explicitly in the cvs-buffer-name.
(cvs-get-buffer-create buffer-name new))))
(with-current-buffer buffer
(or
(and (string= dir default-directory) (cvs-buffer-p)
;; just a refresh
(ignore-errors
(cvs-cleanup-collection cvs-cookies nil nil t)
(current-buffer)))
;; setup from scratch
(progn
(setq default-directory dir)
(setq buffer-read-only nil)
(erase-buffer)
(insert "Repository : " (directory-file-name (cvs-get-cvsroot))
"\nModule : " (cvs-get-module)
"\nWorking dir: " (abbreviate-file-name dir)
(if (not (file-readable-p "CVS/Tag")) "\n"
(let ((tag (cvs-file-to-string "CVS/Tag")))
(cond
((string-match "\\`T" tag)
(concat "\nTag : " (substring tag 1)))
((string-match "\\`D" tag)
(concat "\nDate : " (substring tag 1)))
("\n"))))
"\n")
(setq buffer-read-only t)
(cvs-mode)
(setq-local list-buffers-directory buffer-name)
;;(setq-local cvs-temp-buffer (cvs-temp-buffer))
(let ((cookies (ewoc-create 'cvs-fileinfo-pp "\n\n" "\n" t)))
(setq-local cvs-cookies cookies)
(add-hook 'kill-buffer-hook
(lambda ()
(ignore-errors (kill-buffer cvs-temp-buffer)))
nil t)
;;(set-buffer buf)
buffer))))))