# HG changeset patch # User Stefan Monnier # Date 1095046571 0 # Node ID 6f014cde9d816ee4eb9e583ed64eb0ec40d33acc # Parent 778b22aae530e06493bef59104497dd9bc97d20f (vc-ignore-dir-regexp): New var. (vc-registered): Use it. (vc-find-root): New fun. diff -r 778b22aae530 -r 6f014cde9d81 lisp/ChangeLog --- a/lisp/ChangeLog Sun Sep 12 21:39:40 2004 +0000 +++ b/lisp/ChangeLog Mon Sep 13 03:36:11 2004 +0000 @@ -1,5 +1,9 @@ 2004-09-12 Stefan + * vc-hooks.el (vc-ignore-dir-regexp): New var. + (vc-registered): Use it. + (vc-find-root): New fun. + * emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine): Don't tell to use \\{...} when it's already done. diff -r 778b22aae530 -r 6f014cde9d81 lisp/vc-hooks.el --- a/lisp/vc-hooks.el Sun Sep 12 21:39:40 2004 +0000 +++ b/lisp/vc-hooks.el Mon Sep 13 03:36:11 2004 +0000 @@ -1,12 +1,12 @@ ;;; vc-hooks.el --- resident support for version-control -;; Copyright (C) 1992,93,94,95,96,98,99,2000,03,2004 +;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2003, 2004 ;; Free Software Foundation, Inc. ;; Author: FSF (see vc.el for full credits) ;; Maintainer: Andre Spiegel -;; $Id: vc-hooks.el,v 1.167 2004/04/16 10:21:51 spiegel Exp $ +;; $Id$ ;; This file is part of GNU Emacs. @@ -52,6 +52,12 @@ (defvar vc-header-alist ()) (make-obsolete-variable 'vc-header-alist 'vc-BACKEND-header) +(defvar vc-ignore-dir-regexp "\\`\\([\\/][\\/]\\|/net/\\|/afs/\\)\\'" + "Regexp matching directory names that are not under VC's control. +The default regexp prevents fruitless and time-consuming attempts +to determine the VC status in directories in which filenames are +interpreted as hostnames.") + (defcustom vc-handled-backends '(RCS CVS SVN SCCS Arch MCVS) ;; Arch and MCVS come last because they are per-tree rather than per-dir. "*List of version control backends for which VC will be used. @@ -298,6 +304,20 @@ (set-buffer-modified-p nil) t)) +(defun vc-find-root (file witness) + "Find the root of a checked out project. +The function walks up the directory tree from FILE looking for WITNESS. +If WITNESS if not found, return nil, otherwise return the root." + (let ((root nil)) + (while (not (or root + (equal file (setq file (file-name-directory file))) + (null file) + (string-match vc-ignore-dir-regexp file))) + (if (file-exists-p (expand-file-name witness file)) + (setq root file) + (setq file (directory-file-name file)))) + root)) + ;; Access functions to file properties ;; (Properties should be _set_ using vc-file-setprop, but ;; _retrieved_ only through these functions, which decide @@ -315,11 +335,13 @@ file was previously registered under a certain backend, then that backend is tried first." (let (handler) - (if (boundp 'file-name-handler-alist) - (setq handler (find-file-name-handler file 'vc-registered))) - (if handler - ;; handler should set vc-backend and return t if registered - (funcall handler 'vc-registered file) + (cond + ((string-match vc-ignore-dir-regexp (file-name-directory file)) nil) + ((and (boundp 'file-name-handler-alist) + (setq handler (find-file-name-handler file 'vc-registered))) + ;; handler should set vc-backend and return t if registered + (funcall handler 'vc-registered file)) + (t ;; There is no file name handler. ;; Try vc-BACKEND-registered for each handled BACKEND. (catch 'found @@ -334,7 +356,7 @@ (cons backend vc-handled-backends)))) ;; File is not registered. (vc-file-setprop file 'vc-backend 'none) - nil)))) + nil))))) (defun vc-backend (file) "Return the version control type of FILE, nil if it is not registered." @@ -869,5 +891,5 @@ (provide 'vc-hooks) -;;; arch-tag: 2e5a6fa7-1d30-48e2-8bd0-e3d335f04f32 +;; arch-tag: 2e5a6fa7-1d30-48e2-8bd0-e3d335f04f32 ;;; vc-hooks.el ends here