Автоматизация запросов на просмотр с помощью ReviewBoard и Mercurial с использованием хуков Python - PullRequest
2 голосов
/ 06 октября 2011

Вот моя проблема:

У меня есть удаленный ртутный репозиторий, в котором будет настраиваться ловушка либо входящая, либо группа изменений, и я установил ReviewBoard на другом сервере.Идея состоит в том, чтобы автоматизировать генерацию заявок на просмотр по запросу от разработчиков в удаленный репозиторий.Конечно, мне нужен хук, который вызывает пост-рецензирование, в котором также используется пользователь submit-as, извлеченный с использованием mercurial api (ctx.user ()), иначе все заявки на запросы рецензирования будут принадлежать имени пользователя, которыйподключает удаленный репозиторий к серверу обзоров.

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

post-review --revision-range=previoustip:newtip --submit-as=ctx.user() 

Если у вас есть идеи, как решить проблему, я был бы счастлив.Я пишу крючок в Python, очевидно.

1 Ответ

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

Не уверен, что это именно то, что вам нужно, но это то, что я использую для выполнения проверки сообщения коммита в почти одинаковых обстоятельствах, он должен проверять каждое изменение и проверять информацию на основе пользователя.Точно так же мне нужно проверить пользователя, для которого предназначен список изменений, а не «толкающего» пользователя.Должно быть довольно легко сделать что-то вроде создания наборов изменений для конкретного пользователя и начальных и конечных ревизий в «чанках», в то же время просматривая изменения в группе изменений.

Возвращение происходит потому, что оноиспользуется в качестве крючка pretxnchangegroup

def checkAllCommitMessage(ui, repo, node, **kwargs):
    """    
    Checks all inbound changeset messages from a push for adherence to the commit message rules.
    """

    # for each change being submitted
    # get all the details, and call the trigger
    fail = False

    for rev in xrange(repo[node].rev(), len(repo)):
        # get context (change)
        ctx = repo[rev]

        # user who commited the change (NOT necessarily the one who is doing push)
        user = ctx.user()

        # do the hook stuff here...
        # set fail to True if something goes wrong

    return fail
...