GNU bug report logs - #57777
28.2; `vc-dir' picks incorrect backend.

Previous Next

Package: emacs;

Reported by: Mike Woolley <mike <at> bulsara.com>

Date: Tue, 13 Sep 2022 16:31:02 UTC

Severity: normal

Tags: moreinfo

Found in version 28.2

Fixed in version 29.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 57777 in the body.
You can then email your comments to 57777 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#57777; Package emacs. (Tue, 13 Sep 2022 16:31:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Mike Woolley <mike <at> bulsara.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Tue, 13 Sep 2022 16:31:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Mike Woolley <mike <at> bulsara.com>
To: bug-gnu-emacs <at> gnu.org
Cc: Lars Ingebrigtsen <larsi <at> gnus.org>
Subject: 28.2; `vc-dir' picks incorrect backend.
Date: Tue, 13 Sep 2022 17:30:28 +0100
[Message part 1 (text/plain, inline)]
Steps to repro:

Start with a directory having both .Git and CVS sub-directories.
Emacs -Q
(setq vc-handled-backends '(Git CVS))
(vc-dir)
Observe `vc-dir’ incorrectly uses the CVS backend rather than Git.
Open one of the vc-managed files and the Git backend is (correctly) chosen.
This used to work fine in emacs < 28.
This issue was masked in 28.1 by bug#54935 forcing me to choose the backend manually.

Thanks,
Mike

In GNU Emacs 28.2 (build 1, aarch64-apple-darwin21.1.0, NS appkit-2113.00 Version 12.0.1 (Build 21A559))
 of 2022-09-12 built on armbob.lan
Windowing system distributor 'Apple', version 10.3.2113
System Description:  macOS 12.6

Configured using:
 'configure --with-ns '--enable-locallisppath=/Library/Application
 Support/Emacs/${version}/site-lisp:/Library/Application
 Support/Emacs/site-lisp' --with-modules'

Configured features:
ACL GMP GNUTLS JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER THREADS
TOOLKIT_SCROLL_BARS ZLIB

Important settings:
  value of $LANG: en_GB.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(cl-print help-fns radix-tree help-mode pp shadow sort mail-extr
emacsbug message rmc puny dired dired-loaddefs rfc822 mml mml-sec epa
derived epg rfc6068 epg-config gnus-util rmail rmail-loaddefs
auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
password-cache json map text-property-search time-date subr-x mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils vc-mtn
vc-hg vc-git diff-mode easy-mmode vc-bzr vc-src vc-sccs vc-svn vc-cvs
vc-rcs vc-dir seq byte-opt gv bytecomp byte-compile cconv ewoc vc
cl-loaddefs cl-lib vc-dispatcher iso-transl tooltip eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd
fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer cl-generic cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice button loaddefs faces cus-face macroexp files
window text-properties overlay sha1 md5 base64 format env code-pages
mule custom widget hashtable-print-readable backquote threads kqueue
cocoa ns multi-tty make-network-process emacs)

Memory information:
((conses 16 71262 11169)
 (symbols 48 8211 8)
 (strings 32 25210 2287)
 (string-bytes 1 793971)
 (vectors 16 17356)
 (vector-slots 8 226555 21748)
 (floats 8 30 67)
 (intervals 56 839 0)
 (buffers 992 17))

[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57777; Package emacs. (Wed, 14 Sep 2022 14:34:02 GMT) Full text and rfc822 format available.

Message #8 received at 57777 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Mike Woolley <mike <at> bulsara.com>
Cc: 57777 <at> debbugs.gnu.org
Subject: Re: bug#57777: 28.2; `vc-dir' picks incorrect backend.
Date: Wed, 14 Sep 2022 16:32:55 +0200
[Message part 1 (text/plain, inline)]
Mike Woolley <mike <at> bulsara.com> writes:

> 1 Start with a directory having both .Git and CVS sub-directories.
> 2 Emacs -Q
> 3 (setq vc-handled-backends '(Git CVS))
> 4 (vc-dir)
> 5 Observe `vc-dir’ incorrectly uses the CVS backend rather than Git.

I'm unable to reproduce this problem with Emacs 28.2 (or the current
trunk).

I did:

mkdir /tmp/vc /tmp/vc/.git /tmp/vc/CVS
emacs -Q

and then:

(setq vc-handled-backends '(Git CVS))
(vc-dir "/tmp/vc")

And got:

[Message part 2 (image/png, inline)]
[Message part 3 (text/plain, inline)]
Are there any steps missing in your recipe that's needed to reproduce
the problem?

Added tag(s) moreinfo. Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Wed, 14 Sep 2022 14:34:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57777; Package emacs. (Wed, 14 Sep 2022 14:37:02 GMT) Full text and rfc822 format available.

Message #13 received at 57777 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Mike Woolley <mike <at> bulsara.com>
Cc: 57777 <at> debbugs.gnu.org
Subject: Re: bug#57777: 28.2; `vc-dir' picks incorrect backend.
Date: Wed, 14 Sep 2022 16:36:46 +0200
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> I'm unable to reproduce this problem with Emacs 28.2 (or the current
> trunk).

Sorry; I was testing in the wrong checkout -- I'm now rebuilding the
real emacs-28.2 release and will re-test.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57777; Package emacs. (Wed, 14 Sep 2022 14:44:01 GMT) Full text and rfc822 format available.

Message #16 received at 57777 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Mike Woolley <mike <at> bulsara.com>
Cc: 57777 <at> debbugs.gnu.org
Subject: Re: bug#57777: 28.2; `vc-dir' picks incorrect backend.
Date: Wed, 14 Sep 2022 16:43:40 +0200
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

>> I'm unable to reproduce this problem with Emacs 28.2 (or the current
>> trunk).
>
> Sorry; I was testing in the wrong checkout -- I'm now rebuilding the
> real emacs-28.2 release and will re-test.

I've now redone the tests, but I'm still not able to reproduce the
problem.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57777; Package emacs. (Thu, 15 Sep 2022 14:54:02 GMT) Full text and rfc822 format available.

Message #19 received at 57777 <at> debbugs.gnu.org (full text, mbox):

From: Mike Woolley <mike <at> bulsara.com>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 57777 <at> debbugs.gnu.org
Subject: Re: bug#57777: 28.2; `vc-dir' picks incorrect backend.
Date: Thu, 15 Sep 2022 15:53:32 +0100
[Message part 1 (text/plain, inline)]
Thanks for looking at this Lars.

The steps you tried also work correctly for me, so clearly the problem is a bit more specific than I initially thought!

I stepped through `vc-responsible-backend’ in the debugger when executing `vc-dir’ on one of the directories where I have this problem (my home directory in the following example).
This bit of code:

 (vc-call-backend backend 'responsible-p file)

returns "~/“ for the Git backend, but "/Users/mike/“ for the CVS backend.

Further down, this next bit of code looks for the longest directory string in an attempt to find the deepest subdirectory:

  ;; Several roots; we seem to have one vc inside another's
  ;; directory.  Choose the most specific.
  (caar (sort dirs (lambda (d1 d2)
                     (< (length (cdr d2)) (length (cdr d1))))))))

Which explains why it picks the CVS backend, because "/Users/mike/“ is longer than "~/“ 😊

So in other words, the missing step from my instructions is the directory has to be under the user’s home directory.

I would have thought the fix would be either to make `responsible-p’ return the same string or expand the “~” before executing the length comparison above.

Thanks,
Mike

> On 14 Sep 2022, at 15:43, Lars Ingebrigtsen <larsi <at> gnus.org> wrote:
> 
> Lars Ingebrigtsen <larsi <at> gnus.org> writes:
> 
>>> I'm unable to reproduce this problem with Emacs 28.2 (or the current
>>> trunk).
>> 
>> Sorry; I was testing in the wrong checkout -- I'm now rebuilding the
>> real emacs-28.2 release and will re-test.
> 
> I've now redone the tests, but I'm still not able to reproduce the
> problem.

[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57777; Package emacs. (Thu, 15 Sep 2022 15:41:02 GMT) Full text and rfc822 format available.

Message #22 received at 57777 <at> debbugs.gnu.org (full text, mbox):

From: Mike Woolley <mike <at> bulsara.com>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 57777 <at> debbugs.gnu.org
Subject: Re: bug#57777: 28.2; `vc-dir' picks incorrect backend.
Date: Thu, 15 Sep 2022 16:39:54 +0100
[Message part 1 (text/plain, inline)]
I should also mention that I tested changing the code to the following and it fixed the problem:

     (when-let ((dir (expand-file-name
			    (vc-call-backend
                               backend 'responsible-p file))))

Thanks,
Mike

> On 15 Sep 2022, at 15:53, Mike Woolley <mike <at> bulsara.com> wrote:
> 
> Thanks for looking at this Lars.
> 
> The steps you tried also work correctly for me, so clearly the problem is a bit more specific than I initially thought!
> 
> I stepped through `vc-responsible-backend’ in the debugger when executing `vc-dir’ on one of the directories where I have this problem (my home directory in the following example).
> This bit of code:
> 
>  (vc-call-backend backend 'responsible-p file)
> 
> returns "~/“ for the Git backend, but "/Users/mike/“ for the CVS backend.
> 
> Further down, this next bit of code looks for the longest directory string in an attempt to find the deepest subdirectory:
> 
>   ;; Several roots; we seem to have one vc inside another's
>   ;; directory.  Choose the most specific.
>   (caar (sort dirs (lambda (d1 d2)
>                      (< (length (cdr d2)) (length (cdr d1))))))))
> 
> Which explains why it picks the CVS backend, because "/Users/mike/“ is longer than "~/“ 😊
> 
> So in other words, the missing step from my instructions is the directory has to be under the user’s home directory.
> 
> I would have thought the fix would be either to make `responsible-p’ return the same string or expand the “~” before executing the length comparison above.
> 
> Thanks,
> Mike
> 
>> On 14 Sep 2022, at 15:43, Lars Ingebrigtsen <larsi <at> gnus.org <mailto:larsi <at> gnus.org>> wrote:
>> 
>> Lars Ingebrigtsen <larsi <at> gnus.org <mailto:larsi <at> gnus.org>> writes:
>> 
>>>> I'm unable to reproduce this problem with Emacs 28.2 (or the current
>>>> trunk).
>>> 
>>> Sorry; I was testing in the wrong checkout -- I'm now rebuilding the
>>> real emacs-28.2 release and will re-test.
>> 
>> I've now redone the tests, but I'm still not able to reproduce the
>> problem.
> 

[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57777; Package emacs. (Fri, 16 Sep 2022 09:47:02 GMT) Full text and rfc822 format available.

Message #25 received at 57777 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Mike Woolley <mike <at> bulsara.com>
Cc: 57777 <at> debbugs.gnu.org
Subject: Re: bug#57777: 28.2; `vc-dir' picks incorrect backend.
Date: Fri, 16 Sep 2022 11:46:39 +0200
Mike Woolley <mike <at> bulsara.com> writes:

> I should also mention that I tested changing the code to the following and it fixed the
> problem:
>
>      (when-let ((dir (expand-file-name
>    (vc-call-backend
>                                backend 'responsible-p file))))

Thanks; I've now pushed something along these lines to Emacs 29.




bug marked as fixed in version 29.1, send any further explanations to 57777 <at> debbugs.gnu.org and Mike Woolley <mike <at> bulsara.com> Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Fri, 16 Sep 2022 09:47:03 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 14 Oct 2022 11:24:09 GMT) Full text and rfc822 format available.

This bug report was last modified 1 year and 193 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.