diff options
author | Leonid Volnitsky <Leonid@Volnitsky.com> | 2008-07-05 00:22:46 +0300 |
---|---|---|
committer | Leonid Volnitsky <Leonid@Volnitsky.com> | 2008-07-05 09:29:15 +0300 |
commit | a0ceb5d81426cbad6d513db42587245e17f556b4 (patch) | |
tree | 32f02462d0034b8d864af4e5ac5d5f4642f582b3 /git-prompt.sh | |
parent | docs (diff) | |
download | git-prompt-a0ceb5d81426cbad6d513db42587245e17f556b4.tar.gz git-prompt-a0ceb5d81426cbad6d513db42587245e17f556b4.tar.bz2 git-prompt-a0ceb5d81426cbad6d513db42587245e17f556b4.zip |
max_... in file list - works.
Diffstat (limited to 'git-prompt.sh')
-rw-r--r-- | git-prompt.sh | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/git-prompt.sh b/git-prompt.sh index 9bca4d0..8f7e8b3 100644 --- a/git-prompt.sh +++ b/git-prompt.sh @@ -33,6 +33,9 @@ op_vcs_color=MAGENTA detached_vcs_color=RED + max_untracked=3 + max_modified=5 + max_added=5 ##################################################################### post config @@ -263,29 +266,33 @@ parse_git_dir() { ########################################################## GIT STATUS unset status modified added clean init added mixed untracked op detached + local untracked_cnt=0; + local modified_cnt=0; + local added_cnt=0; + #s/^# /; : $((untracked_cnt++)); [[ $untracked_cnt -le $max_untracked ]] \&\& untracked_files+=" "/p eval ` git status 2>/dev/null | - sed -n " + sed -n ' s/^# On branch /branch=/p s/^nothing to commit (working directory clean)/clean=clean/p - s/^# Initial commit/init=init/p + s/^# Initial commit/;init=init/p /^# Untracked files:/,/^[^#]/{ - s/^# Untracked files:/untracked=untracked/p - s/^# /untracked_files+=\" \"/p + s/^# Untracked files:/;untracked=untracked/p + s/^# /untracked_files[${#untracked_files[@]}+1]=/p } /^# Changed but not updated:/,/^# [A-Z]/ { - s/^# Changed but not updated:/modified=modified/p - s/^# modified: /modified_files+=\" \"/p - s/^# unmerged: /modified_files+=\" \"/p + s/^# Changed but not updated:/;modified=modified/p + s/^# modified: /modified_files[${#modified_files[@]}+1]=/p + s/^# unmerged: /modified_files[${#modified_files[@]}+1]=/p } /^# Changes to be committed:/,/^# [A-Z]/ { - s/^# Changes to be committed:/added=added/p - s/^# modified: /added_files+=\" \"/p - s/^# new file: */added_files+=\" \"/p - s/^# renamed:[^>]*> /added_files+=\" \"/p - s/^# copied:[^>]*> /added_files+=\" \"/p + s/^# Changes to be committed:/;added=added/p + s/^# modified: /added_files[${#added_files[@]}+1]=/p + s/^# new file: */added_files[${#added_files[@]}+1]=/p + s/^# renamed:[^>]*> /added_files[${#added_files[@]}+1]=/p + s/^# copied:[^>]*> /added_files[${#added_files[@]}+1]=/p } - " + ' ` if ! grep -q "^ref:" $git_dir/HEAD 2>/dev/null; then @@ -316,6 +323,7 @@ parse_git_dir() { op="rebase -m" # ??? branch="$(cat "$git_dir/.dotest-merge/head-name")" + # lvv: not always works. Should ./.dotest be used instead? elif [[ -f "$git_dir/MERGE_HEAD" ]] ; then op="merge" # ??? branch="$(git symbolic-ref HEAD 2>/dev/null)" @@ -406,10 +414,10 @@ parse_vcs_dir() { ### file list unset file_list - file_list+=${added_files:+$added_vcs_color$added_files} - file_list+=${modified_files:+$modified_vcs_color$modified_files} - file_list+=${untracked_files:+$untracked_vcs_color$untracked_files} - file_list+=${vim_files:+ ${RED}VIM:$vim_files} + [[ ${added_files[1]} ]] && file_list+=" "$added_vcs_color${added_files[@]:1:$max_added}${added_files[$max_added+1]:+...} + [[ ${modified_files[1]} ]] && file_list+=" "$modified_vcs_color${modified_files[@]:1:$max_modified}${modified_files[$max_modified+1]:+...} + [[ ${untracked_files[1]} ]] && file_list+=" "$untracked_vcs_color${untracked_files[@]:1:$max_untracked}${untracked_files[$max_untracked+1]:+...} + [[ ${vim_files} ]] && file_list+=" "${RED}VIM:$vim_files} file_list=${file_list:+:$file_list} |