Получить список наборов изменений в группе изменений (mercurial python hook) - PullRequest
3 голосов
/ 01 сентября 2010

Я хочу, чтобы Mercurial Hook запускал JSLint / PyChecker / etc для всех изменяемых файлов. Однако у меня нет контроля над всеми клиентами hg, и я хочу, чтобы он запускался при принудительном запуске в главном репозитории (которым я управляю), поэтому перехват pretxnchangegroup на главном кажется лучшим.

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

Мне кажется, что есть другие решения, использующие ловушку предварительной фиксации, но они не будут работать для меня, потому что у клиентов уже может быть фиксация, которая завершается с ошибкой JSLint. В этом случае они должны иметь возможность исправлять ошибки в новом коммите и успешно отправлять (как плохие, так и новые коммиты) на сервер. Серверу просто нужно проверить самые последние изменения в каждой ветви каждого файла, который был изменен в группе изменений.

Ответы [ 3 ]

4 голосов
/ 01 сентября 2010

Вы правы в том, что вам нужен хук pretxnchangegroup, но вы не хотите проверять все новые ревизии - потому что люди будут исправлять ошибки, которые вы отклоняете в последующих наборах изменений, но если вы проверяете все наборы изменений, их работа будетникогда не приниматься!

Вместо этого либо просто проверьте все файлы во всех заголовках, либо используйте синтаксис hg status --rev x:y, чтобы получить список измененных файлов между ревизией, которая у вас уже есть, и ревизией, которую вы получаете.и проверяйте только эти файлы только в ревизии подсказки.

Если вы действительно хотите получить список всех ревизий, вы должны использовать revset (hg help revsets), новый в версии 1.6, но вы действительно хотите проверить толькорезультаты, а не все исправления, которые вас туда привели.

3 голосов
/ 08 февраля 2011

Я только что написал хук pretxnchangegroup, который делает именно это.Если вам нужны все файлы, которые были изменены в текущей группе изменений, вы можете получить объединение выходных данных этих двух команд:

hg status --rev $HG_NODE:

(обратите внимание на двоеточие в конце)

и

hg status --change $HG_NODE

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

В соответствии с http://www.selenic.com/mercurial/hgrc.5.html, "ID первого нового набора изменений находится в $ HG_NODE."

0 голосов
/ 23 декабря 2011

Помогает ли мой ответ на это вообще? https://stackoverflow.com/a/8615156/1025457

Это скелет хука группы pretxnchange, который перебирает узлы в группе изменений

...