Een Gambas programma heeft een versienummer dat bestaat uit x.x.x, bv 0.0.1 als je net een nieuw project gestart hebt.
Het is in de IDE zichtbaar in Project, properties, en kan daar ook aangepast worden. Het wordt automatische verhoogd als je “compile” doet in de IDE. In code kan je het opvragen met Application.Version
.
In een programma dat een databank gebruikt, hou ik ook bij welke versie lokaal geïnstalleerd staat, en wat de vorige versie was. Dat kan helpen in het oplossen van problemen, bv op het moment dat de struktuur van de databank verandert, en je dus zeker moet zijn met welke versie je werkt. Eigenlijk zou ik ook in de databank de minimumversie moeten bewaren bedenk ik nu, of misschien zelfs loggen user_id, version_used.
Ik heb geprobeerd zicht te houden op de versies die lokaal gebruikt worden, opgeslagen in de Settings File (~/.config/gambas/application.conf):
application.conf
[General]
..
Language="nl_BE"
Runcounter=1028
..
PreviousVersion="0.2.38"
LastVersion="0.2.38"
Version="0.2.38"
HighVersion="0.2.39"
LowVersion="0.2.10"
PreVersionDateOut=07/01/2016 13:24:07.426
...
Ik kan aflezen wat de laagste gebruikte versie is, wat de hoogste (soms schakel je terug naar een lagere versie na vastgestelde fouten bv), wat de huidige, voorgaande en wat de laatst gebruikte versie was.
Waarvoor ik in de module MCommon
:
PRIVATE sLastError AS String
PUBLIC SUB storeVersion()
' check version settings exist
IF NOT Settings["General/PreviousVersion"] ' previous version number used (lower)
Settings["General/PreviousVersion"] = Application.Version
ENDIF
IF NOT Settings["General/LowVersion"] ' lowest version used
Settings["General/LowVersion"] = Application.Version
ENDIF
IF NOT Settings["General/HighVersion"] ' highest version used - kept when downgrading!
Settings["General/HighVersion"] = Application.Version
ENDIF
Settings["General/LastVersion"] = Settings["General/Version", ""] ' first save value before replacing it
Settings["General/Version"] = Application.Version ' store version of current run
IF (Settings["General/Version"] <> Settings["General/LastVersion"]) ' up or downgrade?
IF newestVersion(Settings["General/LastVersion"], Settings["General/Version"]) = Settings["General/Version"] ' upgrade
Settings["General/PreVersionDateOut"] = Now()
Settings["General/PreviousVersion"] = Settings["General/LastVersion"]
ELSE ' downgrade, check under lowest ?
IF newestVersion(Settings["General/LowVersion"], Application.Version) = Settings["General/LowVersion"]
Settings["General/LowVersion"] = Application.Version
ENDIF
ENDIF
IF Settings["General/HighVersion"] <> Application.Version
Settings["General/HighVersion"] = newestVersion(Settings["General/HighVersion", ""], Application.Version)
ENDIF
ENDIF
Settings.Save
END
met de test :
PUBLIC FUNCTION newestVersion(sVersionA AS String, sVersionB AS String) AS String
DIM sPart AS String
DIM arrsPartsA AS String[]
DIM arrsPartsB AS String[]
DIM i AS Integer
IF NOT sVersionA ' sVersionA is empty
IF sVersionB
RETURN sVersionB
ELSE ' AND sVersionB is empty
RETURN ""
ENDIF
ELSE IF NOT sVersionB ' sVersionB is empty
RETURN sVersionA
ELSE ' none is empty; compare parts to find out
arrsPartsA = Split(sVersionA, ".")
arrsPartsB = Split(sVersionB, ".")
IF arrsPartsA.Count = arrsPartsB.Count
FOR i = 0 TO (arrsPartsA.Count - 1)
IF Val(arrsPartsA[i]) > Val(arrsPartsB[i])
RETURN sVersionA
ELSE
IF Val(arrsPartsB[i]) > Val(arrsPartsA[i])
RETURN sVersionB
ELSE
sLastError = "Part " & Str$(i + 1) & " of version number is the same " & arrsPartsA[i]
DEBUG sLastError
ENDIF
ENDIF
NEXT
ELSE
sLastError = "Could not detect versions; structure not the same: " & sVersionA & " <> " & sVersionB
RETURN ""
ENDIF
ENDIF
END
en aangeroepen vanuit de eerst opstartende module, bv de klasse MMain (die opstartklasse is en nadien FMain aanroept):
MMain
MCommon.storeVersion()