Лучшая стратегия писать крючки для подрывной деятельности в ОС Windows

голоса
17

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

  • Простые командные файлы (очень ограничены, но, возможно, хорошо для очень простых решений)
  • Выделенные скомпилированные исполняемые приложения (кувалду, чтобы взломать скорлупу?)
  • Некоторый другой гибридный выбор (например, пакетный файл, запущенный скрипт Powershell)
Задан 07/08/2008 в 19:47
источник пользователем
На других языках...                            


6 ответов

голоса
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!

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

Ответил 29/07/2009 в 08:03
источник пользователем

голоса
4

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

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

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

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

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

Ответил 19/08/2008 в 18:52
источник пользователем

голоса
2

Проверьте Капитан Крюк «простую структуру плагин для написания Subversion крючков с использованием .NET».

Ответил 17/08/2008 в 17:55
источник пользователем

голоса
1

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

Ответил 14/01/2010 в 22:05
источник пользователем

голоса
1

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

Ответил 08/08/2008 в 21:41
источник пользователем

голоса
1

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

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

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

Ответил 07/08/2008 в 19:53
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more