Как мне написать крючок вокруг нажатия меркуриала, создающего новую удаленную головку?

Я хочу сделать хук, который, когда кто-то нажимает на удаленный, если он получает сообщение об ошибке abort: push creates new remote head, хук попытается объединить удаленную и локальную голову (если легко слить, т.е. нет конфликтующих файлов) и снова нажать.

Как я могу это сделать? Я попытался добавить хук на pre-push, но я не знаю, как получить только хэш удаленного заголовка для текущей ветки.

Вот то, что я пытался, хотя это не полируется.

currbranch=$(hg branch)
hg pull
numheads=$(hg heads --template "." $currbranch)
if test ${#numheads} -gt 1; then
    echo "Merge needed."
    head1=$(hg heads --template "{node}\n" $currbranch | head -n 1)
    head2=$(hg heads --template "{node}\n" $currbranch | tail -n 1)
    overlap=$((hg status --change $head1 --no-status ; hg status --change $head2 --no-status) | sort | uniq --repeated)
    if [ -z "$overlap" ]; then
        echo "Attempting automatic merge..."
        hg merge "$head1"  # Fails when merging the wrong head
        hg merge "$head2"  # But how do we know which one is wrong?
        hg commit -m "Merge"
        echo "Completed."
    else
        echo "Cannot automatically merge"
        exit 1
    fi
fi

Чтобы было ясно, что не работает впереди, так это слияние обеих голов. Как узнать, какая головка локальная, а какая удаленная?

Кроме того, это правильный крючок для использования?


person Jonathan Allen Grant    schedule 18.06.2020    source источник


Ответы (1)


  1. Вы можете попробовать добавить и использовать расширение удаленных имен ( он довольно старый и не поддерживается активно с 2018 года, но может работать), чтобы все удаленные одноранговые узлы были названы в вашем репозитории (в этом случае вы узнаете имена удаленных головок после извлечения)
  2. Вы можете (перед пулом) проверить наличие головы во входящем наборе наборов изменений, что-то. нравится

hg in -r "head()" -T "{node|short}\n" (ТБТ!)

person Lazy Badger    schedule 19.06.2020