Najlepsza strategia pisania hooków dla subversion w Windows [zamknięty]

Jakie jest najlepsze podejście do pisania hooków dla Subversion w Windows ? Z tego co wiem, Można używać tylko plików wykonywalnych. Więc jaki jest najlepszy wybór?

  • zwykłe pliki wsadowe (bardzo ograniczone, ale być może OK dla bardzo prostych rozwiązań)
  • dedykowane skompilowane aplikacje wykonywalne (sledgehammer to crack a nutshell?)
  • Niektóre inne opcje hybrydowe (np. plik wsadowy uruchamiający skrypt Powershell)
Author: bahrep, 2008-08-07

6 answers

Spędziłem kilka dni na zwlekaniu z tym pytaniem. Dostępne są produkty innych firm i mnóstwo skryptów Perla i Pythona, ale chciałem czegoś prostego i języka, z którym byłem zaznajomiony, więc skończyło się na pisaniu hooków w aplikacji konsoli C#. Bardzo prosto:

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);
}

Możesz następnie wywołać to przy Pre commit, dodając pre-commit.plik cmd do folderu hooks repo z następującym wierszem:

[path]\PreCommit.exe %1 %2

Możesz rozważyć to przesada, ale ostatecznie to tylko kilka minut kodowania. Co więcej, korzystasz z pakietu językowego. NET, który IMHO jest znacznie lepszy od alternatyw. Będę znacznie rozszerzać moje Hooki i pisać odpowiednie testy na nich – jak również-trochę trudno to zrobić z plikiem wsadowym DOS!

BTW, kod został zaadaptowany z tego posta .

 6
Author: Troy Hunt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-29 07:18:49

Mamy złożone wymagania jak:

  1. tylko niektórzy użytkownicy mogą tworzyć foldery w częściach drzewa SVN, ale każdy może edytować tam pliki
  2. Niektóre rozszerzenia plików nie mogą zawierać określonego tekstu w pliku
  3. Niektóre rozszerzenia plików mogą być przechowywane tylko w podzbiorze katalogów
  4. jak również kilka prostszych takich jak, musi mieć commit comment
  5. testowanie regresji poprzez uruchomienie nowego Hooka względem wszystkich poprzednich commitów SVN

#5 jest ogromny dla nas, nie ma lepszego sposobu, aby wiedzieć, że nie złamiesz commitów, niż móc przepchnąć wszystkie poprzednie commity przez nowy hook. Uświadomienie hookowi, że 1234 był rewizją, a 1234-1 transakcją i dokonanie odpowiednich zmian argumentu podczas wywoływania svnlook, itp. to była najlepsza decyzja, jaką podjęliśmy podczas tego procesu.

Dla nas orzech stał się na tyle duży, że w pełni testowalny, testowalny regresyjnie, C # console exe miało największy sens. Mamy config pliki, które podają ograniczenia katalogów, analizują istniejący plik httpd_authz, aby uzyskać "uprzywilejowanych" użytkowników itp. Gdybyśmy nie działali w systemie Windows z. NET development work force, prawdopodobnie napisałbym to wszystko w Pythonie, ale ponieważ inni mogą potrzebować go wspierać w przyszłości, przeszedłem. NET .BAT,VBS, PowerShell.

Osobiście uważam, że Powershell różni się na tyle od. NET, że jest w większości bezużyteczny jako język "skryptowy". To dobrze, jeśli tylko linia cmd wsparcie dla produktu jest dostarczane przez PS (Exchange, Windows 2K8), itp. ale jeśli wszystko, co chcesz zrobić, to parsować jakiś tekst lub uzyskać dostęp do zwykłych obiektów. NET PS po prostu dodaje szaloną składnię i głupie bezpieczeństwo żelazną kurtynę do tego, co może być szybkie i łatwe trochę. NET aplikacji.

 4
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 17:52:09

W przeciwieństwie do innych programów, które nie są w pełni kompatybilne z platformą. NET, nie są w pełni kompatybilne z platformą. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net. net.]}

 2
Author: Sören Kuklau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-17 16:55:35

W zależności od złożoności, każda sytuacja jest inna, Jeśli po prostu przenoszę pliki, napiszę szybki plik wsadowy. Jeśli chcę zrobić coś bardziej skomplikowanego normalnie po prostu pomiń część skryptową i napisz szybki program c#, który sobie z tym poradzi.

W takim razie pytanie, czy wstawić ten program c# do svn i mieć go w wersji:)

Edit: zaletą dedykowanej aplikacji c# jest to, że mogę ponownie użyć fragmentów kodu, aby później utworzyć nowe Hooki, łącznie z prostym wyjściem dziennika, które stworzyłem, aby obsługiwać rejestrowanie haków.

 1
Author: Tanerax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-07 18:53:42

Pisałem Hooki w Pythonie Na Windows, ponieważ w sieci jest wiele przykładów (Zwykle dla Linuksa, ale różnice są niewielkie). Używamy również Trac zintegrowany z SVN i istnieje API Trac dostępne przez Python, który pozwala nam automatycznie tworzyć / modyfikować bilety Trac ze skryptów hook SVN.

 1
Author: Sean Carpenter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-08 20:41:59

Jeśli posiadasz plik wykonywalny php przy pomocy prostej klasy php możesz napisać skrypt Hooka w php tak jak jest pokazany tutaj http://www.devhands.com/2010/01/subversion-hook-php-framework-in/

 1
Author: Aleksandr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-14 21:05:27