Subject: Re: bug#78987: 30.1; Unable to create new Git repository in Dired mode

From: Stephen Berman <[email-masked]>
Date: Fri, 11 Jul 2025 13:49:47 +0200

On Fri, 11 Jul 2025 14:12:38 +0300 Eli Zaretskii <[email-masked]> wrote:

>> Cc: [email-masked], Stephen Berman <[email-masked]>
>> From: Sean Whitton <[email-masked]>
>> Date: Fri, 11 Jul 2025 09:36:14 +0100
>> 
>> Hello,
>> 
>> On Thu 10 Jul 2025 at 02:29am +02, Stephen Berman via "Bug reports for GNU
>> Emacs, the Swiss army knife of text editors" wrote:
>> 
>> > On Thu, 10 Jul 2025 03:37:40 +0800 "Zipei Lu" via "Bug reports for GNU
>> > Emacs, the Swiss army knife of text editors" <[email-masked]>
>> > wrote:
>> >
>> >> Here are the steps to reproduce the bug:
>> >> 1. 'C-x d' to arbitrary directory without any version control repository.
>> >> 2. Mark arbitrary number of files with 'm'.
>> >> 3. Type 'C-x v v'.
>> >>
>> >> Then the mini buffer will display:
>> >>
>> >> No VC backend is responsible for c:/my/directory/
>> >>
>> >> According to GNU Emacs manual 30.1.3.1, 'C-x v v' is expected to create
>> >> a new repository in the directory. However, 'C-x v v' can still be able
>> >> to create
>> >> new repository in the buffer of  a file(Not in the buffer of directory).
>> >
>> > This patch seems to DTRT, at least on initial testing with -Q:
>> >
>> > diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
>> > index e5b08af2a30..d8b195d9a12 100644
>> > --- a/lisp/dired-aux.el
>> > +++ b/lisp/dired-aux.el
>> > @@ -4022,8 +4022,9 @@ dired-vc-next-action
>> >  ;;;###autoload
>> >  (defun dired-vc-deduce-fileset
>> >      (&optional state-model-only-files not-state-changing)
>> > -  (let ((backend (vc-responsible-backend default-directory))
>> > -        (files (dired-get-marked-files nil nil nil nil t)))
>> > +  (let* ((files (dired-get-marked-files nil nil nil nil t))
>> > +         (backend (or (vc-responsible-backend default-directory t)
>> > +                      (vc-backend-for-registration (car files)))))
>> >      (when (and (not not-state-changing)
>> >                 (cl-some #'file-directory-p files))
>> >        (user-error "\
>> 
>> I think this is okay, please install.
>
> Please don't ignore my comment in
>
>   https://lists.gnu.org/archive/html/help-gnu-emacs/2025-07/msg00090.html

I wanted to reply to that so I'll do it here; here's the context:

> From: Eli Zaretskii <[email-masked]>
> Subject: Re: Unable to create new Git repo with VC utilities
> To: Stephen Berman <[email-masked]>
> Cc: [email-masked], [email-masked], [email-masked]
> Date: Thu, 10 Jul 2025 07:52:07 +0300 (1 day, 6 hours, 38 minutes ago)
>
>> From: Stephen Berman <[email-masked]>
>> Cc: [email-masked],  [email-masked],  [email-masked]
>> Date: Wed, 09 Jul 2025 19:55:54 +0200
[...]
>> >> This patch seems to DTRT, at least on initial testing:
[...]
>> > Thanks, but vc-backend-for-registration is not autoloaded, so I think
>> > something is still missing.
>> 
>> But vc-responsible-backend is called first and it is autoloaded.
>
> It is not a good idea to rely on that.  It's fragile: one simple
> change to the source, and the command will signal an error.

I'm not sure what you mean by "one simple change to the source".  But I
did see this warning after rebuilding emacs:

  ⛔ Warning (native-compiler): dired-aux.el:4027:24: Warning: the
  function ‘vc-backend-for-registration’ is not known to be defined.

With the following patch, there is no longer such a warning; does it
also allay your reservations?

diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index e5b08af2a30..3c6ef080f5f 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -4022,8 +4022,10 @@ dired-vc-next-action
 ;;;###autoload
 (defun dired-vc-deduce-fileset
     (&optional state-model-only-files not-state-changing)
-  (let ((backend (vc-responsible-backend default-directory))
-        (files (dired-get-marked-files nil nil nil nil t)))
+  (eval-when-compile (require 'vc))
+  (let* ((files (dired-get-marked-files nil nil nil nil t))
+         (backend (or (vc-responsible-backend default-directory t)
+                      (vc-backend-for-registration (car files)))))
     (when (and (not not-state-changing)
                (cl-some #'file-directory-p files))
       (user-error "\

Steve Berman