Cea mai bună strategie pentru scrierea de cârlige pentru subversiune în Windows

Care este cea mai bună abordare pentru scrierea cârligelor pentru Subversiunea în Windows ? Din câte știu, pot fi utilizate numai fișiere executabile. Care este cea mai bună alegere?

  • Fișiere standard (foarte limitate, dar probabil OK pentru soluții foarte simple)
  • Aplicații executabile dedicate (chei pentru a sparge o coajă?)
  • Unele alte opțiuni hibride (ca un fișier batch care rulează un script Powershell)
0
fr hi bn

6 răspunsuri

În funcție de complexitate, fiecare situație este diferită. Dacă aș fi pur și simplu să mișc fișiere în jur, voi scrie un fișier batch rapid. Dacă vreau să fac ceva mai complex, în mod normal, trebuie doar să sărind partea de scripting și să scriu un program C# rapid care să o poată rezolva.

Întrebarea atunci este să puneți acest program C# în svn și să îl versați :)

edit: The benefits of a dedicated C# application is that I can reuse code fragments to create new hooks later, including a simple log output I created to handle hook logging.

0
adăugat

Tocmai am petrecut câteva zile amânând exact această întrebare. Există produse terțe disponibile și o mulțime de scripturi PERL și Python, dar am vrut ceva simplu și o limbă pe care am fost familiarizată cu așa a ajuns până la scrierea de cârlige într-o aplicație consola C #. E foarte direct înainte:

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

Apoi, puteți invoca acest lucru pe pre-comiterea prin adăugarea unui fișier pre-commit.cmd în folderul de cârlige al repo-ului cu următoarea linie:

[path]\PreCommit.exe %1 %2

Puteți lua în considerare această depășire, dar în cele din urmă este doar câteva minute de codificare. Mai mult, beneficiați de avantajul suitei de limbi .NET, care IMHO este mult mai preferabilă decât alternativele. Voi extinde în mod semnificativ cârligele și voi scrie și teste adecvate împotriva lor? bit greu pentru a face acest lucru cu un fișier DOS lot!

BTW, codul a fost adaptat din această postare .

0
adăugat

Verificați CaptainHook , "un cadru simplu de plugin pentru scrierea de cârlige subversion folosind .NET".

0
adăugat
Asigurați-vă că ați primit și fișierul cu patch-uri. Repară două bug-uri
adăugat autor Greg Woods, sursa

Am scris cârlige în Python pe Windows, deoarece există multe exemple pe net (de obicei pentru Linux, dar diferențele sunt mici). De asemenea, folosim Trac integrat cu SVN și există un API Trac accesibil prin Python care ne permite să creăm / modificăm automat Trac bilete de la scripturile SVN.

0
adăugat

Avem cerințe complexe precum:

  1. Numai anumiți utilizatori pot crea foldere în părți ale copacului SVN, dar toată lumea poate edita fișiere acolo
  2. Anumite extensii de fișiere nu pot conține anumite fișiere în fișierul
  3. Anumite extensii de fișiere pot fi stocate numai într-un subset de directoare
  4. Pe lângă câteva dintre cele mai simple, trebuie să aibă un comentariu de comitet
  5. Regresie testabilă prin rularea unui nou cârlig împotriva tuturor comitetelor SVN anterioare

# 5 este imens pentru noi, nu există nici o modalitate mai bună de a ști că nu veți pedepsi angajamentele înainte de a fi în măsură să împingă toate comitetele anterioare prin noul dvs. cârlig. Făcând cârligul să înțeleagă că 1234 a fost o revizuire și 1234-1 a fost o tranzacție și a face modificările potrivite ale argumentului atunci când a sunat svnlook etc., a fost cea mai bună decizie pe care am făcut-o în timpul procesului.

Pentru noi, piulița a ajuns destul de mare încât o simplă contabilitate de testare reglabilă, care poate fi verificată, reglabilă C#, a făcut cel mai mult sens. Avem fișiere de configurare care alimentează restricțiile din director, parcurg fișierul httpd_authz existent pentru a obține utilizatorii "privilegiați", etc. Dacă nu am fi difuzat pe Windows cu o forță de lucru .NET, am fi scris probabil totul în Python, dar deoarece alții ar putea avea nevoie să o susțină în viitor, am trecut .NET peste .BAT, .VBS, Powershell silliness.

Personal, cred că Powershell este destul de diferit de la .NET ca fiind mai mult inutil ca limbă "scripting". Este bine dacă singurul suport CMD pentru un produs vine prin PS (Exchange, Windows 2k8) etc., dar dacă tot ce vrei să faci este să parsezi un text sau să accesezi obiecte obișnuite .NET PS doar adaugă o sintaxă nebună și un fier Cortina pentru ceea ce ar putea fi o aplicație rapidă și ușoară .NET.

0
adăugat

If you have a PHP executable with a help of simple PHP class you may write hook script in PHP like it is shown here http://www.devhands.com/2010/01/subversion-hook-php-framework-in/

0
adăugat
Acest lucru nu funcționează pe ferestre, trebuie să aveți un fișier lot sau exe care lansează scriptul php.
adăugat autor Joeri Sebrechts, sursa