unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Dmitry Gutov <dgutov@yandex.ru>
To: Philipp Stephani <p.stephani2@gmail.com>
Cc: 47799@debbugs.gnu.org
Subject: bug#47799: 28.0.50; Default `project-files' implementation doesn't work with quoted filenames
Date: Sun, 18 Apr 2021 23:21:00 +0300	[thread overview]
Message-ID: <d9ec362d-cb69-efaf-0b80-e771abf05349@yandex.ru> (raw)
In-Reply-To: <CAArVCkScxJ4FK2ofJSSXxxFanr16+NU=SiquQTu=kuYZ5p9ugw@mail.gmail.com>

On 18.04.2021 23:06, Philipp Stephani wrote:

>> Regarding xref--find-ignores-arguments, it seems it would be economical
>> to do the quoting on the value passed to it. See f955df1.
> 
> Since it's an internal function, this is mostly a matter of style. I
> prefer using Emacs filenames as function arguments as much as
> possible; it's the expected behavior for functions dealing with files,
> and Emacs doesn't have a strong enough type system to distinguish
> "Emacs filename" (which can be quoted or remote) from "filename for
> external programs" (which must be unquoted and local).

Matter of style, yes, but the way I fixed it requires one unquoting 
instead of two, which seems like a win.

Your point is also valid, of course.

>> Regarding your change, though, have you tried project-find-regexp in a
>> "transient" project with a quoted root directory name?
>>
>> You've made project--files-in-directory quote the returned file names,
>> but that list gets passed to xref-matches-in-files, which pipes them to
>> find-grep in the end. I suppose xref-matches-in-files could use a step
>> similar to (when remote-id ...) that is already there.
> 
> Good point, I've pushed 6ebc6e12cf to fix. But xref.el should also be
> fixed. Maybe I'll find some time to take a look at it.

Yes, I think the fix needs to be in xref-matches-in-files, and it also 
needs to use file-name-quoted-p similarly to (file-remote-p 
default-directory, to avoid the mapping overhead when the list of file 
names is large.

It's a realistic use case, and the impact is significant (e.g. 1s to 
list files, 2s to unquote them all), so please look into this soon. The 
fix in xref should be simple enough, I'd just like for someone to 
realistically test it before installing (I can send a patch, if you want).

>> A bit unfortunate for the users of large projects with quoted names, but
>> not sure what else we could do.
> 
> Quoting is a purely lexical operation which should be reasonably fast
> even for a large list of files.
> For truly enormous projects, something like "list of all project
> files" is infeasible anyway.

File listing in projects backed by Git (at least) is quite optimized. 
For example, in a gecko-dev checkout:

(benchmark 1 '(project-files (project-current)))
=> 0.97s

(benchmark 1 '(mapcar #'file-name-unquote (project-files 
(project-current))))
=> 2.97s





  reply	other threads:[~2021-04-18 20:21 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-15 13:43 bug#47799: 28.0.50; Default `project-files' implementation doesn't work with quoted filenames Philipp Stephani
2021-04-15 16:15 ` Dmitry Gutov
2021-04-15 16:26   ` Philipp Stephani
2021-04-15 16:44   ` Philipp Stephani
2021-04-16  1:08     ` Dmitry Gutov
2021-04-18 20:06       ` Philipp Stephani
2021-04-18 20:21         ` Dmitry Gutov [this message]
2021-04-19 14:48           ` Philipp Stephani
2021-04-19 20:48             ` Dmitry Gutov
2021-04-22  0:46               ` Dmitry Gutov
2021-05-16 13:37               ` Philipp
2021-05-16 23:22                 ` Dmitry Gutov
2021-05-16 23:31                   ` Dmitry Gutov
2021-07-05 19:05                   ` Philipp
2021-07-18  0:53                     ` Dmitry Gutov
2021-09-05 17:14                       ` Philipp
2021-09-20 16:05                         ` Dmitry Gutov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d9ec362d-cb69-efaf-0b80-e771abf05349@yandex.ru \
    --to=dgutov@yandex.ru \
    --cc=47799@debbugs.gnu.org \
    --cc=p.stephani2@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).