bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#32093: 27.0.50; M-x grep appends /dev/null to command line


From: David Kastrup
Subject: bug#32093: 27.0.50; M-x grep appends /dev/null to command line
Date: Sun, 08 Jul 2018 13:17:53 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

Michael Albinus <michael.albinus@gmx.de> writes:

> David Kastrup <dak@gnu.org> writes:
>
>> So you are saying there is a bug workaround that will tie me into using
>> one grep-like command in future, ever.  Because obviously in my case
>> auto detection failed.
>
> Don't know. Maybe you check what autodetect does in your case.

Here is the respective code:

318e2976570 (Kim F. Storm            2003-11-23  626)     (unless (or (not 
grep-use-null-device) (eq grep-use-null-device t))
318e2976570 (Kim F. Storm            2003-11-23  627)       (setq 
grep-use-null-device
318e2976570 (Kim F. Storm            2003-11-23  628)       (with-temp-buffer
318e2976570 (Kim F. Storm            2003-11-23  629)         (let ((hello-file 
(expand-file-name "HELLO" data-directory)))
318e2976570 (Kim F. Storm            2003-11-23  630)           (not
0acfb7cea68 (Kim F. Storm            2006-04-28  631)            (and (if 
grep-command
318e2976570 (Kim F. Storm            2003-11-23  632)                     ;; 
`grep-command' is already set, so
318e2976570 (Kim F. Storm            2003-11-23  633)                     ;; 
use that for testing.
0acfb7cea68 (Kim F. Storm            2006-04-28  634)                     
(grep-probe grep-command
0acfb7cea68 (Kim F. Storm            2006-04-28  635)                           
      `(nil t nil "^English" ,hello-file)
0acfb7cea68 (Kim F. Storm            2006-04-28  636)                           
      #'call-process-shell-command)
318e2976570 (Kim F. Storm            2003-11-23  637)                   ;; 
otherwise use `grep-program'
0acfb7cea68 (Kim F. Storm            2006-04-28  638)                   
(grep-probe grep-program
0acfb7cea68 (Kim F. Storm            2006-04-28  639)                           
    `(nil t nil "-nH" "^English" ,hello-file)))
318e2976570 (Kim F. Storm            2003-11-23  640)                 (progn
318e2976570 (Kim F. Storm            2003-11-23  641)                   
(goto-char (point-min))
318e2976570 (Kim F. Storm            2003-11-23  642)                   
(looking-at
318e2976570 (Kim F. Storm            2003-11-23  643)                    
(concat (regexp-quote hello-file)
318e2976570 (Kim F. Storm            2003-11-23  644)                           
 ":[0-9]+:English")))))))))

So the procedure is that the proposed command line (taken from
grep-program) does not include -nH .  User edits it to turn it into "git
grep".  Autodetection tries calling this(?) on the hello-file(?) which
fails due to the hello-file not being in the Git repository.  As a
result, Emacs decides to use /dev/null (?).

This code actually is considerably old, older than what I remember
having worked (though it's sort of hard to tell since the results of
autodetection are stored in a session).  So I consider it more likely
that the more recent

644cdd1aa0a (Noam Postavsky          2016-09-13  646)     (when (eq 
grep-use-null-filename-separator 'auto-detect)
644cdd1aa0a (Noam Postavsky          2016-09-13  647)       (setq 
grep-use-null-filename-separator
644cdd1aa0a (Noam Postavsky          2016-09-13  648)             
(with-temp-buffer
644cdd1aa0a (Noam Postavsky          2016-09-13  649)               (let* 
((hello-file (expand-file-name "HELLO" data-directory))
644cdd1aa0a (Noam Postavsky          2016-09-13  650)                      
(args `("--null" "-ne" "^English" ,hello-file)))
644cdd1aa0a (Noam Postavsky          2016-09-13  651)                 (if 
grep-use-null-device
644cdd1aa0a (Noam Postavsky          2016-09-13  652)                     (setq 
args (append args (list null-device)))
644cdd1aa0a (Noam Postavsky          2016-09-13  653)                   (push 
"-H" args))
644cdd1aa0a (Noam Postavsky          2016-09-13  654)                 (and 
(grep-probe grep-program `(nil t nil ,@args))
644cdd1aa0a (Noam Postavsky          2016-09-13  655)                      
(progn
644cdd1aa0a (Noam Postavsky          2016-09-13  656)                        
(goto-char (point-min))
644cdd1aa0a (Noam Postavsky          2016-09-13  657)                        
(looking-at
644cdd1aa0a (Noam Postavsky          2016-09-13  658)                         
(concat (regexp-quote hello-file)
644cdd1aa0a (Noam Postavsky          2016-09-13  659)                           
      "\0[0-9]+:English"))))))))
644cdd1aa0a (Noam Postavsky          2016-09-13  660) 

is involved here.  At any rate, the principal problem here is that "git
grep" is a grep-like command that will usually refuse to work on
out-of-tree files (unless --no-index option is given).  So the results
from any of the autodetection, based on searching the HELLO file, are
sort-of random.

-- 
David Kastrup





reply via email to

[Prev in Thread] Current Thread [Next in Thread]