GIT in Lazarus Versionsinformation

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
schoschy
Beiträge: 20
Registriert: Di 18. Okt 2022, 15:46

GIT in Lazarus Versionsinformation

Beitrag von schoschy »

Hey,

ich bin auf der Suche nach einem Automatismus, mit welchem GIT Informationen in die Project Options > Version Info übertragen werden können.
Hat jemand damit Erfahrung?

Primär geht es mir um eine Erkennung von commits in meiner Testumgebung, da hier gerne mal mehrere VM's auf unterschiedlichsten Versionen des aktuellen Tests basieren.
Mittels svn2revisioninc habe ich Informationen vorliegen, welche mit dem letzten commit übereinstimmen.
Sind aber nur die ersten 7 Zeichen, weshalb ich hier etwas basteln würde, welches branch usw. noch aufbereitet.

Wenn eine commit-Erkennung nicht Realisierbar ist, muss ich wohl noch etwas mehr dazu bauen, sollte aber auch kein Problem darstellen.
---
Geplant als Skript in etwa so:
  • Compilieren
  • die Funktion "Automatically increase build number" in Version-Info verwenden und im commit als Referenz mitgeben.
  • commit mit generierten Werten
  • Comments o.ä. in Version info mit commit verknüpfen
  • compilieren ohne debugger für die Zielsysteme

Jegliche Ideen und Hinweise sind gerne gesehen, da ich dieses Verfahren in vielen Projekten implementieren wollen würde.

Schoschy

Bin am Montag wieder da

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: GIT in Lazarus Versionsinformation

Beitrag von af0815 »

Bei GIT ist davon auszugehen, das die ersten 7 Stellen signifikant genug sind. Was man damit nicht unbedingt findet, ist in welchen Branch sich der Commit befindet. Wäre es nicht besser sich die Informationen direkt von GIT zu holen (zB. git show )
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

schoschy
Beiträge: 20
Registriert: Di 18. Okt 2022, 15:46

Re: GIT in Lazarus Versionsinformation

Beitrag von schoschy »

Moin,
af0815 hat geschrieben:
Fr 3. Feb 2023, 13:55
Bei GIT ist davon auszugehen, das die ersten 7 Stellen signifikant genug sind. Was man damit nicht unbedingt findet, ist in welchen Branch sich der Commit befindet. Wäre es nicht besser sich die Informationen direkt von GIT zu holen (zB. git show )
wie ich die Daten aus GIT bekomme ist soweit klar. jetzt stellt sich die Frage, wie ich diese in die Version Info einpflege - Punkt 4.
Ich gehe mal davon aus, dass ich hier auch Hand anlegen muss.

Die Parameter sind in der project.lpi ja vorhanden:

Code: Alles auswählen

    <VersionInfo>
      <UseVersionInfo Value="True"/>
      <MajorVersionNr Value="1"/>
      <MinorVersionNr Value="1"/>
      <RevisionNr Value="1"/>
      <BuildNr Value="1"/>
      <Language Value="0407"/>
      <StringTable Comments="1" CompanyName="2" FileDescription="3" InternalName="4" LegalCopyright="5" LegalTrademarks="6" OriginalFilename="7" ProductName="8" ProductVersion="9"/>
    </VersionInfo>

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: GIT in Lazarus Versionsinformation

Beitrag von af0815 »

In jedem Projekt kann Scripts vor und nach dem kompilieren ausführen. Da kann man vorher die Projektdatei mit den neuen Infos per Script versorgen. Lazarus bindet meines Wissens die Projektinformationen per include ein.

Die Frage ist, wo und wie du die Informationen später anzeigen willst. Soll es zB. im Explorer sichtbar sein, so bleibt die vermutlich kein anderer Weg über als die Projektdatei zu patchen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

schoschy
Beiträge: 20
Registriert: Di 18. Okt 2022, 15:46

Re: GIT in Lazarus Versionsinformation

Beitrag von schoschy »

Es geht wohl alles in Richtung Skript

Code: Alles auswählen

xmlstarlet ed -u "/CONFIG/ProjectOptions/VersionInfo/BuildNr/@FileDescription" --value "NewFileDescription" <project.lpi>

output:
<StringTable Comments="1" CompanyName="2" FileDescription="NewFileDescription" InternalName="4" ...>

#gitbranch

#!/bin/sh
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
Alles weitere in der internen Verarbeitungsroutine denk ich mir dann noch aus ;)

Danke soweit.

Edit: ich häng hier mal die Quick and Dirty variante an. Kann sich rauspicken, wer was braucht.

Code: Alles auswählen

#!/bin/sh
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
commit=$(git rev-parse --verify HEAD)
buildNo=$(xmlstarlet sel -t -c "/CONFIG/ProjectOptions/VersionInfo/BuildNr" Test.lpi | sed -n -E 's/(^|.*[^0-9])([0-9]{1,5}).*/\2/p')

read -p "enter further comments to commit: " appendCommit

git add .
git add -u
git commit -m "build:$buildNo - $appendCommit"
xmlstarlet ed -L -u "/CONFIG/ProjectOptions/VersionInfo/StringTable/@FileDescription" --value "branch: $branch commit: $commit" Test.lpi

Antworten