Хук Precommit для SVN, чтобы изменить файлы, которые будут зафиксированы в C # - PullRequest
4 голосов
/ 10 февраля 2010

Я хочу изменить определенным образом (на самом деле форматировать файлы в кодировщике кода), прежде чем они будут переданы в хранилище. Я узнал из Precommit example (Использовать guest в качестве имени и без пароля), как написать на python. Но я хочу знать, как получить список файлов для фиксации и других аргументов командной строки одно еще. Я предпочитаю написать свой собственный хук pre commit в C #, а не в Python или любом другом скрипте.

Несколько баллов Я напишу исполняемый файл, который будет форматировать, но я хочу, чтобы список файлов был зафиксирован Как настроить это с помощью SVN.

Ответы [ 4 ]

10 голосов
/ 12 февраля 2010

Предварительно обработанные хуки, которые изменяют зафиксированные файлы, считаются «плохой вещью»:

http://svnbook.red -bean.com / ен / 1,5 / svn.reposadmin.create.html # svn.reposadmin.create.hooks

Эта идея заслуживает большой красной рамки в официальной документации SVN и предупреждает, что это повлияет на плохую работу клиента SVN с хранилищем.

3 голосов
/ 10 февраля 2010

Первый параметр, переданный скрипту ловушки перед фиксацией, - это путь к текстовому файлу. Этот текстовый файл содержит все пути, которые должны быть зафиксированы, разделенные символами новой строки.

Но для вашей ситуации вам лучше использовать хук start-commit: этот скрипт вызывается непосредственно перед началом коммита, но после того, как пользователь выбрал файлы / папки для фиксации. Сценарий start-commit вызывается после того, как пользователь нажимает OK в диалоговом окне фиксации, и до того, как начинается фактическая фиксация. Этот хук имеет список именно того, что будет совершено.

1 голос
/ 10 февраля 2010

Как вы, возможно, уже прочитали, ловушка в subversion - это просто программа, вызываемая в определенное время в процессе фиксации с некоторыми параметрами и возвращаемым значением . Вы можете поместить любую исполняемую программу в каталог hook. Таким образом, вы также можете поместить туда любой файл .exe (который также может быть программой .Net). Затем проверьте аргументы командной строки и сделайте все, что вам нравится, и верните любое значение int как errorlevel.

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

1 голос
/ 10 февраля 2010

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

Чтобы ответить на ваш конкретный вопрос, используйте <a href="http://svnbook.red-bean.com/en/1.5/svn.ref.svnlook.c.changed.html" rel="nofollow noreferrer">svnlook changed</a>, чтобы получить список измененных файлов. svnlook dirs-changed выдаст вам каталоги, затронутые ожидающей транзакцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...