Emulieren subwcrev bei der Verwendung von git-svn

8

Ich verwende git-svn, um mit einem vorhandenen SVN-Repository zu interagieren, das einige C ++ - Projekte enthält. subwcrev.exe wird als Pre-Build-Ereignis verwendet, um einige Zeichenfolgen in einem C ++ - Header (svnversion.h) zu aktualisieren. Diese Zeichenfolgen werden hardcompiled, um einige Versionsinformationen für die resultierende Binärdatei zu erstellen.

Da subwcrev die Verwendung von .svn-Metadaten erfordert, wird das Pre-Build-Ereignis fehlschlagen, wenn es auf der Arbeitskopie git-svn verwendet wird. Also habe ich das folgende Bash-Skript entwickelt, das ich als Post-Commit- und Post-Checkout-Hooks für mein Git-Repository verwende. Das Skript versucht dasselbe wie subwcrev zu tun, basierend auf der Ausgabe von git svn info (zwischengespeichert in einer lokalen Datei).

%Vor%

Was ich nicht wirklich emulieren kann, ist die automatische Erkennung von lokalen nicht festgeschriebenen Änderungen (basierend auf der letzten ausgecheckten SVN-Revision), die subwcrev so nützlich macht.

Ich ersetze $WCREV$ durch die Revisionsnummer des SVN-Repositorys (wie subwcrev es tun würde), aber dieses Mal füge ich meinen abgekürzten Git-Commit-Hash hinzu, um den von mir kompilierten Code zu identifizieren. Meine Frage ist nun: Gibt es eine Möglichkeit, in einem Shell-Skript zu unterscheiden, ob mein aktueller HEAD von der letzten abgerufenen SVN-Revision abweicht, so dass ich den -${gitcommit} -Teil weglassen und $WCMODS$ auf false setzen konnte?

Wenn es so etwas wie einen post-"git svn dcommit" Hook gäbe, wäre auch mein Problem gelöst, denn dann würde dieser spezielle Hook die svnversion.h anders erstellen. Kann ein solcher Haken irgendwie hinzugefügt werden?

    
fawick 23.12.2009, 17:06
quelle

2 Antworten

0

Ich verstehe Ihre Punkte nicht wirklich, aber fangen Sie an, zuerst Ihr Skript zu verbessern.

%Vor%

Dann könnten Sie bitte in for loop erklären, was Sie brauchen? Können Sie ein Beispiel von svnversion_template.h anzeigen?

    
BMW 05.02.2014 11:19
quelle
0

Es sieht also so aus, als müssten Sie den Inhalt der git svn info -Abfrage selbst parsen, um zu bekommen, was normalerweise in WCREV gespeichert ist. Die Beispielergebnisse sehen für mich so aus:

%Vor%

Nun zum zweiten Teil Ihrer Frage, ob Sie feststellen können, ob Ihr git HEAD mit dem letzten svn checkout übereinstimmt, müssen Sie den Befehl git diff git-svn command verwenden. "git-svn" hier ist der Name des Zweigs, den das Programm git-svn verwaltet, und wenn alles auf dem neuesten Stand ist, sind die Ergebnisse leer.

    
user4953660 29.05.2015 17:32
quelle

Tags und Links