2011-10-06 10 views
2

Вот моя проблема:Automating Обзора запросы с ReviewBoard и Mercurial с помощью Python перехватывает

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

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

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

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

ответ

7

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

Ответное потому, что она используется в качестве 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 
+0

только вернулся из моих рождественских каникул :). даст вам попробовать и держать вас в курсе (и обновленные точки). –

+0

Я этого не забыл. В последнее время у меня много дел. –

+0

Спасибо, что мне нужно. Ответ принят :). Извините за очень поздний ответ. был сумасшедшим 3 месяца. –