Function: vc-check-master-templates

vc-check-master-templates is a byte-compiled function defined in vc-hooks.el.gz.

Signature

(vc-check-master-templates FILE TEMPLATES)

Documentation

Return non-nil if there is a master corresponding to FILE.

TEMPLATES is a list of strings or functions. If an element is a string, it must be a control string as required by format, with two string placeholders, such as "%sRCS/%s,v". The directory part of FILE is substituted for the first placeholder, the basename of FILE for the second. If a file with the resulting name exists, it is taken as the master of FILE, and returned.

If an element of TEMPLATES is a function, it is called with the directory part and the basename of FILE as arguments. It should return non-nil if it finds a master; that value is then returned by this function.

Source Code

;; Defined in /usr/src/emacs/lisp/vc/vc-hooks.el.gz
(defun vc-check-master-templates (file templates)
  "Return non-nil if there is a master corresponding to FILE.

TEMPLATES is a list of strings or functions.  If an element is a
string, it must be a control string as required by `format', with two
string placeholders, such as \"%sRCS/%s,v\".  The directory part of
FILE is substituted for the first placeholder, the basename of FILE
for the second.  If a file with the resulting name exists, it is taken
as the master of FILE, and returned.

If an element of TEMPLATES is a function, it is called with the
directory part and the basename of FILE as arguments.  It should
return non-nil if it finds a master; that value is then returned by
this function."
  (let ((dirname (or (file-name-directory file) ""))
        (basename (file-name-nondirectory file)))
    (catch 'found
      (mapcar
       (lambda (s)
	 (let ((trial (vc-possible-master s dirname basename)))
	   (when (and trial (file-exists-p trial)
		      ;; Make sure the file we found with name
		      ;; TRIAL is not the source file itself.
		      ;; That can happen with RCS-style names if
		      ;; the file name is truncated (e.g. to 14
		      ;; chars).  See if either directory or
		      ;; attributes differ.
		      (or (not (string= dirname
					(file-name-directory trial)))
			  (not (equal (file-attributes file)
				      (file-attributes trial)))))
	       (throw 'found trial))))
       templates))))