Mit Bash versuch ich dann noch bissl rumzuspielen.
Nur nochmal zum Verstandnis.
Wir hatten Subversion mit FinalBuilder drin, und versuchen das Ganze nun auf mehrere Git-Repos umzusiedeln.
Der
FB bietet für
SVN standardmäßig eine Erweiterung, wo man direkt einige Statusinfos in Variablen schreiben lassen kann.
z.B. der Branch (das Verzeichnis), die Revision, das CommitDatum und von wem
http://help.finalbuilder.com/Index.h...rsion_info.htm
In Bezug auf Git gibt es soeine Status-Auslesefunktion nicht. Das Einzige was es gibt ist "Git Repository Status", was man eine
Exception werfen lassen kann, wenn es etwas zu Commiten gibt.
Auch alles andere, wie z.B. "Git Show Commit Logs" bietet keine Rückgaben, die man dann im
FB-Script auswerten kann.
Zusätzlich gibt es intelligenter Weise zwar ein "Git Generic" und "Subversion Generic", aber da war man so intelligent, dann man dort zwar Befehl und Parameter "frei" definieren kann, aber auch da gibt es keine Möglichkeit die Ausgabe in eine Variable oder eine Datei umzuleiten (um sie anschließend in eine Variable einzulesen).
http://help.finalbuilder.com/Index.h...ric_action.htm
Da es die Möglichkeit git "DOS"-Komandos auszuführen,
http://help.finalbuilder.com/Index.h...doscommand.htm
https://wiki.finalbuilder.com/displa...+Script+Action
hatte ich nun einfach versucht in einem Batch-Script ein/paar Aufrufe der git.exe zu verwenden, um mir dort die gewünschten Infos in eine Textdatei schreiben zu lassen.
branchname commithash* commitdate
oder, wenn Tag vorhanden
branchname version commithash* commitdate
> version = tag+commits
> * = dirty
also z.B.
master 7c8c3e76 2019-11-05 09:27
oder
master 19.10.02+37 7c8c3e76* 2019-11-05 09:27
.
Genommen wird das dann, um beim Build-Prozess im FinalBuilder nochmal anzeigen zu lassen was grade kompiliert wird,
sowie in der VersionsRessource der EXE/DLLs und im SlashScreen/InfoDialog des Programms für die Supporter
(menschenverständlich) die Version des Programms und für den Entwickler die Quellen/Versionen der einzelnen Repositories anzuzeigen.
Da war dann bissl stümperhaft, nach etwas rumprobieren, eine Batch entstanden, der man ein Git-Verzeichnis und eine Ziel-Textdatei gibt.
Die funktionierte dann erstmal (beim Testen und Rumspielen), wurde noch bissl kommentiert usw., aber nachdem es im FinalBuilder eingebaut war und nun auf alle Repositories und dessen Submodule losgelassen wurde, da stimmte nichts mehr.
die aktuellen Commit-Daten ... Datum, Name, Kommentar (%root%\
fb-git-ver.cmd)
Code:
rem ################################################
rem
fb-git-ver.cmd DIR DEST (für Versionsanzeige im FinalBuilder)
rem # Branch # Branch-References # Autor, Relative, CommitDate # Subject ## Message-Body
rem ## geo, 3 days ago, 2020-04-17 22:46:58 +0200
rem ## HEAD -> master, origin/master, origin/HEAD
rem ## Formular '
DB /
SQL-Stataments durchsuchen' anpassungen (#194)
rem ## ...
cd /d %1
git rev-parse --abbrev-ref HEAD>%~2
if errorlevel 1 exit 1
git show -s --format=format:"%%D %%n%%an, %%ar, %%ci %%n%%s %%n%%n%%b">>%2
rem "%~dp0_bpl\fart" --c-style %2 \n \r\n -- FART setzt den ErrorLevel (Anzahl der Ersetzungen) ... daher Replace anschließend im FinalBuilder
die Versionsinfo (%root%\
fb-git-id.cmd)
Code:
rem ################################################
rem
fb-git-id.cmd DIR DEST [name/short] (für Version.inc und VersionInfo.rc:FileDescription)
rem # master 19.10.02-37-g7c8c3e76* 2019-11-05T09:27:17+01:00
rem ## master 7c8c3e76 2019-11-05 09:27 (ohne Version-Tag)
rem ## master 19.10.02+37 7c8c3e76* 2019-11-05 09:27 (Version-Tag vorhanden, Short=ohne CommitDate)
cd /d %1
set mode=%~3
if "%mode%"=="short" (
git describe --tags --always --dirty=*>%~2
find - %2 >nul
if errorlevel 1 set mode=
)
git rev-parse --abbrev-ref HEAD>%~2
if errorlevel 1 exit 1
if "%mode%"=="branch" exit /b 0
git describe --tags --always --dirty=*>>%~2
if not "%mode%"=="short" git show -s --format=format:"%%ci">>%~2
rem "%~dp0_bpl\fart" --c-style %2 \n " " -- FART setzt den ErrorLevel (Anzahl der Ersetzungen) ... daher Replace anschließend im FinalBuilder
rem RegexReplace im
FB: "-(\d+)-g([0-9a-f]{8})" -> "+$1 $2"
rem RegexReplace im
FB: "(\d\d\d\d-\d\d-\d\d)[T ](\d\d:\d\d):\d\d([ ]?[+-]\d\d:\d\d)" -> "$1 $2"
und die eigentliche Arbeit (%root%\
fb-work.cmd)
Code:
rem Variable: GitCommit, GitBranch, GitVersion
call %root%\
fb-git-ver.cmd "%root%\MAIN" "%root%\
fb-ver-commit.txt"
call %root%\
fb-git-id.cmd "%root%\MAIN" "%root%\
fb-ver-branch.txt" branch
call %root%\
fb-git-id.cmd "%root%\MAIN" "%root%\
fb-ver-short.txt" short
rem Variable: Temp1 bis Temp4
call %root%\
fb-git-id.cmd "%root%\MAIN" "%root%\
fb-ver-main.txt"
call %root%\
fb-git-id.cmd "%root%\ExternKomponenten" "%root%\
fb-ver-extern.txt"
call %root%\
fb-git-id.cmd "%root%" "%root%\
fb-ver-root.txt"
call %root%\
fb-git-id.cmd "%root%\PSQL" "%root%\
fb-ver-psql.txt"