Como posso desativar seletivamente a integração do controle de versão do zsh quando meu CWD está em um sistema de arquivos remoto?

16

Estou executando o zsh no OSX e, ocasionalmente, tenho que trabalhar em um volume sshfs montado. No entanto, o git é REALMENTE lento nas montagens sshfs. Meu prompt faz uso do material do modo vc que o zsh fornece embutido, mas nesse caso eu quero pular essa parte.

Gostaria de desativar seletivamente a integração de vc sempre que meu CWD estiver em um sistema de arquivos montado. Como eu posso fazer isso?

Atualmente, estou ativando as informações do git no meu prompt usando (aproximadamente) esse trecho do meu .zshrc (bem, .oh-my-zsh / themes, mas você entendeu):

zstyle ':vcs_info:*' enable hg git bzr svn p4

zstyle ':vcs_info:(hg*|git*):*' get-revision true
zstyle ':vcs_info:(hg*|git*):*' check-for-changes true

# rev+changes branch misc
zstyle ':vcs_info:hg*' formats "[%i%u %b%m]"
zstyle ':vcs_info:hg*' actionformats "(%{$fg_bold[red]%}%a%{$reset_color%})[%i%u %b%m]"

# hash changes branch misc
zstyle ':vcs_info:git*' formats "[%{$fg[yellow]%}%12.12i%{$reset_color%} %u %{$fg[magenta]%}%b%{$reset_color%}%m]"
zstyle ':vcs_info:git*' actionformats "(%a)[%{$fg[yellow]%}%12.12i%{$reset_color%} %u %{$fg[magenta]%}%b%{$reset_color%}%m]"

zstyle ':vcs_info:git*+set-message:*' hooks git-st git-stash

zstyle ':vcs_info:hg*:netbeans' use-simple true

zstyle ':vcs_info:hg*:*' get-bookmarks true

zstyle ':vcs_info:hg*:*' get-mq true
zstyle ':vcs_info:hg*:*' get-unapplied true
zstyle ':vcs_info:hg*:*' patch-format " mq(%g):%{$fg[green]%}%n%{$reset_color%}/%{$fg_bold[blue]%}%c%{$reset_color%} %{$fg[green]%}%p%{$reset_color%}"
zstyle ':vcs_info:hg*:*' nopatch-format ""

zstyle ':vcs_info:hg*:*' unstagedstr " ?"
zstyle ':vcs_info:hg*:*' hgrevformat "%{$fg[yellow]%}%r%{$reset_color%}" # only show local rev.
zstyle ':vcs_info:hg*:*' branchformat "%{$fg[magenta]%}%b%{$reset_color%}" # only show branch

# Show remote ref name and number of commits ahead-of or behind
function +vi-git-st() {
    local ahead behind remote
    local -a gitstatus

    # Are we on a remote-tracking branch?
    remote=${$(git rev-parse --verify ${hook_com[branch]}@{upstream} \
        --symbolic-full-name 2>/dev/null)/refs\/remotes\/}

    if [[ -n ${remote} ]] ; then
        # for git prior to 1.7
        # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
        ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l | tr -s ' ')
        (( $ahead )) && gitstatus+=( " ${c3}+${ahead}${c2}" )

        # for git prior to 1.7
        # behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
        behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l | tr -s ' ')
        (( $behind )) && gitstatus+=( " ${c4}-${behind}${c2}" )

        hook_com[branch]="${hook_com[branch]} [${remote}${(j:/:)gitstatus}]"
    fi
}

# Show count of stashed changes
function +vi-git-stash() {
    local -a stashes

    if [[ -s ${hook_com[base]}/.git/refs/stash ]] ; then
        stashes=$(git stash list 2>/dev/null | wc -l)
        hook_com[misc]+=" (${stashes} stashed)"
    fi
}

precmd () { vcs_info }
PROMPT='
%{$(get_prompt_user_color)%}%n%{$reset_color%} at %{$(get_prompt_host_color)%}%m%{$reset_color%} in %{$fg_bold[green]%}%~%{$reset_color%} ${vcs_info_msg_0_}
$(virtualenv_info)$(prompt_char) '
Chris R
fonte
Não, não são as conclusões que são um problema
Chris R
Ok, desculpe pela resposta "rtfm" ... consulte a seção 26.4 do manual ... deve ajudar ... zsh.sourceforge.net/Doc/Release/…
Joe Internet
Você pode adicionar as seções relevantes do zshrc que você usou para habilitar isso?
polinomial

Respostas:

9

Dê uma olhada em Version-Control-Information

Procure a seção 'padrões de desativação' (aproximadamente 20% na página).
Supondo que suas montagens remotas sejam fixas ou relativamente fixas, /mnt/remote/*ou seja, ou você pode listá-las todas, você poderá criar um regex para elas.

O exemplo no link está desativando vcs_infoem ~/.zsh/, via:

zstyle ':vcs_info:*' disable-patterns "$HOME/.zsh(|/*)"

Eu acho que você pode fazer o zshrc ou equivalente (desculpe - usuário do bash) descobrir quais são remotos na inicialização (ou periodicamente, ou ...) e atualizar a zstyleconformidade.

Brett Procter
fonte