changeset 81987:8d88b0199c17

(vc-find-root): Fix case where `file' is the current directory and the root as well.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 20 Jul 2007 03:48:27 +0000
parents 7179773d9d7f
children 09a639d5f43e
files lisp/ChangeLog lisp/vc-hooks.el
diffstat 2 files changed, 19 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Jul 20 03:15:19 2007 +0000
+++ b/lisp/ChangeLog	Fri Jul 20 03:48:27 2007 +0000
@@ -1,3 +1,8 @@
+2007-07-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* vc-hooks.el (vc-find-root): Fix case where `file' is the current
+	directory and the root as well.
+
 2007-07-20  Dan Nicolaescu  <dann@ics.uci.edu>
 
 	* vc-hooks.el (vc-default-workfile-unchanged-p): Pass a list
@@ -5,8 +10,7 @@
 
 	* vc-hg.el (vc-hg-print-log): Deal with multiple file arguments.
 	(vc-hg-registered): Replace if with when.
-	(vc-hg-state): Deal with nonexistent files and handle removed
-	files.
+	(vc-hg-state): Deal with nonexistent files and handle removed files.
 	(vc-hg-dir-state, vc-hg-dired-state-info): New functions.
 	(vc-hg-checkout): Re-enable.
 	(vc-hg-create-repo): Fix typos.
--- a/lisp/vc-hooks.el	Fri Jul 20 03:15:19 2007 +0000
+++ b/lisp/vc-hooks.el	Fri Jul 20 03:48:27 2007 +0000
@@ -317,24 +317,25 @@
 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 /.
-  (while (not (file-exists-p file))
+  (while (not (file-directory-p file))
     (setq file (file-name-directory (directory-file-name file))))
   (setq file (abbreviate-file-name file))
   (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 (nth 2 (file-attributes file))))
-                   (string-match vc-ignore-dir-regexp 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 (nth 2 (file-attributes 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))))
+          (setq root file)
+        (if (equal file
+                   (setq file (file-name-directory (directory-file-name file))))
+            (setq file nil))))
     root))
 
 ;; Access functions to file properties