From 0389ee35965add0d260f83cd145cb6fe20016aa2 Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Thu, 12 Jun 2008 17:56:51 +0200 Subject: Anti-concurrential git-status for prompt update... When a .git folder contains to many blobs and takes too long time to get the status, instead of hanging up every shell, just let one of these (the first, of course) getting the current git status, the others will take the previous one, else a 'running' color status. --- 01_Functions.zsh | 25 +++++++++++++++++++++++++ 11_Colors.zsh | 1 + 2 files changed, 26 insertions(+) diff --git a/01_Functions.zsh b/01_Functions.zsh index d4c77bf..be04aba 100644 --- a/01_Functions.zsh +++ b/01_Functions.zsh @@ -84,6 +84,27 @@ get_git_branch () get_git_status () { local my_git_status cached not_up_to_date managment_folder + local lockfile previous + + lockfile="$(git rev-parse --git-dir)/.zsh.get_git_status.lock" + previous="$(git rev-parse --git-dir)/.zsh.get_git_status.prev" + + if [ -e $lockfile ] ; then + + my_git_status=$git_colors[running] + + [ "$DEBUG" == "yes" ] && echo >&2 "lockfile $lockfile already present.." + if [ -e $previous ] ; then + [ "$DEBUG" == "yes" ] && eecho >&2 "getting previous status.." + my_git_status=$(cat $previous) + fi + + echo $my_git_status + return + fi + + [ "$DEBUG" == "yes" ] && echo >&2 "creating $lockfile.." + touch $lockfile if [ "$(git-rev-parse --git-dir)" == "." ] ; then echo "$git_colors[managment_folder]" @@ -107,6 +128,10 @@ get_git_status () my_git_status="$git_colors[up_to_date]" fi + [ "$DEBUG" == "yes" ] && echo >&2 "removing $lockfile.." + echo $my_git_status > $previous + rm -f $lockfile + echo $my_git_status } diff --git a/11_Colors.zsh b/11_Colors.zsh index 73f94e2..a610064 100644 --- a/11_Colors.zsh +++ b/11_Colors.zsh @@ -73,6 +73,7 @@ set_prompt_colors () git_colors[cached_and_not_up_to_date]="$prompt_colors[not_up_to_date];$color[bold]" git_colors[not_up_to_date]="$prompt_colors[not_up_to_date];$color[normal]" # git changes in working tree git_colors[up_to_date]="$prompt_colors[up_to_date]" # git up-to-date + git_colors[running]="$color[magenta]" # currently running git-status.. } set_prompt_colors -- cgit v1.2.3