Sync change from trunk at request of rms in FOR-RELEASE:
authorGlenn Morris <rgm@gnu.org>
Thu, 17 May 2007 07:38:11 +0000 (07:38 +0000)
committerGlenn Morris <rgm@gnu.org>
Thu, 17 May 2007 07:38:11 +0000 (07:38 +0000)
Stefan Monnier  <monnier at iro.umontreal.ca>

(vc-find-root): Stop searching when the user changes.

lisp/vc-hooks.el

index d67a026..1bde704 100644 (file)
@@ -315,10 +315,17 @@ If WITNESS if not found, return nil, otherwise return the root."
   ;; Represent /home/luser/foo as ~/foo so that we don't try to look for
   ;; witnesses in /home or in /.
   (setq file (abbreviate-file-name file))
-  (let ((root nil))
+  (let ((root nil)
+        (user (nth 2 (file-attributes file))))
     (while (not (or root
                    (equal file (setq file (file-name-directory file)))
                    (null file)
+                   ;; As a heuristic, we stop looking up the hierarchy of
+                   ;; directories as soon as we find a directory belonging
+                   ;; to another user.  This should save us from looking in
+                   ;; things like /net and /afs.  This assumes that all the
+                   ;; files inside a project belong to the same user.
+                   (not (equal user (file-attributes file)))
                    (string-match vc-ignore-dir-regexp file)))
       (if (file-exists-p (expand-file-name witness file))
          (setq root file)