[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#36644: Git log search
From: |
Juri Linkov |
Subject: |
bug#36644: Git log search |
Date: |
Sun, 14 Jul 2019 01:27:15 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (x86_64-pc-linux-gnu) |
It would be very useful to have the command to grep git logs,
for instance, to search commits by bug numbers in format "bug#36789"
and many other such use cases:
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index eb6d6d331f..d39af516a9 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -337,6 +337,10 @@
;; Insert in BUFFER the revision log for the changes that will be
;; received when performing a pull operation from REMOTE-LOCATION.
;;
+;; - log-search (pattern)
+;;
+;; Search for PATTERN in the revision log.
+;;
;; - log-view-mode ()
;;
;; Mode to use for the output of print-log. This defaults to
@@ -2526,6 +2530,16 @@ vc-log-outgoing
(vc-incoming-outgoing-internal backend (or remote-location "")
"*vc-outgoing*" 'log-outgoing)))
+;;;###autoload
+(defun vc-log-search (pattern)
+ "Search a log of changes for PATTERN."
+ (interactive (list (read-regexp "Log search pattern: ")))
+ (let ((backend (vc-deduce-backend)))
+ (unless backend
+ (error "Buffer is not version controlled"))
+ (vc-incoming-outgoing-internal backend pattern
+ "*vc-search*" 'log-search)))
+
;;;###autoload
(defun vc-log-mergebase (_files rev1 rev2)
"Show a log of changes between the merge base of REV1 and REV2 revisions.
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 8b82856332..d1d6a7408e 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -1073,6 +1075,13 @@ vc-git-log-incoming
"@{upstream}"
remote-location))))
+(defun vc-git-log-search (buffer pattern)
+ (vc-setup-buffer buffer)
+ (vc-git-command
+ buffer 'async nil
+ "log"
+ "--no-color" "-i" (format "--grep=%s" pattern)))
+
(defun vc-git-mergebase (rev1 &optional rev2)
(unless rev2 (setq rev2 "HEAD"))
(string-trim-right (vc-git--run-command-string nil "merge-base" rev1 rev2)))
@@ -1089,7 +1100,7 @@ vc-git-log-view-mode
(set (make-local-variable 'log-view-file-re) regexp-unmatchable)
(set (make-local-variable 'log-view-per-file-logs) nil)
(set (make-local-variable 'log-view-message-re)
- (if (not (eq vc-log-view-type 'long))
+ (if (not (memq vc-log-view-type '(long log-search)))
(cadr vc-git-root-log-format)
"^commit *\\([0-9a-z]+\\)"))
;; Allow expanding short log entries.
@@ -1098,7 +1109,7 @@ vc-git-log-view-mode
(set (make-local-variable 'log-view-expanded-log-entry-function)
'vc-git-expanded-log-entry))
(set (make-local-variable 'log-view-font-lock-keywords)
- (if (not (eq vc-log-view-type 'long))
+ (if (not (memq vc-log-view-type '(long log-search)))
(list (cons (nth 1 vc-git-root-log-format)
(nth 2 vc-git-root-log-format)))
(append
- bug#36644: Git log search,
Juri Linkov <=
- bug#36644: Git log search, Dmitry Gutov, 2019/07/15
- bug#36644: Git log search, Juri Linkov, 2019/07/15
- bug#36644: Git log search, Dmitry Gutov, 2019/07/16
- bug#36644: Git log search, Andreas Schwab, 2019/07/16
- bug#36644: Git log search, Robert Pluim, 2019/07/16
- bug#36644: Git log search, Juri Linkov, 2019/07/16
- bug#36644: Git log search, Noam Postavsky, 2019/07/16
- bug#36644: Git log search, Juri Linkov, 2019/07/18
- bug#36644: Git log search, Dmitry Gutov, 2019/07/24
- bug#36644: Git log search, Juri Linkov, 2019/07/16