¿Cómo puedo desactivar selectivamente la integración de control de versiones de zsh cuando mi CWD está en un sistema de archivos remoto?

16

Estoy ejecutando zsh en OSX y en ocasiones tengo que trabajar en un volumen sshfs montado. Sin embargo, git es REALMENTE lento sobre los montajes sshfs. Mi indicador hace uso de las cosas del modo vc que proporciona zsh incorporado, pero en este caso quiero omitir esa parte.

Me gustaría deshabilitar selectivamente la integración vc cada vez que mi CWD esté en un sistema de archivos montado. ¿Cómo puedo hacer eso?

Actualmente estoy habilitando la información de git en mi solicitud usando (aproximadamente) este fragmento de mi .zshrc (bueno, .oh-my-zsh / themes, pero entiendes la idea):

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
fuente
No, no son las terminaciones las que son un problema
Chris R
Bien, perdón por la respuesta "rtfm" ... vea la sección 26.4 del manual ... debería ayudar ... zsh.sourceforge.net/Doc/Release/…
Joe Internet
¿Puede agregar las secciones zshrc relevantes que utilizó para habilitar esto?
polinomio

Respuestas:

9

Eche un vistazo a Version-Control-Information

Busque la sección sobre 'deshabilitar patrones' (aproximadamente un 20% más abajo en la página).
Suponiendo que sus montajes remotos son fijos, o relativamente fijos, es decir, /mnt/remote/*o puede enumerarlos a todos, debería poder encontrar una expresión regular para ellos.

El ejemplo en el enlace se deshabilita vcs_infoen ~/.zsh/, a través de:

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

Supongo que podría hacer que el zshrc o equivalente (lo siento, usuario bash) descubra cuáles son remotos al inicio (o periódicamente, o ...) y actualice el en zstyleconsecuencia.

Brett Procter
fuente