GIT pre-commit Codingstyle check

Crash123

Erfahrenes Mitglied
Hallo Leute :D

ich möchte pre-commit einen Codingstyle check ausführen,
wenn der negativ ausfällt soll nicht commitet werden.
Hab mich etwas belesen und gesucht.
Ich weiß dass man im ordner .git/hooks ein script
hinterlegen kann namens "pre-commit" dass dann ausgeführt
wird.
Nun muss ich euch ehrlich sagen, dass ich mich damit nicht
besonders lange aufhalten wollte und mir nicht umständlich
ein eigenes Script schreiben wollte.
Daher hatte ich gehofft, dass mir jemand vielleicht einen
Link senden kann, wo ich ein solches Script finde und
welche externen Programme ich brauche.

Ich würde gern Java und C# codingconventions
checken.

Vielen Dank ;-)
 

Crash123

Erfahrenes Mitglied
Danke für die rasche Antwort.

auf checkstyle bin ich auch schon gestoßen, sieht auch
sehr nach etwas nützlichem aus, hab das PlugIn gleich
in der Eclipse übernommen ;-)

Aber wie sähe denn mein pre-commit script aus?

Für C# habe ich https://stylecop.codeplex.com/
gefunden, habe dazu aber noch kein cmd-tool gesehen.

Vielen Dank
 

Crash123

Erfahrenes Mitglied
sorry übersehen :-/

aber es funktioniert nicht q.q
Ich habe die Pfade direkt angegeben
Code:
$check_file = "D:/etc/.git/java-codingstyle.xml";
$checkstyle_jar = "D:/etc/.git/checkstyle-6.15-all.jar";
$java_command = "java";
Beim Commit läuft es auch ohne Fehler durch
aber eben auch bei Files die nicht dem Codingstyle
entsprechen.
Hast du da noch ne Lösung oder jemand anders?
Ich kenn die Sprache nicht in der das Script geschrieben
ist, also fällt es mir schwer da Fehler zu finden.

EDIT:
Ich habe es auf folgendes Problem reduzieren können:
Die die Funktion in der IF-Abfrage
Code:
if (&run_and_log_system ($command))
  {
    print "in if";
  print STDERR "Commit aborted.\n";
  exit -1;
  }
liefert immer 0 auch wenn es WARNINGS gibt.
 
Zuletzt bearbeitet:

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

soweit ich weiss gehört der Pre-Commit-Hook auf den Server. Läuft dieser wirklich unter Windows / Stimmt der Pfad zum Checkstyle?
Hast du mal testweise ein "exit -1;" relativ am Anfang des Scripts eingebaut?

Grüsse,
BK
 

Crash123

Erfahrenes Mitglied
Hi,
pre-commit läuft bei mir local, dazu gibt es ja
den .git/hooks/ Ordner. Ob man pre-commit auch
auf dem Server hinterlegen kann, weiß ich nicht
aber auf jeden fall ein pre-receive.
Naja
ich habe das Problem gelöst/umgangen
Code:
...
if ($#java_files >= 0)
{
  if (&run_and_log_system ($command) != -1)
  {
  print STDERR "Commit aborted.\n";
  exit -1;
  }
}

exit 0;

sub run_and_log_system
{
  ($cmd) = @_;

  my $str = `$cmd`;
  print $str;
  
  index($str,"[WARN]");  
}

EDIT:
Ist nicht schön aber es soll mir reichen.

Danke für eure Hilfe