GNU bug report logs - #78987
30.1; Unable to create new Git repository in Dired mode

Previous Next

Package: emacs;

Reported by: "Zipei Lu" <zipeilu <at> qq.com>

Date: Wed, 9 Jul 2025 21:57:09 UTC

Severity: normal

Found in version 30.1

To reply to this bug, email your comments to 78987 AT debbugs.gnu.org.

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#78987; Package emacs. (Wed, 09 Jul 2025 21:57:09 GMT) Full text and rfc822 format available.

Acknowledgement sent to "Zipei Lu" <zipeilu <at> qq.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Wed, 09 Jul 2025 21:57:10 GMT) Full text and rfc822 format available.

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

From: "Zipei Lu" <zipeilu <at> qq.com>
To: "bug-gnu-emacs" <bug-gnu-emacs <at> gnu.org>
Subject: 30.1; Unable to create new Git repository in Dired mode
Date: Thu, 10 Jul 2025 03:37:40 +0800
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).

	
Zipei Lu
zipeilu <at> qq.com

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78987; Package emacs. (Thu, 10 Jul 2025 00:30:05 GMT) Full text and rfc822 format available.

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

From: Stephen Berman <stephen.berman <at> gmx.net>
To: "Zipei Lu" via "Bug reports for GNU Emacs, the Swiss army knife of text
 editors" <bug-gnu-emacs <at> gnu.org>
Cc: Zipei Lu <zipeilu <at> qq.com>, 78987 <at> debbugs.gnu.org
Subject: Re: bug#78987: 30.1; Unable to create new Git repository in Dired mode
Date: Thu, 10 Jul 2025 02:29:34 +0200
[Message part 1 (text/plain, inline)]
On Thu, 10 Jul 2025 03:37:40 +0800 "Zipei Lu" via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org> 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:

[Message part 2 (text/x-patch, inline)]
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 "\
[Message part 3 (text/plain, inline)]
Steve Berman

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78987; Package emacs. (Thu, 10 Jul 2025 00:31:01 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78987; Package emacs. (Fri, 11 Jul 2025 08:37:02 GMT) Full text and rfc822 format available.

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

From: Sean Whitton <spwhitton <at> spwhitton.name>
To: 78987 <at> debbugs.gnu.org
Cc: zipeilu <at> qq.com, Stephen Berman <stephen.berman <at> gmx.net>
Subject: Re: bug#78987: 30.1; Unable to create new Git repository in Dired mode
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" <bug-gnu-emacs <at> gnu.org> 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.

-- 
Sean Whitton




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78987; Package emacs. (Fri, 11 Jul 2025 09:06:02 GMT) Full text and rfc822 format available.

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

From: Sean Whitton <spwhitton <at> spwhitton.name>
To: 78987 <at> debbugs.gnu.org
Cc: zipeilu <at> qq.com, Stephen Berman <stephen.berman <at> gmx.net>
Subject: Re: bug#78987: 30.1; Unable to create new Git repository in Dired mode
Date: Fri, 11 Jul 2025 10:05:00 +0100
Hello,

On Fri 11 Jul 2025 at 09:36am +01, Sean Whitton wrote:

>> 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.

No, wait.  I think that we need to pass down the allow-unregistered
argument from vc-deduce-fileset to dired-vc-deduce-fileset, and only
if that's non-nil can we call vc-backend-for-registration.

-- 
Sean Whitton




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78987; Package emacs. (Fri, 11 Jul 2025 09:35:02 GMT) Full text and rfc822 format available.

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

From: Stephen Berman <stephen.berman <at> gmx.net>
To: Sean Whitton <spwhitton <at> spwhitton.name>
Cc: zipeilu <at> qq.com, 78987 <at> debbugs.gnu.org
Subject: Re: bug#78987: 30.1; Unable to create new Git repository in Dired mode
Date: Fri, 11 Jul 2025 11:33:51 +0200
On Fri, 11 Jul 2025 10:05:00 +0100 Sean Whitton <spwhitton <at> spwhitton.name> wrote:

> Hello,
>
> On Fri 11 Jul 2025 at 09:36am +01, Sean Whitton wrote:
>
>>> 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.
>
> No, wait.  I think that we need to pass down the allow-unregistered
> argument from vc-deduce-fileset to dired-vc-deduce-fileset, and only
> if that's non-nil can we call vc-backend-for-registration.

When I test with -Q, a Git repository is created and either the file at
point or the marked files in Dired are added to it, although
`vc-deduce-fileset' calls `(dired-vc-deduce-fileset
state-model-only-files not-state-changing)', i.e., without passing
`allow-unregistered'; so why do you think it must be passed (and
non-nil)?

Steve Berman




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78987; Package emacs. (Fri, 11 Jul 2025 11:13:02 GMT) Full text and rfc822 format available.

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

From: Eli Zaretskii <eliz <at> gnu.org>
To: Sean Whitton <spwhitton <at> spwhitton.name>
Cc: zipeilu <at> qq.com, 78987 <at> debbugs.gnu.org, stephen.berman <at> gmx.net
Subject: Re: bug#78987: 30.1; Unable to create new Git repository in Dired mode
Date: Fri, 11 Jul 2025 14:12:38 +0300
> Cc: zipeilu <at> qq.com, Stephen Berman <stephen.berman <at> gmx.net>
> From: Sean Whitton <spwhitton <at> spwhitton.name>
> 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" <bug-gnu-emacs <at> gnu.org> 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




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78987; Package emacs. (Fri, 11 Jul 2025 11:50:02 GMT) Full text and rfc822 format available.

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

From: Stephen Berman <stephen.berman <at> gmx.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: zipeilu <at> qq.com, 78987 <at> debbugs.gnu.org,
 Sean Whitton <spwhitton <at> spwhitton.name>
Subject: Re: bug#78987: 30.1; Unable to create new Git repository in Dired mode
Date: Fri, 11 Jul 2025 13:49:47 +0200
[Message part 1 (text/plain, inline)]
On Fri, 11 Jul 2025 14:12:38 +0300 Eli Zaretskii <eliz <at> gnu.org> wrote:

>> Cc: zipeilu <at> qq.com, Stephen Berman <stephen.berman <at> gmx.net>
>> From: Sean Whitton <spwhitton <at> spwhitton.name>
>> 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" <bug-gnu-emacs <at> gnu.org>
>> > 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 <eliz <at> gnu.org>
> Subject: Re: Unable to create new Git repo with VC utilities
> To: Stephen Berman <stephen.berman <at> gmx.net>
> Cc: rpluim <at> gmail.com, lzpzipei <at> gmail.com, help-gnu-emacs <at> gnu.org
> Date: Thu, 10 Jul 2025 07:52:07 +0300 (1 day, 6 hours, 38 minutes ago)
>
>> From: Stephen Berman <stephen.berman <at> gmx.net>
>> Cc: rpluim <at> gmail.com,  lzpzipei <at> gmail.com,  help-gnu-emacs <at> gnu.org
>> 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?

[Message part 2 (text/x-patch, inline)]
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 "\
[Message part 3 (text/plain, inline)]
Steve Berman

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78987; Package emacs. (Fri, 11 Jul 2025 18:15:01 GMT) Full text and rfc822 format available.

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

From: Sean Whitton <spwhitton <at> spwhitton.name>
To: Stephen Berman <stephen.berman <at> gmx.net>
Cc: zipeilu <at> qq.com, 78987 <at> debbugs.gnu.org
Subject: Re: bug#78987: 30.1; Unable to create new Git repository in Dired mode
Date: Fri, 11 Jul 2025 19:13:59 +0100
Hello,

On Fri 11 Jul 2025 at 11:33am +02, Stephen Berman via "Bug reports for GNU Emacs, the Swiss army knife of text editors" wrote:

> When I test with -Q, a Git repository is created and either the file at
> point or the marked files in Dired are added to it, although
> `vc-deduce-fileset' calls `(dired-vc-deduce-fileset
> state-model-only-files not-state-changing)', i.e., without passing
> `allow-unregistered'; so why do you think it must be passed (and
> non-nil)?

It should be passed because the corresponding code path for vc-dir
passes allow-unregistered down.  dired-vc-deduce-fileset is meant to be
just a dired version of the vc-dir code path in vc-deduce-fileset.

-- 
Sean Whitton




This bug report was last modified today.

Previous Next


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