Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#19

AW: GIT-Submodul version auslesen

  Alt 26. Mai 2020, 16:52
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 'DBSQL-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"
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (26. Mai 2020 um 17:17 Uhr)
  Mit Zitat antworten Zitat