Subject: bug#3807: 23.1.50; vc-dir ignores .gitignore

From: Dan Nicolaescu <[email-masked]>
Date: Fri, 10 Jul 2009 12:29:55 -0700 (PDT)

Helmut Eller <[email-masked]> writes:

  > I use git to manage some files (.emacs, .bashrc etc.) in my home
  > directory and hg for a project in a directory named ~/lisp/slime/.
  > I have both, a ~/.git and a ~/lisp/slime/.hg directory
  > and my ~/.gitignore contains a line with: lisp* 
  > 
  > However when I invoke C-x v d on ~/lisp/slime, a buffer
  > pops up with the first (wrong) line:  VC backend : Git
  > and lists most of the files from the ~/lisp/slime directory
  > as "unregistered".  Obviously, I would prefer to use the hg backend
  > for the ~/lisp/slime directory.
  > 
  > On the other hand: if I open a file in ~/lisp/slime the modeline
  > correctly displays hg and commands like C-x v l or C-x v = correctly 
  > use the hg backend.

What happens here is: vc-dir calls (vc-responsible-backend  "~/lisp/slime"),
 which calls (vc-git-responsible-p "~/lisp/slime")
and that returns t because all vc-git-responsible-p does is to see if
~/lisp/slime is dominated by a .git directory.  And it is.

You can easily work around this by changing the order of git and hg in
vc-handled-backends in your .emacs, like this: 

(setq vc-handled-backends '(RCS CVS SVN SCCS Bzr Hg Git Mtn Arch))

We could make `vc-git-responsible-p' (and all the other functions that
do the same) not return t in this case, but I doubt it's worth the added
extra complexity. 
Stefan, what do you think?