[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master adab07d 101/399: counsel.el: Simplify counsel-git-grep
From: |
Oleh Krehel |
Subject: |
[elpa] master adab07d 101/399: counsel.el: Simplify counsel-git-grep |
Date: |
Sat, 20 Jul 2019 14:56:57 -0400 (EDT) |
branch: master
commit adab07d404cffda9b80c4604df38aac5a5c16301
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>
counsel.el: Simplify counsel-git-grep
Now all filtering will be done by git-grep, so it will work exactly
like `counsel-ag'.
Fixes #1402
Fixes #1912
---
counsel.el | 148 +++++--------------------------------------------------------
1 file changed, 10 insertions(+), 138 deletions(-)
diff --git a/counsel.el b/counsel.el
index f5bd477..c09743b 100644
--- a/counsel.el
+++ b/counsel.el
@@ -1265,12 +1265,6 @@ INITIAL-INPUT can be given as the initial minibuffer
input."
(defvar counsel-git-grep-cmd nil
"Store the command for `counsel-git-grep'.")
-(defvar counsel--git-grep-count nil
- "Store the line count in current repository.")
-
-(defvar counsel--git-grep-count-threshold 20000
- "The maximum threshold beyond which repositories are considered large.")
-
(defvar counsel-git-grep-history nil
"History for `counsel-git-grep'.")
@@ -1283,18 +1277,14 @@ INITIAL-INPUT can be given as the initial minibuffer
input."
Typical value: '(recenter)."
:type 'hook)
-(defun counsel-git-grep-function (str &optional _pred &rest _unused)
+(defun counsel-git-grep-function (string)
"Grep in the current Git repository for STRING."
(or
- (and (> counsel--git-grep-count counsel--git-grep-count-threshold)
- (ivy-more-chars))
- (let* ((default-directory (ivy-state-directory ivy-last))
- (cmd (format counsel-git-grep-cmd
- (setq ivy--old-re (ivy--regex str t)))))
- (if (<= counsel--git-grep-count counsel--git-grep-count-threshold)
- (split-string (shell-command-to-string cmd) "\n" t)
- (counsel--gg-candidates (ivy--regex str))
- nil))))
+ (ivy-more-chars)
+ (let ((cmd (format counsel-git-grep-cmd
+ (setq ivy--old-re (ivy--regex string t)))))
+ (counsel--async-command cmd)
+ nil)))
(defun counsel-git-grep-action (x)
"Go to occurrence X in current Git repository."
@@ -1313,31 +1303,6 @@ Typical value: '(recenter)."
(swiper--cleanup)
(swiper--add-overlays (ivy--regex ivy-text))))))
-(defun counsel-git-grep-matcher (regexp candidates)
- "Return REGEXP matching CANDIDATES for `counsel-git-grep'."
- (or (and (equal regexp ivy--old-re)
- ivy--old-cands)
- (prog1
- (setq ivy--old-cands
- (cl-remove-if-not
- (lambda (x)
- (ignore-errors
- (when (string-match "^[^:]+:[^:]+:" x)
- (setq x (substring x (match-end 0)))
- (if (stringp regexp)
- (string-match regexp x)
- (let ((res t))
- (dolist (re regexp)
- (setq res
- (and res
- (ignore-errors
- (if (cdr re)
- (string-match (car re) x)
- (not (string-match (car re)
x)))))))
- res)))))
- candidates))
- (setq ivy--old-re regexp))))
-
(defun counsel-git-grep-transformer (str)
"Higlight file and line number in STR."
(when (string-match "\\`\\([^:]+\\):\\([^:]+\\):" str)
@@ -1411,30 +1376,6 @@ COMMAND fails. Obey file handlers based on
`default-directory'."
(signal (car status) (cdr status))))
(delete-file stderr))))
-(define-obsolete-variable-alias 'counsel--git-grep-count-func
- 'counsel-git-grep-count-function "0.11.0")
-(define-obsolete-function-alias 'counsel--git-grep-count-func-default
- 'counsel-git-grep-count-function-du "0.11.0")
-
-(defun counsel-git-grep-count-function-du ()
- "Default function to calculate `counsel--git-grep-count'."
- (or (unless (eq system-type 'windows-nt)
- (ignore-errors
- (let ((git-dir (counsel--call "git" "rev-parse" "--git-dir")))
- (read (counsel--call "du" "-s" git-dir)))))
- 0))
-
-(defcustom counsel-git-grep-count-function #'counsel-git-grep-count-function-du
- "Function to calculate `counsel--git-grep-count' for `counsel-git-grep'."
- :type '(radio
- (function-item :doc "Always filter with Grep"
- (lambda () most-positive-fixnum))
- (function-item :doc "Always filter with Emacs"
- (lambda () 0))
- (function-item
- :doc "Choose between Grep or Emacs based on .git directory size"
- counsel-git-grep-count-function-du)))
-
;;;###autoload
(defun counsel-git-grep (&optional cmd initial-input)
"Grep for a string in the current Git repository.
@@ -1452,23 +1393,15 @@ INITIAL-INPUT can be given as the initial minibuffer
input."
#'counsel-git-grep-proj-function
#'counsel-git-grep-function))
(unwind-function
- (if proj
- (lambda ()
- (counsel-delete-process)
- (swiper--cleanup))
- (lambda ()
- (swiper--cleanup))))
+ (lambda ()
+ (counsel-delete-process)
+ (swiper--cleanup)))
(default-directory (if proj
(car proj)
(counsel-locate-git-root))))
- (setq counsel--git-grep-count (funcall counsel-git-grep-count-function))
(ivy-read "git grep: " collection-function
:initial-input initial-input
- :matcher #'counsel-git-grep-matcher
- :dynamic-collection (or proj
- (>
- counsel--git-grep-count
- counsel--git-grep-count-threshold))
+ :dynamic-collection t
:keymap counsel-git-grep-map
:action #'counsel-git-grep-action
:unwind unwind-function
@@ -1497,67 +1430,6 @@ INITIAL-INPUT can be given as the initial minibuffer
input."
(setq ivy--all-candidates
(all-completions "" 'counsel-git-grep-function))))
-(defvar counsel-gg-state nil
- "The current state of candidates / count sync.")
-
-(defun counsel--gg-candidates (regex)
- "Return git grep candidates for REGEX."
- (setq counsel-gg-state -2)
- (counsel--gg-count regex)
- (let ((default-directory (ivy-state-directory ivy-last)))
- (set-process-filter
- (counsel--async-command (concat (format counsel-git-grep-cmd regex)
- " | head -n 200")
- #'counsel--gg-sentinel)
- nil)))
-
-(defun counsel--gg-sentinel (process _msg)
- "Sentinel function for a `counsel-git-grep' PROCESS."
- (when (eq (process-status process) 'exit)
- (cl-case (process-exit-status process)
- ((0 141)
- (with-current-buffer (process-buffer process)
- (setq ivy--all-candidates
- (or (split-string (buffer-string) "\n" t)
- '("")))
- (setq ivy--old-cands ivy--all-candidates))
- (when (zerop (cl-incf counsel-gg-state))
- (ivy--exhibit)))
- (1
- (setq ivy--all-candidates '("Error"))
- (setq ivy--old-cands ivy--all-candidates)
- (ivy--exhibit)))))
-
-(defun counsel--gg-count-sentinel (process _msg)
- "Sentinel function for a `counsel--gg-count' PROCESS."
- (when (and (eq (process-status process) 'exit)
- (zerop (process-exit-status process)))
- (with-current-buffer (process-buffer process)
- (setq ivy--full-length (string-to-number (buffer-string))))
- (when (zerop (cl-incf counsel-gg-state))
- (ivy--exhibit))))
-
-(defun counsel--gg-count (regex &optional no-async)
- "Count the number of results matching REGEX in `counsel-git-grep'.
-The command to count the matches is called asynchronously.
-If NO-ASYNC is non-nil, do it synchronously instead."
- (let ((default-directory (ivy-state-directory ivy-last))
- (cmd (concat
- (format (replace-regexp-in-string
- "--full-name" "-c"
- counsel-git-grep-cmd)
- ;; "git grep -i -c '%s'"
- (replace-regexp-in-string
- "-" "\\\\-"
- (replace-regexp-in-string "'" "''" regex)))
- " | sed 's/.*:\\(.*\\)/\\1/g' | awk '{s+=$1} END {print s}'")))
- (if no-async
- (string-to-number (shell-command-to-string cmd))
- (set-process-filter
- (counsel--async-command cmd #'counsel--gg-count-sentinel
- nil " *counsel-gg-count*")
- nil))))
-
(defun counsel--normalize-grep-match (str)
;; Prepend ./ if necessary:
(unless (ivy--starts-with-dotslash str)
- [elpa] master 9ce9e4e 090/399: counsel.el (counsel-compile-phony-pattern): Fixup, (continued)
- [elpa] master 9ce9e4e 090/399: counsel.el (counsel-compile-phony-pattern): Fixup, Oleh Krehel, 2019/07/20
- [elpa] master 1046fc7 095/399: ivy.el (ivy-avy): Use non-obsolete avy-process, Oleh Krehel, 2019/07/20
- [elpa] master 27add46 092/399: Anchor pcre lookaround patterns to bol, Oleh Krehel, 2019/07/20
- [elpa] master 3e1e905 083/399: Fix virtual buffers in counsel-switch-buffer, Oleh Krehel, 2019/07/20
- [elpa] master cbdc9c9 078/399: counsel.el (counsel--compile-get-make-targets): Rename, Oleh Krehel, 2019/07/20
- [elpa] master e7146e5 089/399: counsel.el (counsel-git-grep-count-function): Fix, Oleh Krehel, 2019/07/20
- [elpa] master b180abf 087/399: counsel.el (counsel-compile): clean-up get-make-targets, Oleh Krehel, 2019/07/20
- [elpa] master 456e575 093/399: Don't bury killed buffers after counsel-switch-buffer, Oleh Krehel, 2019/07/20
- [elpa] master 1c84179 098/399: counsel.el (counsel-rg): Add an example to the doc, Oleh Krehel, 2019/07/20
- [elpa] master b154260 097/399: counsel.el (counsel-grep): Fix TRAMP problems, Oleh Krehel, 2019/07/20
- [elpa] master adab07d 101/399: counsel.el: Simplify counsel-git-grep,
Oleh Krehel <=
- [elpa] master 5b4dbbc 096/399: ivy.el: Silence byte-compiler, Oleh Krehel, 2019/07/20
- [elpa] master 3954bfe 081/399: counsel.el (counsel-compile): Don't modify compilation-start-hook permanently, Oleh Krehel, 2019/07/20
- [elpa] master d92d43a 085/399: counsel.el (counsel-compile-root-functions): Tidy, Oleh Krehel, 2019/07/20
- [elpa] master 2356a1d 091/399: ivy-test.el (counsel--grep-regex): Extend test, Oleh Krehel, 2019/07/20
- [elpa] master cdd7ada 094/399: counsel.el (counsel-url-expand): Avoid null error, Oleh Krehel, 2019/07/20
- [elpa] master 089107a 099/399: counsel.el (counsel-ag): Add a keyword argument caller, Oleh Krehel, 2019/07/20
- [elpa] master 776fbb7 103/399: Make ivy-switch-buffer-occur work with multi-pass regex builders, Oleh Krehel, 2019/07/20
- [elpa] master 8b4c939 100/399: counsel.el (counsel-cd): Add, Oleh Krehel, 2019/07/20
- [elpa] master 0c8cfe8 106/399: ivy-hydra.el (ivy-dispatching-done-idle): Add, Oleh Krehel, 2019/07/20
- [elpa] master 4c52362 110/399: swiper.el (swiper-occur): Make wgrep work for narrowed buffers, Oleh Krehel, 2019/07/20