Bazaar: автоматическая модификация файла при фиксации с внесенной модификацией - PullRequest
2 голосов
/ 03 августа 2011

Я бы хотел, чтобы базар записал номер ревизии при коммите в файл в ветке коммитов, чтобы эта модификация была включена в коммит.

Я посмотрел на хуки, но хук pre_commit запускается только после создания набора изменений, поэтому выполненное им изменение не зафиксировано.

Я нашел связанный вопрос: Bazaar: изменить содержимое файла перед фиксацией через хук? однако предлагаемое решение bzr-Keywords не работает, так как его преобразование записи не применяется при коммите:

`` bzr commit`` неявно не применяет конвертеры записи после подходящие файлы. Если это имеет смысл для данного плагина, обеспечивающего фильтр содержимого, плагин обычно может достичь этого эффекта с помощью `` start_commit`` или `` post_commit`` hook.

, которая возвращает меня к проблеме ловушки pre_commit.

Моя причина для этого: мое программное обеспечение считывает свою версию из файла версии при компиляции. Версия состоит из основного номера, номера филиала и номера редакции (например, 5.3.78). Я хочу, чтобы bazaar автоматически записывал актуальную версию в файл версий при фиксации.

Ответы [ 2 ]

4 голосов
/ 03 августа 2011

Вы должны использовать start_commit ловушку, потому что это единственный способ изменить файл перед фиксацией: http://doc.bazaar.canonical.com/bzr.2.3/en/user-reference/hooks-help.html#start-commit

start_commit

Вызывается перед выполнением фиксации в дереве,Хук start commit может изменить дерево до того, как будет выполнен коммит.start_commit вызывается с bzrlib.mutabletree.MutableTree, на котором выполняется фиксация.

2 голосов
/ 03 августа 2011

У меня есть скрипт плагина, который подключается к start_commit, который называется start_commit.py.Это вызывает сценарий оболочки с именем .startcommit из базы дерева проекта каждый раз, когда происходит фиксация.Я использую это с данными Главной книги, чтобы сбросить все мои балансы для проверки перед каждой фиксацией.

Я не написал этот плагин, и я не могу определить, откуда я его получил, с помощью быстрого поиска, поэтому вотисточник (~ / .bazaar / plugins / start_commit.py):

from bzrlib import errors, mutabletree

def start_commit(tree):
    """This hook will execute tree/on-commit."""
    import os,subprocess
    from bzrlib import errors
    abspath = tree.abspath('.startcommit')
    # if there is no on-commit, bail
    if not os.path.exists(abspath):
        return
    try:
        subprocess.check_call(abspath)
    # if precommit fails (process return not zero) cancel commit.
    except subprocess.CalledProcessError:
        raise errors.BzrError("on-commit failed")

mutabletree.MutableTree.hooks.install_named_hook('start_commit', start_commit, 
    "tree on-commit")

Если кто-то знает, я был бы рад отдать должное первоначальному автору за этот фрагмент.В противном случае, я надеюсь, это поможет!

...