Как мне написать ловушку вокруг mercurial «pu sh создает новую удаленную головку»? - PullRequest
2 голосов
/ 18 июня 2020

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

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

Вот то, что я пробовал, хотя он не отполирован.

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

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

Кроме того, правильный ли этот хук использовать?

1 Ответ

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...