diff options
| author | Juri Linkov <juri@linkov.net> | 2019-07-16 01:27:19 +0300 | 
|---|---|---|
| committer | Juri Linkov <juri@linkov.net> | 2019-07-16 01:27:19 +0300 | 
| commit | cdec5a17fd148098e535b4168de0169082176bbd (patch) | |
| tree | dc9b71991bdb7c1ca5b9f497f0167f9ddbf83243 /lisp | |
| parent | 6253541c76a449780815f4a8fd75a9aa70b931ae (diff) | |
| download | emacs-cdec5a17fd148098e535b4168de0169082176bbd.tar.gz | |
* lisp/vc/vc.el (vc-log-search): New command (bug#36644).
* lisp/vc/vc-git.el (vc-git-log-search): New function.
(vc-git-log-view-mode): Check vc-log-view-type for log-search.
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/vc/vc-git.el | 20 | ||||
| -rw-r--r-- | lisp/vc/vc.el | 18 | 
2 files changed, 36 insertions, 2 deletions
| diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index 8b828563325..5b61a7b4bc2 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -1073,6 +1073,22 @@ If LIMIT is a revision string, use it as an end-revision."  			"@{upstream}"  		      remote-location)))) +(defun vc-git-log-search (buffer pattern) +  (let ((args `("log" "--no-color" "-i" +                ,(format "--grep=%s" +                         (or (and pattern (shell-quote-argument pattern)) +                             ""))))) +    (when current-prefix-arg +      (setq args (cdr (split-string +		       (read-shell-command +                        "Search log with command: " +                        (format "%s %s" vc-git-program +                                (mapconcat 'identity args " ")) +                        'vc-git-history) +		       " " t)))) +    (vc-setup-buffer buffer) +    (apply 'vc-git-command buffer 'async nil args))) +  (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 +1105,7 @@ If LIMIT is a revision string, use it as an end-revision."    (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 +1114,7 @@ If LIMIT is a revision string, use it as an end-revision."      (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 diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index eb6d6d331fe..a68beb5e505 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 string PATTERN in the revision log. +;;  ;; - log-view-mode ()  ;;  ;;   Mode to use for the output of print-log.  This defaults to @@ -2527,6 +2531,20 @@ When called interactively with a prefix argument, prompt for REMOTE-LOCATION."                                     "*vc-outgoing*" 'log-outgoing)))  ;;;###autoload +(defun vc-log-search (pattern) +  "Search a log of changes for PATTERN string. +Display all entries that match log messages in long format. +With a prefix argument, ask for a command to run that will output +log entries." +  (interactive (list (unless current-prefix-arg +                       (read-regexp "Search log with pattern: ")))) +  (let ((backend (vc-deduce-backend))) +    (unless backend +      (error "Buffer is not version controlled")) +    (vc-incoming-outgoing-internal backend pattern +                                   "*vc-search-log*" 'log-search))) + +;;;###autoload  (defun vc-log-mergebase (_files rev1 rev2)    "Show a log of changes between the merge base of REV1 and REV2 revisions.  The merge base is a common ancestor between REV1 and REV2 revisions." | 
