#! /usr/bin/zsh git_parse() { psvar=() local git_dir ref base_dir sub_dir action branch git_dir=$(git rev-parse --git-dir 2> /dev/null) || return base_dir=${$(readlink -f "$git_dir/..")/$HOME/'~'} sub_dir=$(git rev-parse --show-prefix) sub_dir=${sub_dir%/} ref=$(git symbolic-ref HEAD 2> /dev/null) || return psvar[3]="" if [ -d "$git_dir/../.dotest" ]; then if [ -f "$git_dir/../.dotest/rebasing" ]; then psvar[3]="-rebase" elif [ -f "$git_dir/../.dotest/applying" ]; then psvar[3]="-am" else psvar[3]="-am-rebase" fi branch="$ref" elif [ -f "$git_dir/.dotest-merge/interactive" ]; then psvar[3]="-rebase-i" branch="$(cat "$git_dir/.dotest-merge/head-name")" elif [ -d "$git_dir/.dotest-merge" ]; then psvar[3]="-rebase-m" branch="$(cat "$git_dir/.dotest-merge/head-name")" elif [ -f "$git_dir/MERGE_HEAD" ]; then psvar[3]="-merge" branch="$ref" else test -f "$git_dir/BISECT_LOG" && psvar[3]="bisect" branch="$(git symbolic-ref HEAD 2>/dev/null)" || \ branch="$(git describe --exact-match HEAD 2>/dev/null)" || \ branch="$(cut -c1-7 "$git_dir/HEAD")..." fi # Got here, we're in git psvar[4]=${branch#refs/heads/} psvar[5]=${base_dir} psvar[6]=${sub_dir} } precmd_functions+='git_parse'