Сведения о вопросе

None

16:03, 1st July, 2020

Теги

svn   hook   svn-hooks    

Лучшая стратегия для написания хуков для subversion в Windows

Просмотров: 515   Ответов: 6

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

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



  Сведения об ответе

lool

18:03, 1st July, 2020

Я только что провел несколько дней, откладывая именно этот вопрос. Есть сторонние продукты, доступные и множество сценариев 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 в папку hooks РЕПО со следующей строкой:

[path]\PreCommit.exe %1 %2

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

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


  Сведения об ответе

appple

18:03, 1st July, 2020

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

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

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

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

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


  Сведения об ответе

DO__IT

18:03, 1st July, 2020

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


  Сведения об ответе

lats

18:03, 1st July, 2020

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


  Сведения об ответе

Chhiki

18:03, 1st July, 2020

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


  Сведения об ответе

lats

18:03, 1st July, 2020

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

Тогда вопрос в том, помещаете ли вы эту программу c# в svn и имеете ли ее версию :)

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться