2008-08-07 6 views
17

Каков наилучший подход, чтобы написать крючки для Subversion в Windows,? Насколько мне известно, могут использоваться только исполняемые файлы. Итак, что является лучшим выбором?Лучшая стратегия писать крючки для подрывной деятельности в ОС Windows

  • Plain Пакетные файлы (очень ограничены, но, возможно, хорошо для очень простых решений)
  • Посвящается скомпилированные исполняемые приложения (кувалду, чтобы взломать скорлупу?)
  • Некоторые другие гибридные выбора (например, пакетный файл запуска Powershell скрипт)

ответ

6

Я только что провел несколько дней, откладывая именно на этот вопрос. Есть сторонние продукты и множество скриптов PERL и Python, но мне нужно было что-то простое, и язык, с которым я был знаком, закончил тем, что просто написал крючки в консольном приложении C#. Это очень прямо вперед:

public void Main(string[] args) 
{ 
    string repositories = args[0]; 
    string transaction = args[1]; 

    var processStartInfo = new ProcessStartInfo 
          { 
          FileName = "svnlook.exe", 
          UseShellExecute = false, 
          CreateNoWindow = true, 
          RedirectStandardOutput = true, 
          RedirectStandardError = true, 
          Arguments = String.Format("log -t \"{0}\" \"{1}\"", transaction, repositories) 
          }; 

    var p = Process.Start(processStartInfo); 
    var s = p.StandardOutput.ReadToEnd(); 
    p.WaitForExit(); 

    if (s == string.Empty) 
    { 
    Console.Error.WriteLine("Message must be provided"); 
    Environment.Exit(1); 
    } 

    Environment.Exit(0); 
} 

Вы можете вызвать это на предварительно совершить, добавив предварительно commit.cmd файл в папку крючками репо со следующей строкой:

[path]\PreCommit.exe %1 %2 

Вы можете рассмотрим этот излишний, но в конечном итоге это всего лишь несколько минут кодирования. Более того, вы получаете преимущество языкового пакета .NET, который IMHO гораздо предпочтительнее альтернатив. Я значительно расширю свои крючки и напишу соответствующие тесты против них - немного сложно сделать это с помощью командного файла DOS!

BTW, код был изменен с this post.

1

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

вопроса, то есть вы вкладываете, что C# программу в SVN и он версионируется :)

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

1

Я написал крючки в Python на Windows, так как в сети много примеров (обычно для Linux, но различия невелики). Мы также используем Trac, интегрированный с SVN, и есть API-интерфейс Trac, доступный через Python, который позволяет нам автоматически создавать/изменять билеты Trac из сценариев крюка SVN.

2

Check CaptainHook, «простой плагин для написания крючков Subversion с использованием .NET».

+0

Убедитесь, что получить патч-файл тоже. Он исправляет 2x ошибки – 2011-07-28 10:41:18

4

У нас есть сложные требования, как:

  1. Только некоторые пользователи могут создавать папки в части дерева SVN, но каждый может редактировать файлы там
  2. Некоторые расширения файлов не могут содержать определенный текст в файле
  3. Некоторые расширения файлов могут быть сохранены только в подмножестве каталогов
  4. , а также несколько более простых, как, должны иметь коммита комментарий
  5. регрессия проверяемые по ру nning новый крюк против всех предыдущих компромиссов SVN

# 5 Огромный для нас, нет лучшего способа узнать, что вы не собираетесь прерывать движение вперед, чем иметь возможность проталкивать все предыдущие фиксации через ваш новый крюк. Подводя крючок, понимаем, что 1234 была пересмотреной, а 1234-1 была транзакцией и внесение соответствующих изменений аргументов при вызове svnlook и т. Д. Было лучшим решением, которое мы приняли во время процесса.

Для нас гайка была достаточно большой, чтобы полностью проверяемая единица, проверяемая регрессия, C# console exe имела наибольший смысл. У нас есть файлы конфигурации, которые кормят ограничения каталога, анализируют существующий файл httpd_authz, чтобы получить «привилегированных» пользователей и т. Д. Если бы мы не работали в Windows с рабочей силой разработки .NET, я бы, вероятно, написал все это на Python, но так как другим может потребоваться поддержка в будущем, я пошел .NET поверх .BAT, .VBS, Powershell глупость.

Лично я считаю, что Powershell отличается от .NET тем, что в большинстве своем бесполезен как «скриптовый» язык. Это хорошо, если единственная поддержка линии cmd для продукта поставляется через PS (Exchange, Windows 2k8) и т. Д., Но если все, что вы хотите сделать, это разобрать какой-либо текст или получить доступ к обычным объектам .NET. PS просто добавляет сумасшедший синтаксис и глупое железо безопасности Занавес к тому, что может быть быстрым и легким маленьким .NET-приложением.

1

Если у вас есть PHP исполняемый файл с помощью простого класса PHP вы можете написать скрипт ловушки в PHP, как показано здесь http://www.devhands.com/2010/01/subversion-hook-php-framework-in/

+0

Это не работает в Windows, вам нужно иметь пакетный или exe-файл, который запускает скрипт php. – 2013-04-17 10:00:03

Смежные вопросы