feat: support custom git log format (#143)

* Add option to git log format tunnable

* Add FORGIT_LOG_FORMAT doc

* Fix shellchecks

* rename options misc

Co-authored-by: Wenxuan Zhang <wenxuangm@gmail.com>
This commit is contained in:
rlanore 2021-03-25 04:15:18 +01:00 committed by GitHub
parent 983a50140b
commit 8538c052bf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 4 deletions

View file

@ -117,6 +117,8 @@ For linux users `FORGIT_COPY_CMD` should be set to make copy work. Example: `FOR
### ⚙ Options
#### aliases
You can change the default aliases by defining these variables below.
(To disable all aliases, Set the `FORGIT_NO_ALIASES` flag.)
@ -134,6 +136,8 @@ forgit_rebase=grb
forgit_checkout_branch=gcb
```
#### pagers
Forgit will use the default configured pager from git (`core.pager`,
`pager.show`, `pager.diff`) but can be altered with the following environment
variables:
@ -144,6 +148,9 @@ variables:
| pager on `git show` | `FORGIT_SHOW_PAGER` | `git config pager.show` _or_ `$FORGIT_PAGER` |
| pager on `git diff` | `FORGIT_DIFF_PAGER` | `git config pager.diff` _or_ `$FORGIT_PAGER` |
| pager on `gitignore` | `FORGIT_IGNORE_PAGER` | `bat -l gitignore --color always` _or_ `cat` |
| git log format | `FORGIT_GLO_FORMAT` | `%C(auto)%h%d %s %C(black)%C(bold)%cr%reset` |
#### fzf options
You can add default fzf options for `forgit`, including keybinds, layout, etc.
(No need to repeat the options already defined in `FZF_DEFAULT_OPTS`)
@ -179,7 +186,7 @@ Complete loading order of fzf options is:
2. `FORGIT_FZF_DEFAULT_OPTS` (forgit global)
3. `FORGIT_CMD_FZF_OPTS` (command specific)
**Example**
Examples:
- `ctrl-d` to drop the selected stash but do not quit fzf (`gss` specific).
```
@ -194,6 +201,11 @@ FORGIT_LOG_FZF_OPTS='
--bind="ctrl-e:execute(echo {} |grep -Eo [a-f0-9]+ |head -1 |xargs git show |vim -)"
'
```
#### other options
| Option | Description | Default |
|---------------------|----------------|----------------------------------------------|
| `FORGIT_LOG_FORMAT` | git log format | `%C(auto)%h%d %s %C(black)%C(bold)%cr%reset` |
### 📦 Optional dependencies

View file

@ -12,6 +12,8 @@ forgit_show_pager=${FORGIT_SHOW_PAGER:-$(git config pager.show || echo "$forgit_
forgit_diff_pager=${FORGIT_DIFF_PAGER:-$(git config pager.diff || echo "$forgit_pager")}
forgit_ignore_pager=${FORGIT_IGNORE_PAGER:-$(hash bat &>/dev/null && echo 'bat -l gitignore --color=always' || echo 'cat')}
forgit_log_format=${FORGIT_LOG_FORMAT:-%C(auto)%h%d %s %C(black)%C(bold)%cr%reset}
# git commit viewer
forgit::log() {
forgit::inside_work_tree || return 1
@ -27,7 +29,7 @@ forgit::log() {
"
graph=--graph
[[ $FORGIT_LOG_GRAPH_ENABLE == false ]] && graph=
eval "git log $graph --color=always --format='%C(auto)%h%d %s %C(black)%C(bold)%cr%Creset' $* $forgit_emojify" |
eval "git log $graph --color=always --format='$forgit_log_format' $* $forgit_emojify" |
FZF_DEFAULT_OPTS="$opts" fzf --preview="$cmd"
}
@ -168,7 +170,7 @@ forgit::rebase() {
local cmd preview opts graph files commit
graph=--graph
[[ $FORGIT_LOG_GRAPH_ENABLE == false ]] && graph=
cmd="git log $graph --color=always --format='%C(auto)%h%d %s %C(black)%C(bold)%cr%Creset' $* $forgit_emojify"
cmd="git log $graph --color=always --format='$forgit_log_format' $* $forgit_emojify"
files=$(sed -nE 's/.* -- (.*)/\1/p' <<< "$*") # extract files parameters for `git show` command
preview="echo {} |grep -Eo '[a-f0-9]+' |head -1 |xargs -I% git show --color=always % -- $files | $forgit_show_pager"
opts="
@ -187,7 +189,7 @@ forgit::checkout::branch() {
[[ $# -ne 0 ]] && { git checkout -b "$*"; return $?; }
local cmd preview opts
cmd="git branch --color=always --verbose --all --format=\"%(if:equals=HEAD)%(refname:strip=3)%(then)%(else)%(refname:short)%(end)\" $forgit_emojify | sed '/^$/d'"
preview="git log {} --graph --pretty=format:'%C(auto)%h%d %s %C(black)%C(bold)%cr%Creset' --color=always --abbrev-commit --date=relative"
preview="git log {} --graph --pretty=format:'$forgit_log_format' --color=always --abbrev-commit --date=relative"
opts="
$FORGIT_FZF_DEFAULT_OPTS
+s +m --tiebreak=index --ansi