[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [patch] vc-find-root with invert

From: Justin Bogner
Subject: Re: [patch] vc-find-root with invert
Date: Mon, 21 Jul 2008 10:27:40 -0600
User-agent: Thunderbird (X11/20080505)

address@hidden wrote:
Hash: SHA1

On Fri, Jul 04, 2008 at 03:52:48PM -0400, Stefan Monnier wrote:
Here's a patch that fixes a bug I've noticed in vc-find-root. When called


I believe that it's for systems like CVS, where each subdirectory under
version control has its own CVS directory.
Sorry, but that doesn't help me ;-(
Anyone has a more complete explanation?

Reading the docstring, my guess would be: vc-find-root walks the dir
tree up _until_ it finds WITNESS (as an evidence for the VC tree's root
dir). Unless we have CVS or SVN or similar, where every subdir has
WITNESS, so the root would be the last up-tree directory having WITNESS.

But I might be off-by-one ;-)

- -- tomás

This is exactly correct, though in the current trunk there is a bug
such that the function does not behave like this. The patch causes it
to work as documented.

The changes are actually quite small, to demonstrate, the same patch
ignoring whitespace is attached, though the original should be applied
so that the indentation is correct.
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index cf0472e..aebc149 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -384,6 +384,11 @@
        * textmodes/sgml-mode.el (sgml-font-lock-syntactic-keywords):
        Use syntax-ppss on a position *before* the char we want to change.
+2008-07-04  Justin Bogner  <address@hidden>
+       * vc-hooks.el (vc-find-root):
+       Find the directory when using invert, not the file itself.
 2008-07-04  Dan Nicolaescu  <address@hidden>
        * vc-dir.el (vc-dir-query-replace-regexp): New function.
diff --git a/lisp/vc-hooks.el b/lisp/vc-hooks.el
index 2ccbdcc..0662961 100644
--- a/lisp/vc-hooks.el
+++ b/lisp/vc-hooks.el
@@ -327,6 +327,13 @@ The function walks up the directory tree from FILE looking 
 If WITNESS if not found, return nil, otherwise return the root.
 Optional arg INVERT non-nil reverses the sense of the check;
 the root is the last directory for which WITNESS *is* found."
+  (when (not (file-directory-p file))
+    (setq file (file-name-directory file)))
+  ;; In the invert case, we should return nil if WITNESS doesn't exist
+  ;; in the first place.
+  (if (and invert
+           (not (file-exists-p (expand-file-name witness file))))
+      nil
   ;; 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))
@@ -359,7 +366,7 @@ the root is the last directory for which WITNESS *is* 
     ;; (This occurs, for example, when placing dotfiles under RCS.)
     (when (and (not root) invert prev-file)
       (setq root prev-file))
-    root))
+      root)))
 ;; Access functions to file properties
 ;; (Properties should be _set_ using vc-file-setprop, but

reply via email to

[Prev in Thread] Current Thread [Next in Thread]