From 89c100d72f39afff26f07b7c5ef57ce9fc9504b1 Mon Sep 17 00:00:00 2001 From: Matt Hunter Date: Fri, 17 Apr 2026 15:59:05 -0400 Subject: Combine special condition and missingups into alert It is clearer to handle both of these with the same prompt element. Consider "upstream is missing" as just another special condition, and use the same icon to indicate either. We use the lightning bolt to cover both situations with no suffix space. The '!' character was found in some shells to function as an unintended metacharacter when used in the PS1 prompt, and so was discarded. Signed-off-by: Matt Hunter --- git-sonar | 49 ++++++++++++++++--------------------------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/git-sonar b/git-sonar index 1a73949..25772e8 100755 --- a/git-sonar +++ b/git-sonar @@ -23,22 +23,20 @@ prepare_colors() { COLOR_CHANGES_CONFLICTED="\001${GIT_RADAR_COLOR_CHANGES_CONFLICTED:-"\\033[1;33m"}\002" COLOR_CHANGES_UNTRACKED="\001${GIT_RADAR_COLOR_CHANGES_UNTRACKED:-"\\033[1;37m"}\002" - COLOR_CONDITION="\001${GIT_RADAR_COLOR_CONDITION:-"\\033[1;33m"}\002" + COLOR_ALERT="\001${GIT_RADAR_COLOR_ALERT:-"\\033[1;33m"}\002" COLOR_STASH="\001${GIT_RADAR_COLOR_STASH:-"\\033[1;33m"}\002" COLOR_BRANCH="\001${GIT_RADAR_COLOR_BRANCH:-"\\033[0m"}\002" MASTER_SYMBOL="${GIT_RADAR_MASTER_SYMBOL:-""}" # \\x01\\033[0m\\x02\\xF0\\x9D\\x98\\xAE\\x01\\033[0m\\x02 - PROMPT_FORMAT="${GIT_RADAR_FORMAT:-" \\001\\033[1;30m\\002git:(\\001\\033[0m\\002%{condition: }%{remote: }%{missingups}%{branch}%{ :local}\\001\\033[1;30m\\002)\\001\\033[0m\\002%{ :stash}%{ :changes}"}" + PROMPT_FORMAT="${GIT_RADAR_FORMAT:-" \\001\\033[1;30m\\002git:(\\001\\033[0m\\002%{alert}%{remote: }%{branch}%{ :local}\\001\\033[1;30m\\002)\\001\\033[0m\\002%{ :stash}%{ :changes}"}" RESET_COLOR_LOCAL="\001${GIT_RADAR_COLOR_LOCAL_RESET:-"\\033[0m"}\002" RESET_COLOR_REMOTE="\001${GIT_RADAR_COLOR_REMOTE_RESET:-"\\033[0m"}\002" RESET_COLOR_CHANGES="\001${GIT_RADAR_COLOR_CHANGES_RESET:-"\\033[0m"}\002" RESET_COLOR_BRANCH="\001${GIT_RADAR_COLOR_BRANCH_RESET:-"\\033[0m"}\002" RESET_COLOR_STASH="\001${GIT_RADAR_COLOR_STASH_RESET:-"\\033[0m"}\002" - RESET_COLOR_CONDITION="\001${GIT_RADAR_COLOR_CONDITION_RESET:-"\\033[0m"}\002" - } fetch() { @@ -274,16 +272,6 @@ color_local_commits() { printf $PRINT_F_OPTION "$local_commits" } -color_missing_upstream() { - not_upstream="${COLOR_REMOTE_NOT_UPSTREAM}⚡$RESET_COLOR_REMOTE" - - if remote_branch="$(remote_branch_name)"; then - if ! git rev-parse "$remote_branch" -- >/dev/null 2>&1; then - printf "$not_upstream" - fi - fi -} - color_remote_commits() { green_ahead_arrow="${COLOR_REMOTE_AHEAD}↑$RESET_COLOR_REMOTE" # "←" red_behind_arrow="${COLOR_REMOTE_BEHIND}↓$RESET_COLOR_REMOTE" # "→" @@ -306,6 +294,14 @@ color_remote_commits() { printf $PRINT_F_OPTION "$remote" } +color_alert() { + if { remote_branch="$(remote_branch_name)" \ + && ! git rev-parse "$remote_branch" -- >/dev/null 2>&1; } \ + || [ "$precheck_status" -ge 3 ]; then + printf '%b' "${COLOR_ALERT}⚡${RESET_COLOR}" + fi +} + readable_branch_name() { printf $PRINT_F_OPTION "$COLOR_BRANCH$(branch_name || printf '%s' "detached@$(commit_short_sha)")$RESET_COLOR_BRANCH" } @@ -321,10 +317,6 @@ stash_status() { fi } -repo_special_condition() { - [ "$precheck_status" -lt 3 ] || printf '%b' "$COLOR_CONDITION!$RESET_COLOR" -} - render_prompt() { branch_sed="" remote_sed="" @@ -338,20 +330,12 @@ render_prompt() { sed_pre="%{\(\([^%^{^}]*\)\:\)\{0,1\}" sed_post="\(\:\([^%^{^}]*\)\)\{0,1\}}" - if echo "$PROMPT_FORMAT" | grep -qE "${if_pre}condition${if_post}"; then - condition_result="$(repo_special_condition)" - if [ -n "$condition_result" ]; then - condition_sed="s/${sed_pre}condition${sed_post}/\2${condition_result}\4/" - else - condition_sed="s/${sed_pre}condition${sed_post}//" - fi - fi - if echo "$PROMPT_FORMAT" | grep -qE "${if_pre}missingups${if_post}"; then - missingups_result="$(color_missing_upstream)" - if [ -n "$missingups_result" ]; then - missingups_sed="s/${sed_pre}missingups${sed_post}/\2${missingups_result}\4/" + if echo "$PROMPT_FORMAT" | grep -qE "${if_pre}alert${if_post}"; then + alert_result="$(color_alert)" + if [ -n "$alert_result" ]; then + alert_sed="s/${sed_pre}alert${sed_post}/\2${alert_result}\4/" else - missingups_sed="s/${sed_pre}missingups${sed_post}//" + alert_sed="s/${sed_pre}alert${sed_post}//" fi fi if echo "$PROMPT_FORMAT" | grep -qE "${if_pre}remote${if_post}"; then @@ -396,8 +380,7 @@ render_prompt() { fi printf '%b' "$PROMPT_FORMAT" | sed \ - -e "$condition_sed" \ - -e "$missingups_sed" \ + -e "$alert_sed" \ -e "$remote_sed" \ -e "$branch_sed" \ -e "$changes_sed" \ -- cgit v1.2.3