Лучшая стратегия для написания хуков для Subversion в Windows [закрыто]

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

  • Простые пакетные файлы (очень ограниченные, но, возможно, хорошо для очень простых решений)
  • Выделенные скомпилированные исполняемые приложения (кувалда, чтобы взломать немного?)
  • Какой-то другой гибридный выбор (например, пакетный файл, запускающий скрипт Powershell)
7.08.2008 18:47:50
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);
}

Затем вы можете вызвать это при предварительной фиксации, добавив файл pre-commit.cmd в папку «Хуки» репо со следующей строкой:

[path]\PreCommit.exe %1 %2

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

Кстати, код был адаптирован из этого поста .

7
29.07.2009 07:18:49

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

Тогда возникает вопрос: вы помещаете эту программу на c # в svn и хотите, чтобы она была версионной? :)

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

1
7.08.2008 18:53:42

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

1
8.08.2008 20:41:59

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

2
17.08.2008 16:55:35
Убедитесь, что получили файл патча тоже. Исправляет 2 ошибки
Greg Woods 28.07.2011 10:41:18

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

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

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

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

Лично я думаю, что Powershell достаточно отличается от .NET, чтобы быть бесполезным в качестве языка сценариев. Хорошо, если единственная поддержка cmd line для продукта предоставляется через PS (Exchange, Windows 2k8) и т. Д., Но если вам нужно только проанализировать текст или получить доступ к обычным объектам .NET, PS просто добавляет сумасшедший синтаксис и глупую Security Iron Занавес к тому, что могло быть быстрым и легким приложением .NET.

5
19.08.2008 17:52:09

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

1
14.01.2010 21:05:27
Это не работает на Windows, вам нужно иметь пакетный или исполняемый файл, который запускает скрипт php.
Joeri Sebrechts 17.04.2013 10:00:03