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