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