GNU bug report logs - #79126
vc-switch-working-tree does not work if there is no matching file

Previous Next

Package: emacs;

Reported by: Dmitry Gutov <dmitry <at> gutov.dev>

Date: Wed, 30 Jul 2025 02:38:01 UTC

Severity: normal

Done: Sean Whitton <spwhitton <at> spwhitton.name>

Full log


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

From: Eshel Yaron <me <at> eshelyaron.com>
To: Dmitry Gutov <dmitry <at> gutov.dev>
Cc: sbaugh <at> janestreet.com, 79126 <at> debbugs.gnu.org, spwhitton <at> spwhitton.name
Subject: Re: bug#79126: vc-switch-working-tree does not work if there is no
 matching file
Date: Wed, 30 Jul 2025 06:30:31 +0200
Hi Dmitry, Sean, Spencer,

First of all, thank you for adding these new worktree commands, I use
Git worktrees a lot and it's great to see VC supporting them.

Dmitry Gutov <dmitry <at> gutov.dev> writes:

> If the current buffer does not visit a file (such as Dired, mentioned
> in a FIXME comment), or if the current file has no corresponding on
> the other worktree, we end up with an error.
>
> Like
>
>   file-relative-name: Wrong type argument: stringp, nil
>
> or
>
>   File ‘lisp/progmodes/abc.el’ not found in ‘~/vc/emacs-28/’

FWIW, while incorporating this new feature in my Emacs branch, I've made
a few experimental tweaks that eliminate these errors.  Namely, I added
a variable vc-switch-working-tree-function which vc-switch-working-tree
consults to do the actual switching.  By default this variable is set to
a function that works for file-visiting buffers (similarly to the
current implementation in master), but major modes can readily set this
variable buffer-locally to provide worktree-switching support also for
non-file buffers.  I used this indirection to support Dired buffers.

( The more fundamental change I made was to avoid the dependency of VC
  on project.el, which I find... suboptimal.  Instead I introduced hooks
  vc-delete/create-tree-hook which one can use, among other things, to
  keep project--list in sync with deleted/created worktrees.  This does
  come at the expense of effectively disabling the Mercurial support. )

If you want to take a look, you can find my tweaks here:

  http://git.eshelyaron.com/gitweb/?p=emacs.git;a=commitdiff;h=2b1383d647402df2b539f69cf73a12c0717b00f3

> I guess some of these could be improved in project-find-matching-file
> (support for more major modes?) but semantically it seems like
> vc-switch-working-tree should try harder. Falling back to visiting the
> worktree root in Dired, if it doesn't find a better choice.

That sounds like a good fallback, indeed.


Best regards,

Eshel




This bug report was last modified 4 days ago.

Previous Next


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