GNU bug report logs - #71762
`(project-files (project-current))` with `project-vc-extra-root-markers` doesn't work on Windows.

Previous Next

Package: emacs;

Reported by: Siyuan Chen <chansey97 <at> gmail.com>

Date: Mon, 24 Jun 2024 21:37:01 UTC

Severity: normal

Tags: notabug

Done: Stefan Kangas <stefankangas <at> gmail.com>

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 71762 in the body.
You can then email your comments to 71762 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#71762; Package emacs. (Mon, 24 Jun 2024 21:37:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Siyuan Chen <chansey97 <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Mon, 24 Jun 2024 21:37:01 GMT) Full text and rfc822 format available.

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

From: Siyuan Chen <chansey97 <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: `(project-files (project-current))` with
 `project-vc-extra-root-markers` doesn't work on Windows.
Date: Tue, 25 Jun 2024 05:35:54 +0800
[Message part 1 (text/plain, inline)]
Reproduces steps:

I have the following directory

```

\---myproject
    |  .project
    |
    +---subproject1
    |   \---.git
    |   |   Makefile
    |
    \---subproject2
        \---.git
        |   Makefile

```

1. Open Emacs -Q

2. M-x eval-expression `(setq debug-on-error t)`

3. M-x eval-expression `(setq project-vc-extra-root-markers '(".project"))`

4. Open the .project file in Emacs

5. M-x eval-expression `(project-current)`

    Result: `(vc nil "e:/work/myproject/")` OK

6. M-x eval-expression `(project-files (project-current))`

    Result: Debugger entered--Lisp error: (error "File listing failed:
FIND: Parameter format not co...")
  error("File listing failed: %s" "FIND: Parameter format not correct\n")

The root cause is that `project--files-in-directory` in project.el is using
`find-program` ("find") which does not exist on Windows.

Is it possible to use more portable code? For example,
`directory-files-recursively`? Otherwise NTEmacs users will have to install
CYGWIN or MSYS2.

P.s. I have used Projectile before, which allows you to place a .projectile
file in `myproject` and everything was OK on Windows. Also if I focus on a
git folder e.g. `subproject1` in the example above, the `project-files`
also works well.

Emacs 29.3 on Windows 10.

Thanks.

Best Regards,
Siyuan Chen
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#71762; Package emacs. (Tue, 25 Jun 2024 00:07:02 GMT) Full text and rfc822 format available.

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

From: Siyuan Chen <chansey97 <at> gmail.com>
To: 71762 <at> debbugs.gnu.org
Subject: Re: bug#71762: `(project-files (project-current))` with
 `project-vc-extra-root-markers` doesn't work on Windows.
Date: Tue, 25 Jun 2024 08:04:48 +0800
[Message part 1 (text/plain, inline)]
Anyway, setting `(setq find-program (purecopy
"C:/msys64/usr/bin/find.exe"))` makes the above example work at the moment.

Perhaps all NTEmacs users should set the 3 options: grep-program,
find-program, xargs-program. My only concern now is the potential issue
with backslashes and encoding. Hence, I have to keep Projectile as the
fallback solution because it has a native implementation.

Best Regards,
Siyuan Chen


On Tue, Jun 25, 2024 at 5:37 AM Siyuan Chen <chansey97 <at> gmail.com> wrote:

> Reproduces steps:
>
> I have the following directory
>
> ```
>
> \---myproject
>     |  .project
>     |
>     +---subproject1
>     |   \---.git
>     |   |   Makefile
>     |
>     \---subproject2
>         \---.git
>         |   Makefile
>
> ```
>
> 1. Open Emacs -Q
>
> 2. M-x eval-expression `(setq debug-on-error t)`
>
> 3. M-x eval-expression `(setq project-vc-extra-root-markers
> '(".project"))`
>
> 4. Open the .project file in Emacs
>
> 5. M-x eval-expression `(project-current)`
>
>     Result: `(vc nil "e:/work/myproject/")` OK
>
> 6. M-x eval-expression `(project-files (project-current))`
>
>     Result: Debugger entered--Lisp error: (error "File listing failed:
> FIND: Parameter format not co...")
>   error("File listing failed: %s" "FIND: Parameter format not correct\n")
>
> The root cause is that `project--files-in-directory` in project.el is
> using `find-program` ("find") which does not exist on Windows.
>
> Is it possible to use more portable code? For example,
> `directory-files-recursively`? Otherwise NTEmacs users will have to
> install CYGWIN or MSYS2.
>
> P.s. I have used Projectile before, which allows you to place a
> .projectile file in `myproject` and everything was OK on Windows. Also if I
> focus on a git folder e.g. `subproject1` in the example above, the
> `project-files` also works well.
>
> Emacs 29.3 on Windows 10.
>
> Thanks.
>
> Best Regards,
> Siyuan Chen
>
>
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#71762; Package emacs. (Tue, 25 Jun 2024 12:46:02 GMT) Full text and rfc822 format available.

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

From: Eli Zaretskii <eliz <at> gnu.org>
To: Siyuan Chen <chansey97 <at> gmail.com>
Cc: 71762 <at> debbugs.gnu.org
Subject: Re: bug#71762: `(project-files (project-current))` with
 `project-vc-extra-root-markers` doesn't work on Windows.
Date: Tue, 25 Jun 2024 15:45:33 +0300
tags 71762 notabug
thanks

> From: Siyuan Chen <chansey97 <at> gmail.com>
> Date: Tue, 25 Jun 2024 08:04:48 +0800
> 
> Anyway, setting `(setq find-program (purecopy "C:/msys64/usr/bin/find.exe"))` makes the above example work
> at the moment. 

That's one possible solution.  Another is to rearrange your system's
PATH so that the directory C:\msys64\usr\bin comes _before_ the
C:\WINDOWS\system32, where you have the stock Windows find.exe (which
is a program for a completely different purpose and with completely
different command-line syntax).

Byw, the "msys64" part of the directory where you have find.exe seems
to hint that it is an MSYS port, not a native Windows/MinGW port.  If
that is indeed so, my recommendation is to install a native find.exe
and use that instead, as MSYS ports could have subtle
incompatibilities with a native Windows Emacs.

> Perhaps all NTEmacs users should set the 3 options: grep-program, find-program, xargs-program.

These variables already exist, so I'm not sure what you are suggesting
here.

In general, the only "problematic" program is find.exe, because
Windows comes only with that.  The other two programs must be
installed, and so there's no danger of Emacs invoking the wrong one.

I see no Emacs bug here, just an issue of configuring your system
and/or Emacs correctly.

> My only
> concern now is the potential issue with backslashes and encoding.

There should be no such issues, if you find one, please report that as
a bug.




Added tag(s) notabug. Request was from Eli Zaretskii <eliz <at> gnu.org> to control <at> debbugs.gnu.org. (Tue, 25 Jun 2024 12:46:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#71762; Package emacs. (Tue, 25 Jun 2024 13:31:01 GMT) Full text and rfc822 format available.

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

From: Dmitry Gutov <dmitry <at> gutov.dev>
To: Siyuan Chen <chansey97 <at> gmail.com>, 71762 <at> debbugs.gnu.org
Subject: Re: bug#71762: `(project-files (project-current))` with
 `project-vc-extra-root-markers` doesn't work on Windows.
Date: Tue, 25 Jun 2024 16:29:50 +0300
On 25/06/2024 00:35, Siyuan Chen wrote:
> 
> Is it possible to use more portable code? For example, 
> `directory-files-recursively`? Otherwise NTEmacs users will have to 
> install CYGWIN or MSYS2.

There are also GNU tools available for download separately, e.g. see the 
ezwinports project.

I'm wary of using directory-files-recursively - because the performance 
can be much different. While right now you see the error and are thus 
encouraged to fix it by installing an extra program or two, in the other 
case the user would just see poor performance (given a large enough 
project) and perhaps some reduced features wrt filtering. And might not 
realize that it's not how the feature is supposed to work.

Also note that 'find.exe' is only required when you have a project 
that's outside of any Git repositories.

> P.s. I have used Projectile before, which allows you to place a 
> .projectile file in `myproject` and everything was OK on Windows. Also 
> if I focus on a git folder e.g. `subproject1` in the example above, the 
> `project-files` also works well.

Projectile has some different tradeoffs, e.g. you might have to reset 
the file cache manually in the above setup. It also has several indexing 
methods to choose from, each with pros and cons.




Reply sent to Stefan Kangas <stefankangas <at> gmail.com>:
You have taken responsibility. (Sun, 30 Jun 2024 06:11:03 GMT) Full text and rfc822 format available.

Notification sent to Siyuan Chen <chansey97 <at> gmail.com>:
bug acknowledged by developer. (Sun, 30 Jun 2024 06:11:03 GMT) Full text and rfc822 format available.

Message #21 received at 71762-done <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 71762-done <at> debbugs.gnu.org, Siyuan Chen <chansey97 <at> gmail.com>
Subject: Re: bug#71762: `(project-files (project-current))` with
 `project-vc-extra-root-markers` doesn't work on Windows.
Date: Sat, 29 Jun 2024 23:09:12 -0700
Eli Zaretskii <eliz <at> gnu.org> writes:

> tags 71762 notabug
> thanks
>
>> From: Siyuan Chen <chansey97 <at> gmail.com>
>> Date: Tue, 25 Jun 2024 08:04:48 +0800
>>
>> Anyway, setting `(setq find-program (purecopy "C:/msys64/usr/bin/find.exe"))` makes the above example work
>> at the moment.
>
> That's one possible solution.  Another is to rearrange your system's
> PATH so that the directory C:\msys64\usr\bin comes _before_ the
> C:\WINDOWS\system32, where you have the stock Windows find.exe (which
> is a program for a completely different purpose and with completely
> different command-line syntax).
>
> Byw, the "msys64" part of the directory where you have find.exe seems
> to hint that it is an MSYS port, not a native Windows/MinGW port.  If
> that is indeed so, my recommendation is to install a native find.exe
> and use that instead, as MSYS ports could have subtle
> incompatibilities with a native Windows Emacs.
>
>> Perhaps all NTEmacs users should set the 3 options: grep-program, find-program, xargs-program.
>
> These variables already exist, so I'm not sure what you are suggesting
> here.
>
> In general, the only "problematic" program is find.exe, because
> Windows comes only with that.  The other two programs must be
> installed, and so there's no danger of Emacs invoking the wrong one.
>
> I see no Emacs bug here, just an issue of configuring your system
> and/or Emacs correctly.

I'm therefore closing this bug report.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 28 Jul 2024 11:24:15 GMT) Full text and rfc822 format available.

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

Previous Next


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