Files
dotfiles/tmux/powerline/segments/vcs_modified.sh
2019-01-12 18:22:02 +01:00

71 lines
1.6 KiB
Bash
Executable File

# This checks if the current branch is ahead of
# or behind the remote branch with which it is tracked
# Source lib to get the function get_tmux_pwd
source "${TMUX_POWERLINE_DIR_LIB}/tmux_adapter.sh"
mod_symbol="﹢"
run_segment() {
tmux_path=$(get_tmux_cwd)
cd "$tmux_path"
stats=""
if [ -n "${git_stats=$(__parse_git_stats)}" ]; then
stats="$git_stats"
elif [ -n "${svn_stats=$(__parse_svn_stats)}" ]; then
stats="$svn_stats"
elif [ -n "${hg_stats=$(__parse_hg_stats)}" ]; then
stats="$hg_stats"
fi
if [[ -n "$stats" && $stats -gt 0 ]]; then
echo "${mod_symbol}${stats}"
fi
}
__parse_git_stats(){
type git >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# check if git
[[ -z $(git rev-parse --git-dir 2> /dev/null) ]] && return
# return the number of modified but not staged items
modified=$(git status -s | cut -c 2 | awk '$1 != "" && $1 != "?" { print $1 }' | wc -l)
echo $modified
}
__parse_hg_stats(){
type hg >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
# not yet implemented
}
__parse_svn_stats() {
type svn >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
return
fi
local svn_info=$(svn info 2>/dev/null)
if [ -z "${svn_info}" ]; then
return
fi
local svn_wcroot=$(echo "${svn_info}" | sed -ne 's#^Working Copy Root Path: ##p')
local svn_st=$(cd "${svn_wcroot}"; svn st)
local modified=$(echo "${svn_st}" | egrep '^M' | wc -l)
local conflicted=$(echo "${svn_st}" | egrep '^!?\s*C' | wc -l)
#print
if [[ $modified -gt 0 ]] ; then
local ret="#[fg=colour${TMUX_POWERLINE_CUR_SEGMENT_FG}${modified}"
fi
if [[ $conflicted -gt 0 ]] ; then
local ret="#[fg=colour${svn_colour}${conflicted} ${ret}"
fi
echo "${ret}"
}