forked from misc/zsh-config
Gitinfo and pztrn prompt: untracked files, and speed improvements.
This commit is contained in:
parent
2fbecf063d
commit
0cd467b4b3
@ -2,28 +2,29 @@ GITINFO_BRANCH=""
|
|||||||
GITINFO_COMMIT_ID=""
|
GITINFO_COMMIT_ID=""
|
||||||
GITINFO_COMMIT_SHORTID=""
|
GITINFO_COMMIT_SHORTID=""
|
||||||
GITINFO_COMMIT_COUNT=0
|
GITINFO_COMMIT_COUNT=0
|
||||||
GITINFO_NEW_FILES=""
|
|
||||||
GITINFO_MODIFIED_FILES=""
|
|
||||||
GITINFO_DELETED_FILES=""
|
GITINFO_DELETED_FILES=""
|
||||||
|
GITINFO_MODIFIED_FILES=""
|
||||||
|
GITINFO_NEW_FILES=""
|
||||||
|
GITINFO_RECHECK=0
|
||||||
GITINFO_REMOTES=""
|
GITINFO_REMOTES=""
|
||||||
GITINFO_STASHES_COUNT=0
|
GITINFO_STASHES_COUNT=0
|
||||||
|
GITINFO_TOPLEVEL_DIR=""
|
||||||
|
GITINFO_UNTRACKED_COUNT=0
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Main function.
|
# Main function.
|
||||||
######################################################################
|
######################################################################
|
||||||
function gitinfo()
|
function gitinfo()
|
||||||
{
|
{
|
||||||
|
GITINFO_RECHECK=1
|
||||||
|
|
||||||
gitinfo_internal_checks
|
gitinfo_internal_checks
|
||||||
if [ $? -eq 1 ]; then
|
if [ $? -eq 1 ]; then
|
||||||
echo "This is not a git repository."
|
echo "This is not a git repository."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
gitinfo_get_branch
|
gitinfo_get_info
|
||||||
gitinfo_get_changes
|
|
||||||
gitinfo_get_commit_data
|
|
||||||
gitinfo_get_remotes
|
|
||||||
gitinfo_get_stashes
|
|
||||||
|
|
||||||
gitinfo_check
|
gitinfo_check
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
@ -32,6 +33,7 @@ function gitinfo()
|
|||||||
echo "| Branch | $fg[yellow]${GITINFO_BRANCH}$reset_color"
|
echo "| Branch | $fg[yellow]${GITINFO_BRANCH}$reset_color"
|
||||||
echo "| Commit | $fg[green]${GITINFO_COMMIT_ID}$reset_color"
|
echo "| Commit | $fg[green]${GITINFO_COMMIT_ID}$reset_color"
|
||||||
echo "| Commits count | ${GITINFO_COMMIT_COUNT}"
|
echo "| Commits count | ${GITINFO_COMMIT_COUNT}"
|
||||||
|
echo "| Changes | $fg[green]${GITINFO_NEW_FILES}$reset_color new, $fg[yellow]${GITINFO_MODIFIED_FILES}$reset_color modified, $fg[red]${GITINFO_DELETED_FILES}$reset_color deleted, $fg[gray]${GITINFO_UNTRACKED_COUNT}$reset_color untracked"
|
||||||
echo "| Stashes | ${GITINFO_STASHES_COUNT}"
|
echo "| Stashes | ${GITINFO_STASHES_COUNT}"
|
||||||
echo "======================================================================"
|
echo "======================================================================"
|
||||||
else
|
else
|
||||||
@ -45,7 +47,7 @@ function gitinfo()
|
|||||||
function gitinfo_chpwd()
|
function gitinfo_chpwd()
|
||||||
{
|
{
|
||||||
emulate -L zsh
|
emulate -L zsh
|
||||||
precmd_functions=(${precmd_functions[@]} "gitinfo_get_branch" "gitinfo_get_commit_data" "gitinfo_get_changes" "gitinfo_get_remotes" "gitinfo_get_stashes")
|
precmd_functions=(${precmd_functions[@]} "gitinfo_get_info")
|
||||||
}
|
}
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
@ -56,26 +58,32 @@ function gitinfo_check()
|
|||||||
{
|
{
|
||||||
curdir=`pwd`
|
curdir=`pwd`
|
||||||
|
|
||||||
if [ "${#GITINFO_BRANCH}" -eq 0 ]; then
|
GITINFO_TOPLEVEL_DIR=`git rev-parse --show-toplevel 2>/dev/null`
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
GITINFO_TOPLEVEL_DIR=""
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
objects=`ls .git/objects | grep -v "info\|pack" | wc -l`
|
if [ "${curdir/${GITINFO_TOPLEVEL_DIR}}" != "${curdir}" ]; then
|
||||||
if [ ${objects} -lt 1 ]; then
|
GITINFO_RECHECK=1
|
||||||
|
gitinfo_internal_checks
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
GITINFO_RECHECK=0
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Gets current directory's branch.
|
# Gets current repo branch.
|
||||||
######################################################################
|
######################################################################
|
||||||
function gitinfo_get_branch()
|
function gitinfo_get_branch()
|
||||||
{
|
{
|
||||||
gitinfo_internal_checks
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
GITINFO_BRANCH=""
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
GITINFO_BRANCH=`git branch | grep "*" | cut -d " " -f 2`
|
GITINFO_BRANCH=`git branch | grep "*" | cut -d " " -f 2`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,56 +92,74 @@ function gitinfo_get_branch()
|
|||||||
######################################################################
|
######################################################################
|
||||||
function gitinfo_get_changes()
|
function gitinfo_get_changes()
|
||||||
{
|
{
|
||||||
gitinfo_internal_checks
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
GITINFO_NEW_FILES=""
|
|
||||||
GITINFO_MODIFIED_FILES=""
|
|
||||||
GITINFO_DELETED_FILES=""
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
GITINFO_NEW_FILES=`LC_ALL=C git status | grep "new" | wc -l`
|
GITINFO_NEW_FILES=`LC_ALL=C git status | grep "new" | wc -l`
|
||||||
GITINFO_MODIFIED_FILES=`LC_ALL=C git status | grep "modified" | wc -l`
|
GITINFO_MODIFIED_FILES=`LC_ALL=C git status | grep "modified" | wc -l`
|
||||||
GITINFO_DELETED_FILES=`LC_ALL=C git status | grep "deleted" | wc -l`
|
GITINFO_DELETED_FILES=`LC_ALL=C git status | grep "deleted" | wc -l`
|
||||||
}
|
}
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Gets current directory's commit info, like long hash, short hash,
|
# Gets current repo commit info, like long hash, short hash,
|
||||||
# commits count.
|
# commits count.
|
||||||
######################################################################
|
######################################################################
|
||||||
function gitinfo_get_commit_data()
|
function gitinfo_get_commit_data()
|
||||||
{
|
{
|
||||||
gitinfo_internal_checks
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
GITINFO_COMMIT_SHORTID=""
|
|
||||||
GITINFO_COMMIT_ID=""
|
|
||||||
GITINFO_COMMIT_COUNT=""
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
GITINFO_COMMIT_SHORTID=`git rev-parse --short HEAD`
|
GITINFO_COMMIT_SHORTID=`git rev-parse --short HEAD`
|
||||||
GITINFO_COMMIT_ID=`git log | head -n 1 | cut -d " " -f 2`
|
GITINFO_COMMIT_ID=`git log | head -n 1 | cut -d " " -f 2`
|
||||||
GITINFO_COMMIT_COUNT=`git log | grep "commit " | wc -l`
|
GITINFO_COMMIT_COUNT=`git log | grep "commit " | wc -l`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# This function should be called to obtain neccessary data.
|
||||||
|
######################################################################
|
||||||
|
function gitinfo_get_info()
|
||||||
|
{
|
||||||
|
gitinfo_check
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
gitinfo_get_branch
|
||||||
|
gitinfo_get_changes
|
||||||
|
gitinfo_get_commit_data
|
||||||
|
gitinfo_get_remotes
|
||||||
|
gitinfo_get_stashes
|
||||||
|
gitinfo_get_untracked
|
||||||
|
else
|
||||||
|
GITINFO_BRANCH=""
|
||||||
|
GITINFO_COMMIT_ID=""
|
||||||
|
GITINFO_COMMIT_SHORTID=""
|
||||||
|
GITINFO_COMMIT_COUNT=0
|
||||||
|
GITINFO_DELETED_FILES=""
|
||||||
|
GITINFO_MODIFIED_FILES=""
|
||||||
|
GITINFO_NEW_FILES=""
|
||||||
|
GITINFO_RECHECK=0
|
||||||
|
GITINFO_REMOTES=""
|
||||||
|
GITINFO_STASHES_COUNT=0
|
||||||
|
GITINFO_TOPLEVEL_DIR=""
|
||||||
|
GITINFO_UNTRACKED_COUNT=0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Gets remotes
|
# Gets remotes
|
||||||
######################################################################
|
######################################################################
|
||||||
function gitinfo_get_remotes()
|
function gitinfo_get_remotes()
|
||||||
{
|
{
|
||||||
gitinfo_internal_checks
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
GITINFO_REMOTES=""
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
GITINFO_REMOTES=$(git remote -v | awk {' print $2 '} | uniq | wc -l)
|
GITINFO_REMOTES=$(git remote -v | awk {' print $2 '} | uniq | wc -l)
|
||||||
}
|
}
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Gets current directory's stashes count.
|
# Gets current repo stashes count.
|
||||||
######################################################################
|
######################################################################
|
||||||
function gitinfo_get_stashes()
|
function gitinfo_get_stashes()
|
||||||
{
|
{
|
||||||
|
GITINFO_STASHES_COUNT=`git stash list 2>/dev/null | wc -l`
|
||||||
|
}
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# Gets current repo untracked files and directories count.
|
||||||
|
######################################################################
|
||||||
|
function gitinfo_get_untracked()
|
||||||
|
{
|
||||||
|
GITINFO_UNTRACKED_COUNT=`LC_ALL=C git status | grep -v "be\ committed\|On\ branch\|nothing\ added\|Untracked\ files\|git\ add\|Your\ branch\|new\ file\|git\ reset\|nothing\ to\ commit\|not\ staged\|git\ checkout\|modified\:" | sed '/^$/d' | wc -l`
|
||||||
|
|
||||||
GITINFO_STASHES_COUNT=$(git stash list 2>/dev/null | wc -l)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
@ -141,14 +167,18 @@ function gitinfo_get_stashes()
|
|||||||
######################################################################
|
######################################################################
|
||||||
function gitinfo_internal_checks()
|
function gitinfo_internal_checks()
|
||||||
{
|
{
|
||||||
curdir=`pwd`
|
if [ ${GITINFO_RECHECK} -eq 0 ]; then
|
||||||
if [ ! -d "${curdir}/.git" ]; then
|
|
||||||
GITINFO_STASHES_COUNT=""
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
objects=`ls .git/objects | grep -v "info\|pack" | wc -l`
|
if [ ${#GITINFO_TOPLEVEL_DIR} -ne 0 ]; then
|
||||||
if [ ${objects} -lt 1 ]; then
|
objects=`ls ${GITINFO_TOPLEVEL_DIR}/.git/objects | grep -v "info\|pack" | wc -l`
|
||||||
|
if [ ${objects} -lt 1 ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
GITINFO_RECHECK=0
|
||||||
}
|
}
|
||||||
|
@ -77,10 +77,11 @@ prompt_pztrn_gitinfo()
|
|||||||
gitinfo_check
|
gitinfo_check
|
||||||
#echo $?
|
#echo $?
|
||||||
if [[ $? -eq 0 ]]; then
|
if [[ $? -eq 0 ]]; then
|
||||||
|
gitinfo_get_info
|
||||||
p_gitinfo_branch="$vars['brackets_start']$vars['usercolor']${GITINFO_BRANCH}$reset_color$vars['brackets_end']"
|
p_gitinfo_branch="$vars['brackets_start']$vars['usercolor']${GITINFO_BRANCH}$reset_color$vars['brackets_end']"
|
||||||
p_gitinfo_commit="$vars['brackets_start']%{$fg[magenta]%}${GITINFO_COMMIT_SHORTID}$reset_color (%{$fg[cyan]%}${GITINFO_COMMIT_COUNT}$reset_color)$vars['brackets_end']"
|
p_gitinfo_commit="$vars['brackets_start']%{$fg[magenta]%}${GITINFO_COMMIT_SHORTID}$reset_color (%{$fg[cyan]%}${GITINFO_COMMIT_COUNT}$reset_color)$vars['brackets_end']"
|
||||||
p_gitinfo_remotes="$vars['brackets_start']%{$fg[green]%}${GITINFO_REMOTES} remote(s)$reset_color$vars['brackets_end']"
|
p_gitinfo_remotes="$vars['brackets_start']%{$fg[green]%}${GITINFO_REMOTES} remote(s)$reset_color$vars['brackets_end']"
|
||||||
p_gitinfo_files="$vars['brackets_start']%{$fg[green]%}${GITINFO_NEW_FILES}$reset_color new, %{$fg[yellow]%}${GITINFO_MODIFIED_FILES}$reset_color modified, %{$fg[red]%}${GITINFO_DELETED_FILES} deleted$vars['brackets_end']"
|
p_gitinfo_files="$vars['brackets_start']%{$fg[green]%}${GITINFO_NEW_FILES}$reset_color new, %{$fg[yellow]%}${GITINFO_MODIFIED_FILES}$reset_color modified, %{$fg[red]%}${GITINFO_DELETED_FILES}$reset_color deleted, %{$fg[gray]%}${GITINFO_UNTRACKED_COUNT}$reset_color untracked$vars['brackets_end']"
|
||||||
p_gitinfo=$'\n'"$p_gitinfo_branch$p_gitinfo_commit$p_gitinfo_files$p_gitinfo_remotes"
|
p_gitinfo=$'\n'"$p_gitinfo_branch$p_gitinfo_commit$p_gitinfo_files$p_gitinfo_remotes"
|
||||||
else
|
else
|
||||||
p_gitinfo=""
|
p_gitinfo=""
|
||||||
|
Loading…
Reference in New Issue
Block a user