From: Dmitry Gutov Date: Sun, 28 May 2017 23:55:42 +0000 (+0300) Subject: Signal error if find-grep returns a nonzero status X-Git-Tag: emacs-26.0.90~521^2~243 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3bc3dc406343bd7e50acae7c0f9d5f8cc89420cd;p=emacs.git Signal error if find-grep returns a nonzero status * lisp/progmodes/xref.el (xref-collect-matches): Signal error if find-grep returns a nonzero status (bug#23451). Remove the comment: even if some output is present, a non-zero status means something went wrong and it can't be relied upon. --- diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 9b6a560971c..c43f3a4ca83 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -929,14 +929,16 @@ IGNORES is a list of glob patterns." ignores)) (buf (get-buffer-create " *xref-grep*")) (grep-re (caar grep-regexp-alist)) + status hits) (with-current-buffer buf (erase-buffer) - (call-process-shell-command command nil t) - ;; FIXME: What to do when the call fails? - ;; "find: ‘xyzgrep’: No such file or directory\n" - ;; The problem is, find-grep can exit with a nonzero code even - ;; when there are some matches in the output. + (setq status + (call-process-shell-command command nil t)) + (when (and (not (zerop status)) + ;; Nonzero status can mean "no matches found". + (/= (point-min) (point-max))) + (user-error "Search failed with status %d: %s" status (buffer-string))) (goto-char (point-min)) (while (re-search-forward grep-re nil t) (push (list (string-to-number (match-string 2))