summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog4
-rw-r--r--lisp/vc-hooks.el25
2 files changed, 18 insertions, 11 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 2e3f32ad25c..e6a15595af2 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,9 @@
2007-07-23 Stefan Monnier <monnier@iro.umontreal.ca>
+ * vc-hooks.el (vc-find-root): Walk up the tree to find an existing
+ `file' from which to start the search and fix case where `file' is the
+ current directory and the root as well.
+
* pcvs.el (cvs-mode-add-change-log-entry-other-window): Use a directory
name for buffer-file-name if it refers to a directory.
diff --git a/lisp/vc-hooks.el b/lisp/vc-hooks.el
index 22935ab7f3b..29c827852fb 100644
--- a/lisp/vc-hooks.el
+++ b/lisp/vc-hooks.el
@@ -314,22 +314,25 @@ The function walks up the directory tree from FILE looking for WITNESS.
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-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