summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugues Hiegel <hugues@hiegel.fr>2012-03-08 12:29:44 +0100
committerHugues Hiegel <hugues.hiegel@qosmos.com>2012-03-08 13:35:08 +0100
commitdc2abe342ec7e0d674ea7c510566aba5a6b37f1e (patch)
tree0266c374f5e978e6b2992974027a6561fe5d6573
parentf61008d24c79c105c77682b2f7ce1c40b32744dc (diff)
Get backs vcs_info.
-rw-r--r--01_Internal.zsh195
-rw-r--r--10_Environment.zsh5
-rw-r--r--12_Prompts.zsh78
-rw-r--r--61_VCS.zsh22
4 files changed, 51 insertions, 249 deletions
diff --git a/01_Internal.zsh b/01_Internal.zsh
index b8bec64..963e731 100644
--- a/01_Internal.zsh
+++ b/01_Internal.zsh
@@ -95,201 +95,6 @@ __preprint()
fi
}
-__get_gcl_branch ()
-{
- case $1 in
- git)
- __get_git_branch
- ;;
- hg)
- __get_hg_branch
- ;;
- *)
- ;;
- esac
-}
-
-__get_hg_branch ()
-{
- HGROOT=$(hg root 2>/dev/null)
- if [ ! -z "$HGROOT" ]
- then
- hg branch
- fi
-}
-
-__cleanup_git_branch_name() { sed 's,^tags/,,;s,^remotes/,,;s,\^0$,,' }
-
-__get_git_branch ()
-{
- local my_git_branch checkouted_branch="yes"
-
- if [ -f ".repo/manifests.git/config" ]
- then
- my_git_branch=$(grep merge .repo/manifests.git/config | awk '{print $3}')
- if [ $my_git_branch != "" ]
- then
- echo " [$my_git_branch]"
- return
- fi
- fi
-
- # Get git branch only from git managed folders (not ignored subfolders..)
- [ "$( ( git ls-files ; git ls-tree HEAD . ) 2>&- | head -n1)" = "" -a \( ! -d .git -o "$(git rev-parse --git-dir 2>&-)" != ".git" \) -a "$(git rev-parse --is-inside-git-dir 2>&-)" != "true" ] && return
-
- GIT_DIR=$(git rev-parse --git-dir)
-
- # Get current working GIT branch
- my_git_branch="$(git branch 2>&- | grep -E '^\* ' | cut -c3-)"
-
- if [ "$my_git_branch" != "" ]
- then
- # If not on a working GIT branch, get the named current commit-ish inside parenthesis
- [ "$my_git_branch" = "(no branch)" ] &&\
- checkouted_branch="" && \
- my_git_branch="$(git name-rev --name-only HEAD 2>&- | __cleanup_git_branch_name)"
-
- # If neither on a named commit-ish, show commit-id
- if [ "$my_git_branch" = "undefined" ]
- then
- my_git_branch="$(git rev-parse --verify HEAD 2>&-)"
- fi
- else
- # Initial commit
- if [ -L $GIT_DIR/HEAD -a ! -f $GIT_DIR/HEAD ]
- then
- my_git_branch="$(basename $GIT_DIR/$(LC_ALL=C stat --printf="%N\n" $GIT_DIR/HEAD | tr '`' "'" | cut -d\' -f4))"
- else
- my_git_branch="$(basename $GIT_DIR/$(cat $GIT_DIR/HEAD | sed 's/^\([0-9a-f]\{2\}\)\([0-9a-f]\{38\}\)$/objects\/\1\/\2/;s/^ref: //'))"
- fi
- fi
-
- my_git_branch="→"$my_git_branch"←"
-
- # Rebase in progress ?
- if [ -d $GIT_DIR/rebase-merge -o -d $GIT_DIR/rebase-apply ]
- then
- local rebase current last
- local REBASE_DIR
-
- if [ -d $GIT_DIR/rebase-merge ]
- then
- REBASE_DIR=$GIT_DIR/rebase-merge
- else
- REBASE_DIR=$GIT_DIR/rebase-apply
- fi
-
- if [ "$REBASE_DIR" = "$GIT_DIR/rebase-merge" ]
- then
- current=$(< $REBASE_DIR/done wc -l)
- last=$(( $current + $(< $REBASE_DIR/git-rebase-todo grep -v "^#\|^[[:blank:]]*$" | wc -l) ))
- rebase=$rebase$rebase_in_progress": "
- else
- current=$(cat $REBASE_DIR/next)
- last=$(cat $REBASE_DIR/last)
- fi
-
- my_git_branch="[$current/$last: "$(git name-rev --name-only "$(cat $REBASE_DIR/onto 2>/dev/null)" 2>/dev/null | __cleanup_git_branch_name)".."$(echo $my_git_branch)"]"
- [ -r $REBASE_DIR/head-name ] && my_git_branch=$my_git_branch" "$(< $REBASE_DIR/head-name sed 's/^refs\///;s/^heads\///')
- else
- # No rebase in progress, put '(' ')' if needed
- [ ! "$checkouted_branch" ] && my_git_branch="($my_git_branch)"
- fi
-
- echo " "$my_git_branch
-}
-
-__get_guilt_series ()
-{
- # Guilt
- #
- guilt=""
-
- if ( __cmd_exists guilt && guilt status >/dev/null 2>&- )
- then
- applied=$(guilt applied 2>/dev/null | wc -l)
- unapplied=$(guilt unapplied 2>/dev/null | wc -l)
- if [ $(($applied + $unapplied)) -gt 0 ]
- then
- guilt=" "$c_$_guilt_colors[applied]$_C
- while [ $applied -gt 0 ]
- do
- guilt=$guilt"·"
- applied=$(($applied - 1))
- done
- guilt=$guilt$c_$_guilt_colors[unapplied]$_C
- while [ $unapplied -gt 0 ]
- do
- guilt=$guilt"·"
- unapplied=$(($unapplied - 1))
- done
- guilt=$guilt$C_$colors[none]$_C
- fi
- fi
-
- echo $guilt
-}
-
-# We *must* have previously checked that
-# we obtained a correct GIT branch with
-# a call to `__get_git_branch`
-__get_git_status ()
-{
- local my_git_status cached changed managment_folder
-
- if [ ! -z "$DO_NOT_CHECK_GIT_STATUS" ]
- then
- return
- fi
-
- my_git_status=$_gcl_colors[uptodate];
-
- if [ -f ".repo/manifests.git/config" ]
- then
- echo $my_git_status
- return
- fi
-
- if [ "$(git rev-parse --is-inside-git-dir)" = "true" -o "$(git config --get core.bare)" = "true" ] ; then
- echo "$_gcl_colors[gitdir]"
- return
- fi
-
- if [ "$(git diff --cached 2>&- | grep '^diff ' | head -n1 )" != "" ] ; then
- cached="yes"
- fi
- if [ "$(git ls-files -m 2>&- | head -n1)" != "" ] ; then
- changed="yes"
- fi
-
- GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
-
- if [ "$cached" != "" -a "$changed" != "" ]
- then
- my_git_status="$_gcl_colors[mixed]"
- elif [ "$cached" != "" ]
- then
- my_git_status="$_gcl_colors[cached]"
- elif [ "$changed" != "" ]
- then
- my_git_status="$_gcl_colors[changed]"
- elif [ "$(git cat-file -t HEAD 2>/dev/null)" != "commit" ]
- then
- if [ ! -z "$(git ls-files)" ] ; then
- my_git_status="$_gcl_colors[cached]"
- else
- my_git_status="$_gcl_colors[init]"
- fi
- fi
-
- if [ $(git ls-files --unmerged | wc -l) -gt 0 ]
- then
- my_git_status="${_gcl_colors[merging]:+$_gcl_colors[merging];}$my_git_status"
- fi
-
- echo $my_git_status
-}
-
__zsh_status ()
{
if [ $ZDOTDIR != "" ]
diff --git a/10_Environment.zsh b/10_Environment.zsh
index 66774ce..66e5815 100644
--- a/10_Environment.zsh
+++ b/10_Environment.zsh
@@ -21,9 +21,10 @@ export SHELL=`which zsh`
## Colors
autoload colors && colors
-c_='['$color[none]";"
+c_='['
_c=m
-C_="%{$c_"
+_C_="%{$c_"
+C_=$_C_$color[none]";"
_C="$_c%}"
unset has_termcaps
diff --git a/12_Prompts.zsh b/12_Prompts.zsh
index f927813..857e042 100644
--- a/12_Prompts.zsh
+++ b/12_Prompts.zsh
@@ -238,49 +238,20 @@ __update_prompt_elements()
## Second line of prompt : don't let the path garbage the entire line
##
- # get cvs tag
+ # get VCS status
#
- CVSTAG=""
- [ "$DEBUG" = "yes" ] && echo -n " CVS status..."
- if [ -d CVS ]
- then
- CVSTAG=$(test -e CVS/Tag && cat CVS/Tag || basename $(cat CVS/Root 2>&- || echo "HEAD") )
- CVSTAG=${CVSTAG:+ $C_$_gcl_colors[uptodate]$_C$CVSTAG}
- fi
-
- # get svn status
- #
- [ "$DEBUG" = "yes" ] && echo -n " SVN status..."
- SVNREV=$(LC_ALL=C svn info 2>&- $PWD | awk '/^Revision: / {print $2}')
- SVNREVSIZE=${#${SVNREV:+ r$SVNREV}}
- if [ "$SVNREV" != "" ]
- then
- if [ ! -z "$CHECK_SVN_STATUS" ]
- then
- SVNSTATUS="$(svn diff 2>&-)"
- SVNSTATUS=${${SVNSTATUS:+$_gcl_colors[changed]}:-$_gcl_colors[uptodate]}
- fi
- fi
- SVNREV=${SVNREV:+$C_$_prompt_colors[doubledot]$_C $C_$SVNSTATUS$_C"r"$SVNREV}
- [ "$DEBUG" = "yes" ] && echo
-
- # get hg status
- [ "$DEBUG" = "yes" ] && echo -n " HG status..."
- HGBRANCH=$(__get_gcl_branch hg)
- [ ! -z "$HGBRANCH" ] && HGBRANCH=" "$HGBRANCH
- [ "$DEBUG" = "yes" ] && echo
-
- # get git status
- #
- [ "$DEBUG" = "yes" ] && echo -n " GIT status..."
- GITBRANCH=$(__get_gcl_branch git)
- GITBRANCHSIZE=${#GITBRANCH}
- [ $GITBRANCHSIZE -gt 0 ] && GITBRANCHSIZE=$(($GITBRANCHSIZE))
+ [ "$DEBUG" = "yes" ] && echo -n " Update VCS info..."
+ vcs_info 2>&-
+ VCSROOT=${vcs_info_msg_1_}
+ VCSROOT=${VCSROOT/$HOME/\~}
+ VCSSUBDIR=${vcs_info_msg_2_}
+ VCSBRANCH=${vcs_info_msg_0_}
+ VCSBRANCHSIZE=0 #TBD
[ "$DEBUG" = "yes" ] && echo
[ "$DEBUG" = "yes" ] && echo -n " Path..."
MY_PATH="%(!.%d.%~)"
- PATHSIZE=$(print -Pn $MY_PATH)
+ CURDIR=$(print -Pn $MY_PATH)
PATHSIZE=${#PATHSIZE}
[ "$DEBUG" = "yes" ] && echo
[ "$DEBUG" = "yes" ] && echo -n " Resize path / gitbranch..."
@@ -290,34 +261,35 @@ __update_prompt_elements()
#minimalpathsize=${#minimalpathsize}
minimalpathsize=10
minimalgitsize=10 # git-abbrev-commit-ish...
- if [ $GITBRANCHSIZE -gt 0 ]
+ if [ $VCSBRANCHSIZE -gt 0 ]
then
- if [ $spaceleft -lt $(( $PATHSIZE + $GITBRANCHSIZE )) ]
+ if [ $spaceleft -lt $(( $PATHSIZE )) ]
then
- CHUNKABLE=${${GITBRANCH/*→/}/←*/}
+ CHUNKABLE=${${VCSBRANCH/*→/}/←*/}
# reduce the git-branch until it is shrinked to $minimalgitsize characters max.
- if [ $GITBRANCHSIZE -gt $minimalgitsize ]
+ if [ $VCSBRANCHSIZE -gt $minimalgitsize ]
then
- GITBRANCHCHUNK=$(( $GITBRANCHSIZE - ($spaceleft - $PATHSIZE) ))
- [ $((${#CHUNKABLE} - $GITBRANCHCHUNK)) -lt $minimalgitsize ] && GITBRANCHCHUNK=$((${#CHUNKABLE} - $minimalgitsize))
+ VCSBRANCHCHUNK=$(( $VCSBRANCHSIZE - ($spaceleft - $PATHSIZE) ))
+ [ $((${#CHUNKABLE} - $VCSBRANCHCHUNK)) -lt $minimalgitsize ] && VCSBRANCHCHUNK=$((${#CHUNKABLE} - $minimalgitsize))
fi
- CHUNKABLE=`print -Pn "%"$(( ${#CHUNKABLE} - $GITBRANCHCHUNK ))">¬>"${CHUNKABLE%\~*}`
+ CHUNKABLE=`print -Pn "%"$(( ${#CHUNKABLE} - $VCSBRANCHCHUNK ))">¬>"${CHUNKABLE%\~*}`
- GITBRANCH=${GITBRANCH/→*←/→$CHUNKABLE←}
+ VCSBRANCH=${VCSBRANCH/→*←/→$CHUNKABLE←}
fi
fi
# then we reduce the path until it reaches the last path element,
- spaceleft=$(($spaceleft - $GITBRANCHSIZE))
+ spaceleft=$(($spaceleft - $VCSBRANCHSIZE))
[ $spaceleft -lt $minimalpathsize ] && spaceleft=$minimalpathsize
- if [ -n "$GITBRANCH" ]
+ if [ -n "$VCSBRANCH" ]
then
- GITBRANCH=$C_$_prompt_colors[soft_generic]$_C${${GITBRANCH/→/$C_"$(__get_git_status)"$_C}/←/$C_$_prompt_colors[soft_generic]$_C}"$(__get_guilt_series)$C_$color[none]$_C"
+ #VCSBRANCH=$C_$_prompt_colors[soft_generic]$_C${${VCSBRANCH/→/$C_"30"$_C}/←/$C_$_prompt_colors[soft_generic]$_C}"$C_$color[none]$_C"
fi
- CURDIR="$C_$_prompt_colors[path]$_C%`echo $spaceleft`<..<"$MY_PATH"%<<$C_$color[none]$_C"
- [ "$DEBUG" = "yes" ] && echo
- VCSBRANCH=$CVSTAG$SVNREV$GITBRANCH$HGBRANCH
+ [ -n "$VCSROOT" ] && CURDIR=${CURDIR/$VCSROOT*/$VCSROOT}
+ CURDIR="$C_$_prompt_colors[path]$_C%`echo $spaceleft`<..<"$CURDIR"%<<$C_$color[none]$_C"
+ [ "$VCSSUBDIR" != "." ] && CURDIR+=$C_$color[cyan]";"$color[bold]$_C"/"$C_$_prompt_colors[path]$_C$VCSSUBDIR
+ [ "$DEBUG" = "yes" ] && echo
}
__redefine_prompt ()
@@ -337,6 +309,8 @@ __yeah_prompt ()
PS1=$C_$prompt_color[default]$_C$C_$_prompt_colors[user]$_C"%n"$C_$_prompt_colors[arob]$_C"@"$C_$_prompt_colors[host]$_C"%m "$CURDIR" "$C_$_prompt_colors[dies]$_C">"$C_$_prompt_colors[cmd]$_C" "
}
+setopt PROMPT_SUBST
+
__two_lines_prompt ()
{
__cmd_exists __compilation && __compilation
diff --git a/61_VCS.zsh b/61_VCS.zsh
new file mode 100644
index 0000000..6122083
--- /dev/null
+++ b/61_VCS.zsh
@@ -0,0 +1,22 @@
+##
+## Part of configuration files for Zsh 4
+## by Hugues Hiegel <hugues@hiegel.fr>
+##
+## NO WARRANTY PROVIDED, USE AT YOUR OWN RISKS
+##
+## You are encouraged to use, modify, and redistribute
+## these files with or without this notice.
+##
+
+# zshall
+
+_reset_=$C_$_prompt_colors[soft_generic]$_C
+
+autoload -Uz vcs_info
+zstyle ':vcs_info:*' formats "$_reset_ [%c%u%b$_reset_]" "%R" "%S"
+zstyle ':vcs_info:*' actionformats "$_reset_ [(%B%a$_reset_) %c%u%b$_reset_]$_reset_" "%R" "%S"
+zstyle ':vcs_info:*' stagedstr "$C_$color[yellow];$color[bold]$_C"
+zstyle ':vcs_info:*' unstagedstr "$_C_$color[green]$_C"
+zstyle ':vcs_info:*' check-for-changes true
+zstyle ':vcs_info:*' get-revision false
+