Лучшая стратегия написания перехватчиков для подрывной деятельности в Windows [закрыто]
Вопрос
Как лучше всего написать крючки для Подрывная деятельность в Окна?Насколько я знаю, можно использовать только исполняемые файлы.Так какой же лучший выбор?
- Обычные пакетные файлы (очень ограниченные, но, возможно, подходят для очень простых решений)
- Выделенные скомпилированные исполняемые приложения (кувалда, чтобы разгадать суть?)
- Какой-то другой гибридный вариант (например, командный файл, запускающий сценарий 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!
Кстати, код был адаптирован из эта почта.
Другие советы
У нас есть сложные требования, такие как:
- Только определенные пользователи могут создавать папки в частях дерева SVN, но редактировать файлы там могут все.
- Некоторые расширения файлов не могут содержать определенный текст в файле.
- Некоторые расширения файлов могут храниться только в подмножестве каталогов.
- А также несколько более простых, таких как «Должен иметь комментарий к фиксации».
- Регрессионное тестирование можно протестировать, запустив новый хук для всех предыдущих коммитов 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# заключаются в том, что я могу повторно использовать фрагменты кода для создания новых перехватчиков позже, включая простой вывод журнала, который я создал для обработки журналирования перехватчиков.
Если у вас есть исполняемый файл PHP с помощью простого класса PHP, вы можете написать скрипт ловушки на PHP, как показано здесь. http://www.devhands.com/2010/01/subversion-hook-php-framework-in/