Comment désactiver sélectivement l'intégration du contrôle de version de zsh lorsque mon CWD est sur un système de fichiers distant?

16

J'utilise zsh sur OSX et à l'occasion je dois travailler sur un volume sshfs monté. Cependant, git est VRAIMENT lent sur les montages sshfs. Mon invite utilise les éléments du mode vc fournis par zsh, mais dans ce cas, je veux ignorer cette partie.

Je voudrais désactiver sélectivement l'intégration vc chaque fois que mon CWD est sur un système de fichiers monté. Comment puis je faire ça?

J'active actuellement git info dans mon invite en utilisant (grossièrement) cet extrait de mon .zshrc (enfin, .oh-my-zsh / themes, mais vous avez l'idée):

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
la source
Peut-être que cela vous aidera ... superuser.com/questions/46321/tweaking-zsh-git-autocompletion
Joe Internet
Non, ce ne sont pas les achèvements qui sont un problème
Chris R
D'accord, désolé pour la réponse "rtfm" ... voir la section 26.4 du manuel ... ça devrait aider ... zsh.sourceforge.net/Doc/Release/…
Joe Internet
Pouvez-vous ajouter les sections zshrc pertinentes que vous avez utilisées pour l'activer?
polynôme

Réponses:

9

Jetez un œil à Version-Control-Information

Recherchez la section sur «désactiver les modèles» (environ 20% en bas de la page).
En supposant que vos montages distants sont fixes, ou relativement fixes, c'est-à-dire que /mnt/remote/*vous pouvez tous les répertorier, vous devriez pouvoir trouver une expression régulière pour eux.

L'exemple sur le lien désactive vcs_infosous ~/.zsh/, via:

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

Je suppose que vous pourriez faire en sorte que zshrc ou équivalent (désolé - utilisateur bash) identifie ceux qui sont distants au démarrage (ou périodiquement, ou ...) et les mettent à jour en zstyleconséquence.

Brett Procter
la source