]> git.alrj.org Git - zsh.d.git/blob - S60_git
Initial commit
[zsh.d.git] / S60_git
1 #! /usr/bin/zsh
2
3 git_parse() {
4
5     psvar=()
6
7     local git_dir ref base_dir sub_dir action branch
8     git_dir=$(git rev-parse --git-dir 2> /dev/null) || return
9
10     base_dir=${$(readlink -f "$git_dir/..")/$HOME/'~'}
11
12     sub_dir=$(git rev-parse --show-prefix)
13     sub_dir=${sub_dir%/}
14     ref=$(git symbolic-ref HEAD 2> /dev/null) || return
15
16     psvar[3]=""
17
18     if [ -d "$git_dir/../.dotest" ]; then
19       if [ -f "$git_dir/../.dotest/rebasing" ]; then
20         psvar[3]="-rebase"
21       elif [ -f "$git_dir/../.dotest/applying" ]; then
22         psvar[3]="-am"
23       else
24         psvar[3]="-am-rebase"
25       fi
26       branch="$ref"
27     elif [ -f "$git_dir/.dotest-merge/interactive" ]; then
28       psvar[3]="-rebase-i"
29       branch="$(cat "$git_dir/.dotest-merge/head-name")"
30     elif [ -d "$git_dir/.dotest-merge" ]; then
31       psvar[3]="-rebase-m"
32       branch="$(cat "$git_dir/.dotest-merge/head-name")"
33     elif [ -f "$git_dir/MERGE_HEAD" ]; then
34       psvar[3]="-merge"
35       branch="$ref"
36     else
37       test -f "$git_dir/BISECT_LOG" && psvar[3]="bisect"
38       branch="$(git symbolic-ref HEAD 2>/dev/null)" || \
39         branch="$(git describe --exact-match HEAD 2>/dev/null)" || \
40         branch="$(cut -c1-7 "$git_dir/HEAD")..."
41     fi
42
43     # Got here, we're in git
44     psvar[4]=${branch#refs/heads/}
45     psvar[5]=${base_dir}
46     psvar[6]=${sub_dir}
47 }
48
49 precmd_functions+='git_parse'