feat(lib): show upstream branch in `git_prompt_info` (#9188)
Show the remote branch the local branch is tracking if `ZSH_THEME_GIT_SHOW_UPSTREAM`
is set, like so: `ZSH_THEME_GIT_SHOW_UPSTREAM=1`.
Co-authored-by: Marc Cornellà <marc.cornella@live.com>
Diff
1diff --git a/lib/git.zsh b/lib/git.zsh
2index 53d39609e76bc51974d0c53662c7126f8ebe9cf9..da8a3e7a7a1453b034f483ee563a76029cf1d004 100644
3--- a/lib/git.zsh
4+++ b/lib/git.zsh
5@@ -9,14 +9,27 @@ function __git_prompt_git() {
6 GIT_OPTIONAL_LOCKS=0 command git "$@"
7 }
8 9-# Outputs current branch info in prompt format
10 function git_prompt_info() {
11+ # If we are on a folder not tracked by git, get out.
12+ # Otherwise, check for hide-info at global and local repository level
13+ if ! __git_prompt_git rev-parse --git-dir &> /dev/null \
14+ || [[ "$(__git_prompt_git config --get oh-my-zsh.hide-info 2>/dev/null)" == 1 ]]; then
15+ return 0
16+ fi
17+
18 local ref
19- if [[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" != "1" ]]; then
20- ref=$(__git_prompt_git symbolic-ref HEAD 2> /dev/null) || \
21- ref=$(__git_prompt_git rev-parse --short HEAD 2> /dev/null) || return 0
22- echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX"
23+ ref=$(__git_prompt_git symbolic-ref --short HEAD 2> /dev/null) \
24+ || ref=$(__git_prompt_git rev-parse --short HEAD 2> /dev/null) \
25+ || return 0
26+
27+ # Use global ZSH_THEME_GIT_SHOW_UPSTREAM=1 for including upstream remote info
28+ local upstream
29+ if (( ${+ZSH_THEME_GIT_SHOW_UPSTREAM} )); then
30+ upstream=$(__git_prompt_git rev-parse --abbrev-ref --symbolic-full-name "@{upstream}" 2>/dev/null) \
31+ && upstream=" -> ${upstream}"
32 fi
33+
34+ echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref}${upstream}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}"
35 }
3637 # Checks if working tree is dirty