Show gitk-style coloured tag and head labels in log buffer.
This commit is contained in:
parent
ef3e0d0c5a
commit
f6956593bc
1 changed files with 49 additions and 0 deletions
49
magit.el
49
magit.el
|
@ -112,6 +112,16 @@ Many Magit faces inherit from this one by default."
|
||||||
"Face for highlighting the current item."
|
"Face for highlighting the current item."
|
||||||
:group 'magit)
|
:group 'magit)
|
||||||
|
|
||||||
|
(defface magit-log-tag-label
|
||||||
|
'((t :background "DarkGoldenRod"))
|
||||||
|
"Face for git tag labels shown in log buffer."
|
||||||
|
:group 'magit)
|
||||||
|
|
||||||
|
(defface magit-log-head-label
|
||||||
|
'((t :background "DarkGreen"))
|
||||||
|
"Face for branch head labels shown in log buffer."
|
||||||
|
:group 'magit)
|
||||||
|
|
||||||
;;; Macros
|
;;; Macros
|
||||||
|
|
||||||
(defmacro magit-with-refresh (&rest body)
|
(defmacro magit-with-refresh (&rest body)
|
||||||
|
@ -1319,6 +1329,31 @@ Please see the manual for a complete description of Magit.
|
||||||
|
|
||||||
;;; Logs and Commits
|
;;; Logs and Commits
|
||||||
|
|
||||||
|
(defun magit-parse-log-ref (refname)
|
||||||
|
"Return shortened and propertized version of full REFNAME, like
|
||||||
|
\"refs/remotes/origin/master\"."
|
||||||
|
(let ((face 'magit-log-head-label))
|
||||||
|
(cond ((string-match "^\\(tag: +\\)?refs/tags/\\(.+\\)" refname)
|
||||||
|
(setq refname (match-string 2 refname)
|
||||||
|
face 'magit-log-tag-label))
|
||||||
|
((string-match "^refs/remotes/\\(.+\\)" refname)
|
||||||
|
(setq refname (match-string 1 refname)))
|
||||||
|
((string-match "[^/]+$" refname)
|
||||||
|
(setq refname (match-string 0 refname))))
|
||||||
|
(propertize refname 'face face)))
|
||||||
|
|
||||||
|
(defun magit-parse-log-refs (refstring)
|
||||||
|
"Parse REFSTRING annotation from `git log --decorate'
|
||||||
|
output (for example: \"refs/remotes/origin/master,
|
||||||
|
refs/heads/master\") and return prettified string for displaying
|
||||||
|
in log buffer."
|
||||||
|
(mapconcat 'identity
|
||||||
|
(mapcar 'magit-parse-log-ref
|
||||||
|
(remove-if (lambda (refname)
|
||||||
|
(string-match "/HEAD$" refname))
|
||||||
|
(reverse (split-string refstring ", *" t))))
|
||||||
|
" - "))
|
||||||
|
|
||||||
(defun magit-wash-log-line ()
|
(defun magit-wash-log-line ()
|
||||||
(if (search-forward-regexp "[0-9a-fA-F]\\{40\\}" (line-end-position) t)
|
(if (search-forward-regexp "[0-9a-fA-F]\\{40\\}" (line-end-position) t)
|
||||||
(let ((commit (match-string-no-properties 0)))
|
(let ((commit (match-string-no-properties 0)))
|
||||||
|
@ -1326,6 +1361,12 @@ Please see the manual for a complete description of Magit.
|
||||||
(goto-char (match-beginning 0))
|
(goto-char (match-beginning 0))
|
||||||
(fixup-whitespace)
|
(fixup-whitespace)
|
||||||
(goto-char (line-beginning-position))
|
(goto-char (line-beginning-position))
|
||||||
|
(when (search-forward-regexp "^[|*\\/ ]+\\((\\(tag:.+?\\|refs/.+?\\))\\)"
|
||||||
|
(line-end-position) t)
|
||||||
|
(let ((refstring (match-string-no-properties 2)))
|
||||||
|
(delete-region (match-beginning 1) (match-end 1))
|
||||||
|
(insert (magit-parse-log-refs refstring)))
|
||||||
|
(goto-char (line-beginning-position)))
|
||||||
(magit-with-section commit 'commit
|
(magit-with-section commit 'commit
|
||||||
(magit-set-section-info commit)
|
(magit-set-section-info commit)
|
||||||
(forward-line)))
|
(forward-line)))
|
||||||
|
@ -2092,6 +2133,7 @@ Prefix arg means justify as well."
|
||||||
(magit-apply-diff-item item "--reverse"))))
|
(magit-apply-diff-item item "--reverse"))))
|
||||||
|
|
||||||
(defvar magit-have-graph 'unset)
|
(defvar magit-have-graph 'unset)
|
||||||
|
(defvar magit-have-decorate 'unset)
|
||||||
|
|
||||||
(defun magit-configure-have-graph ()
|
(defun magit-configure-have-graph ()
|
||||||
(if (eq magit-have-graph 'unset)
|
(if (eq magit-have-graph 'unset)
|
||||||
|
@ -2099,13 +2141,20 @@ Prefix arg means justify as well."
|
||||||
(message "result %s" res)
|
(message "result %s" res)
|
||||||
(setq magit-have-graph (eq res 0)))))
|
(setq magit-have-graph (eq res 0)))))
|
||||||
|
|
||||||
|
(defun magit-configure-have-decorate ()
|
||||||
|
(if (eq magit-have-decorate 'unset)
|
||||||
|
(let ((res (magit-shell-exit-code "git log --decorate --max-count=0")))
|
||||||
|
(setq magit-have-decorate (eq res 0)))))
|
||||||
|
|
||||||
(defun magit-refresh-log-buffer (range args)
|
(defun magit-refresh-log-buffer (range args)
|
||||||
(magit-configure-have-graph)
|
(magit-configure-have-graph)
|
||||||
|
(magit-configure-have-decorate)
|
||||||
(magit-create-buffer-sections
|
(magit-create-buffer-sections
|
||||||
(apply #'magit-insert-section 'log
|
(apply #'magit-insert-section 'log
|
||||||
(magit-rev-range-describe range "Commits")
|
(magit-rev-range-describe range "Commits")
|
||||||
'magit-wash-log nil
|
'magit-wash-log nil
|
||||||
`("git" "log" "--max-count=1000" "--pretty=oneline"
|
`("git" "log" "--max-count=1000" "--pretty=oneline"
|
||||||
|
,@(if magit-have-decorate (list "--decorate"))
|
||||||
,@(if magit-have-graph (list "--graph"))
|
,@(if magit-have-graph (list "--graph"))
|
||||||
,args))))
|
,args))))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue