Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Лучшая стратегия для написания хуков для subversion в Windows
Каков наилучший подход к написанию крючков для Subversion в Windows ? Насколько я знаю, можно использовать только исполняемые файлы. Так что же является лучшим выбором?
- Простые пакетные файлы (очень ограниченные, но возможно OK для очень простых решений)
- Выделенные скомпилированные исполняемые приложения (кувалда, чтобы расколоть ореховую скорлупу?)
- Некоторые другие гибридные варианты (например, пакетный файл, выполняющий сценарий 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 в папку hooks РЕПО со следующей строкой:
[path]\PreCommit.exe %1 %2
Вы можете считать это излишним, но в конечном счете это всего лишь несколько минут кодирования. Более того, вы получаете преимущество языкового пакета .NET, который IMHO намного предпочтительнее альтернативных вариантов. Я значительно расширю свои крючки и напишу соответствующие тесты против них – а также-немного трудно сделать это с помощью пакетного файла DOS!
BTW, код был адаптирован с этого поста .
У нас есть сложные требования, такие как:
- Только некоторые пользователи могут создавать папки в частях дерева SVN, но каждый может редактировать файлы там
- Некоторые расширения файлов не могут содержать определенный текст в файле
- Некоторые расширения файлов могут храниться только в подмножестве каталогов
- А также несколько более простых, таких как, должен иметь комментарий commit
- Регрессия тестируется путем запуска нового крюка против всех предыдущих коммитов 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 приложением.
Проверьте CaptainHook, "простой фреймворк плагина для написания Subversion-хуков с использованием .NET".
Если у вас есть исполняемый файл php с помощью простого класса php, вы можете написать скрипт hook в php, как показано здесь http://www.devhands.com/2010/01/subversion-hook-php-framework-in/
Я написал крючки в Python на Windows, так как в сети есть много примеров (обычно для Linux, но различия невелики). Мы также используем Trac , интегрированную с SVN, и есть Trac API, доступная через Python, которая позволяет нам автоматически создавать / изменять Trac билеты из SVN Крюковых скриптов.
В зависимости от сложности, каждая ситуация отличается, если я просто перемещаю файлы, я напишу быстрый пакетный файл. Если я хочу сделать что-то более сложное, я обычно просто пропускаю часть сценариев и пишу быструю программу c#, которая может справиться с этим.
Тогда вопрос в том, помещаете ли вы эту программу c# в svn и имеете ли ее версию :)
edit: преимущества выделенного приложения c# заключаются в том, что я могу повторно использовать фрагменты кода для создания новых крючков позже, включая простой вывод журнала, который я создал для обработки ведения журнала крючков.