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))))))