]> git.eshelyaron.com Git - emacs.git/commitdiff
(grep-find-use-xargs): Use explicit value `exec'
authorKim F. Storm <storm@cua.dk>
Wed, 23 Aug 2006 23:23:02 +0000 (23:23 +0000)
committerKim F. Storm <storm@cua.dk>
Wed, 23 Aug 2006 23:23:02 +0000 (23:23 +0000)
to mean "use find -exec"; nil now unambiguously means auto-detect.
(grep-compute-defaults): Set grep-find-use-xargs to `exec' if not `gnu'.
Use shell-quote-argument to build grep-find-command and grep-find-template.
(rgrep): Use shell-quote-argument to properly quote arguments to find.
Reported by Tom Seddon.

lisp/progmodes/grep.el

index a939d54b3c9fb8457d51718f405271b06ec8654e..48692f9742f6a200c41b8e9be605bdee3da30d58 100644 (file)
@@ -335,7 +335,7 @@ This variable's value takes effect when `grep-compute-defaults' is called.")
 (defvar grep-find-use-xargs nil
   "Whether \\[grep-find] uses the `xargs' utility by default.
 
-If nil, it uses `find -exec'; if `gnu', it uses `find -print0' and `xargs -0';
+If `exec', it uses `find -exec'; if `gnu', it uses `find -print0' and `xargs -0';
 if not nil and not `gnu', it uses `find -print' and `xargs'.
 
 This variable's value takes effect when `grep-compute-defaults' is called.")
@@ -419,21 +419,29 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
              (format "%s <C> %s <R> <F>" grep-program grep-options)))
       (unless grep-find-use-xargs
        (setq grep-find-use-xargs
-             (if (and
-                  (grep-probe find-program `(nil nil nil ,null-device "-print0"))
-                  (grep-probe "xargs" `(nil nil nil "-0" "-e" "echo")))
-                 'gnu)))
+             (cond
+              ((and
+                (grep-probe find-program `(nil nil nil ,null-device "-print0"))
+                (grep-probe "xargs" `(nil nil nil "-0" "-e" "echo")))
+               'gnu)
+              (t
+               'exec))))
       (unless grep-find-command
        (setq grep-find-command
              (cond ((eq grep-find-use-xargs 'gnu)
                     (format "%s . -type f -print0 | xargs -0 -e %s"
                             find-program grep-command))
-                   (grep-find-use-xargs
+                   ((eq grep-find-use-xargs 'exec)
+                    (let ((cmd0 (format "%s . -type f -exec %s"
+                                        find-program grep-command)))
+                      (cons
+                       (format "%s {} %s %s"
+                               cmd0 null-device
+                               (shell-quote-argument ";"))
+                       (1+ (length cmd0)))))
+                   (t
                     (format "%s . -type f -print | xargs %s"
-                            find-program grep-command))
-                   (t (cons (format "%s . -type f -exec %s {} %s \\;"
-                                    find-program grep-command null-device)
-                            (+ 22 (length grep-command)))))))
+                            find-program grep-command)))))
       (unless grep-find-template
        (setq grep-find-template
              (let ((gcmd (format "%s <C> %s <R>"
@@ -441,11 +449,13 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
                (cond ((eq grep-find-use-xargs 'gnu)
                       (format "%s . <X> -type f <F> -print0 | xargs -0 -e %s"
                               find-program gcmd))
-                     (grep-find-use-xargs
+                     ((eq grep-find-use-xargs 'exec)
+                      (format "%s . <X> -type f <F> -exec %s {} %s %s"
+                              find-program gcmd null-device
+                              (shell-quote-argument ";")))
+                     (t
                       (format "%s . <X> -type f <F> -print | xargs %s"
-                              find-program gcmd))
-                     (t (format "%s . <X> -type f <F> -exec %s {} %s \\;"
-                                find-program gcmd null-device))))))))
+                              find-program gcmd))))))))
   (unless (or (not grep-highlight-matches) (eq grep-highlight-matches t))
     (setq grep-highlight-matches
          (with-temp-buffer
@@ -736,18 +746,26 @@ This command shares argument histories with \\[lgrep] and \\[grep-find]."
       (let ((command (grep-expand-template
                      grep-find-template
                      regexp
-                     (concat "\\( -name "
+                     (concat (shell-quote-argument "(")
+                             " -name "
                              (mapconcat #'shell-quote-argument
                                         (split-string files)
                                         " -o -name ")
-                             " \\)")
+                             " "
+                             (shell-quote-argument ")"))
                       dir
                       (and grep-find-ignored-directories
-                           (concat "\\( -path '*/"
-                                   (mapconcat #'identity
+                           (concat (shell-quote-argument "(")
+                                   ;; we should use shell-quote-argument here
+                                   " -path "
+                                   (mapconcat #'(lambda (dir)
+                                                  (shell-quote-argument
+                                                   (concat "*/" dir)))
                                               grep-find-ignored-directories
-                                              "' -o -path '*/")
-                                   "' \\) -prune -o ")))))
+                                              " -o -path ")
+                                   " "
+                                   (shell-quote-argument ")")
+                                   " -prune -o ")))))
        (when command
          (if current-prefix-arg
              (setq command