Verifique se a ramificação atual está na lista delimitada por nova linha

0

Estou tentando criar um gancho de pré-commit do git. Se a ramificação atual já estiver mesclada com a ramificação de integração, não quero permitir novas confirmações nessa ramificação. Eu tenho isso:

#!/usr/bin/env bash

git fetch origin dev
current_branch='git rev-parse --abbrev-ref HEAD'
branches="$(git branch --merged dev | tr '@squashed' '')"

diga que eu tenho esses dois ramos:

me/feature/x
me/feature/x@squashed

O que eu quero fazer é substituir '@squashed', então eu entendo:

me/feature/x
me/feature/x

se a ramificação atual começar com um desses nomes, saia com o código 1.

O problema é:

  1. Não consigo descobrir como usar o tr / sed para substituir apenas '@squashed' se o nome da ramificação terminar com essa sequência.

  2. Eu não consigo descobrir como fazer um loop sobre os elementos e sair com um valor diferente de zero se a ramificação atual começar com um dos nomes de ramificação na lista.

por Alexander Mills 11.09.2018 / 05:47

1 resposta

2

  1. tr substitui caracteres únicos, não sequências. Como você supõe, você pode usar sed para excluir uma string no final de uma linha:

    git branch --merged dev | sed 's/@squashed$//'
    
  2. Em vez de fazer loop, use grep para determinar se uma lista de strings, uma por linha, contém uma linha que começa com uma string de referência:

    git branch --merged dev | sed 's/@squashed$//' | grep -q "^..$current_branch"
    

Melhor ainda, como você está usando git , peça para filtrar por você:

git branch --list "${current_branch}*" --merged dev

listará qualquer ramificação mesclada com dev cujo nome comece com a ramificação atual. (Como você está filtrando correspondendo o nome dos nomes das ramificações, não precisa soltar a parte "@sashed", a menos que esteja faltando alguma coisa.)

    
por 11.09.2018 / 10:17

Tags