Subject: bug#51711: 28.0.60; rgrep fails to pass the search directory to rgrep-default-command

From: Dmitry Gutov <[email-masked]>
Date: Thu, 11 Nov 2021 03:17:46 +0300

Hi!

On 09.11.2021 13:02, Phil Sainty wrote:
> This was intentionally changed in commit c6ee95ddeef:
> 
> https://git.savannah.gnu.org/cgit/emacs.git/commit?id=c6ee95ddeefc17410e15090539d0cb220ab6947c 
> 
> 
>         (setq dir (file-name-as-directory (expand-file-name dir)))
> -      (let ((command (rgrep-default-command regexp files dir)))
> +      (let ((command (rgrep-default-command regexp files nil)))
> 
> It's not clear to me why this was done, but rgrep-default-command
> cannot produce the correct output if it isn't given the search
> directory.  In particular, rgrep-find-ignored-directories and
> rgrep-find-ignored-files no longer work as expected, if the
> directory is not passed, for grep-find-ignored-directories and
> grep-find-ignored-files values using the cons cell format, as
> the functions specified need to know the search directory.

The effect on the *-ignores function is something we all have missed, alas.

This only matters when grep-find-ignored-directories or 
grep-find-ignored-files have been customized to cons values with 
functions, right?

> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20719#22 may be the
> justification ("it makes the last argument to rgrep-default-command
> look superfluous."), but that's definitely not true.
> 
> I don't have my head around the other changes made for bug#20719
> and so it's not clear to me whether fixing this is as simple as
> reverting that one line, or if doing so will cause some other
> regression.

It would replace "." in the resulting command with the absolute name of 
the directory, which would affect the output, for one thing.

> CCing Dmitry.  Can you recall specifically why that line was changed?

Does the below patch work for you? I suppose the answer depends on 
whether the functions in the customized car values will known what to do 
with ".".

diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index ec2850737c..8cc3e57378 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -1218,7 +1218,7 @@ rgrep
  				   grep-find-command)))
  	    (compilation-start regexp 'grep-mode))
        (setq dir (file-name-as-directory (expand-file-name dir)))
-      (let ((command (rgrep-default-command regexp files nil)))
+      (let ((command (rgrep-default-command regexp files ".")))
  	(when command
  	  (if confirm
  	      (setq command