Обнаружение новых строк в Mercurial - PullRequest
2 голосов
/ 12 апреля 2019

Мы изучаем возможность добавления предварительных хуков для определения соответствия стандартам кодирования политике нашей компании. Мы не хотим обнаруживать устаревший код, просто добавлены новые строки.

В git можно обнаружить номера строк, которые добавляются перед фиксацией, поскольку они отображаются с хэш-номером 00000000000 при вызове git blame.

В mercurial новые строки не отображаются в hg blame / annotate. Есть ли другой механизм, чтобы выяснить это? Использование hg diff может быть очень болезненным для этого.

1 Ответ

4 голосов
/ 12 апреля 2019

Отредактируйте свой репозиторий (hg config --local) или свою пользовательскую конфигурацию (hg config --edit) и включите ловушку предварительной фиксации (hg help config.hooks):

[hooks]
pre-commit=/path/to/check-added-lines

В хуке предварительной фиксации выполните следующую версию команды annotate с наборами wdir() revset и modified() + added(): (hg help revsets и hg help filesets):

hg ann -r 'wdir()' 'set:modified() + added()'

Это даст вам вывод аннотации, где только что добавленные строки (т.е. строки, которые существуют только в вашем рабочем каталоге) имеют + после номера ревизии. Так что в check-added-lines вы можете сделать что-то вроде, например,

#!/bin/bash
IFS=$'\n'
for line in $(hg ann -r 'wdir()' 'set:modified() + added()' | grep '^[0-9]*+' | sed 's/^[0-9]\++ *: //'); do
    if ! run_checker "$line"; then
        exit 1
    fi
done
exit 0

с выбранной вами программой run_checker.

Хотя я не решаюсь рекомендовать это, если вы готовы терпеть ошибки и потенциальную поломку API (Mercurial считает, что его поведение явно не задокументировано как экспериментальное, его CLI и его стандартный вывод - API, который мы стараемся поддерживать очень стабильным ), вас также может заинтересовать новое и экспериментальное расширение для исправлений, которое, я думаю, было создано с учетом вашего варианта использования (hg help --extension fix).

...