Preenchimento automático de bash personalizado para o git quebra outros recursos do autocomplete do git

5

Eu estou tentando adicionar autocompletar a git commit ao apertar a aba Tab Tab .

O recurso de preenchimento automático no qual estou trabalhando baseia-se em uma convenção de nomenclatura de ramos. A convenção é anexar o número de identificação PivotalTracker ao final do nome da ramificação, para que uma ramificação típica se pareça com foo-bar-baz-1449242 .

Podemos associar os commits com o cartão PivotalTracker, prefixando [#1449242] no início da mensagem de confirmação. Eu gostaria que isso fosse inserido automaticamente se git commit fosse digitado e o usuário acessasse a aba Tab Tab .

Eu já fiz isso aqui: link

(e por conveniência, aqui está o código fonte):

  function _ptid_git_complete_()
  {
    local line="${COMP_LINE}"                   # the entire line that is being completed

    # check that the commit option was passed to git 
    if [[ "$line" == "git commit" ]]; then 
      # get the PivotalTracker Id from the branch name
      ptid='git branch | grep -e "^\*" | sed 's/^\* //g' | sed 's/\-/ /g' | awk '{ print $(NF) }''
      nodigits=$(echo $ptid | sed 's/[[:digit:]]//g')

      if [ ! -z $nodigits ]; then
        : # do nothing
      else
        COMPREPLY=("commit -m \"[#$ptid]")
      fi
    else
      reply=()
    fi
  }

  complete -F _ptid_git_complete_ git

O problema é que isso quebra os recursos de autocompletar do git definidos em git-autocompletion .bash

Como posso tornar esta função compatível com o git-autocompletion.bash?

    
por tlehman 17.10.2012 / 23:19

1 resposta

1

Você pode usar __git_complete (definido em git-autocompletion.bash ) para instalar sua própria função e fazer com que sua função retorne à função original. Possivelmente assim:

function _ptid_git_complete_()
{
  local line="${COMP_LINE}"                   # the entire line that is being completed

  # check that the commit option was passed to git 
  if [[ "$line" == "git commit " ]]; then 
    # get the PivotalTracker Id from the branch name
    ptid='git branch | grep -e "^\*" | sed 's/^\* //g' | sed 's/\-/ /g' | awk '{ print $(NF) }''
    nodigits=$(echo $ptid | sed 's/[[:digit:]]//g')

    if [ ! -z $nodigits ]; then
      : # do nothing
    else
      COMPREPLY=("-m \"[#$ptid]")
    fi
  else
    __git_main
  fi
}

__git_complete git _ptid_git_complete_
    
por 20.10.2012 / 23:47