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

StackOverflow https://stackoverflow.com/questions/5134

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

Решение

Я только что провел несколько дней, откладывая именно этот вопрос.Доступны продукты сторонних производителей и множество скриптов 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, который, по моему мнению, гораздо предпочтительнее альтернатив.Я значительно расширим свои возможности и напишу для них соответствующие тесты — немного сложно сделать это с помощью пакетного файла DOS!

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top