TOC(heading=Source)? TOC(heading=Omgeving, sectionindex, compact, depth=3, allactive, Documentatie/Ontwikkelaar/Omgeving/)? TOC(heading=Ontwikkelaar, sectionindex, compact, depth=2, allactive, Documentatie/Ontwikkelaar/)? TOC(heading=Documentatie, sectionindex, compact, depth=1, allactive, Documentatie/)?
Source
De OpenAC source-code leeft in een Subversion repository. Toegang tot de repository wordt door een van de [Tools source-control tools] geregeld -- meestal ook Subversion.
Deze pagina beschrijft handelingen die regelmatig uitgevoerd worden op de source-tree in de loop van normale software-ontwikkeling.
Source Layout
De sources van OpenAC staan in een source-repository op https://svn.openac.fenac.nl/ . De source-repository is alleen te benaderen door OpenAC ontwikkelaars en ACs met OpenAC geinstalleerd.
De SVN repository bevat twee directories: development/ met de actuele ontwikkelversie, en release/ met daarin stabiele releases van OpenAC. De versies onder release hebben namen v1.nnn/ of v2.nnn/. De huidige versie van OpenAC is versie 2, dus de v2.nnn directories zijn actueel.
Er zijn enkele historische relicten zoals developmentv1/ en redesign/ die voor de geschiedenis van OpenAC van belang zijn, maar die niet zo interessant zijn.
Actieve Versies
Er zijn steeds twee versies van OpenAC die ondersteund worden: de "huidige release", dat is de meest recente, en de "vorige release", die daar aan vooraf ging. Net na een nieuwe release is er een korte overgangsperiode omdat de vorige-vorige release niet meer ondersteund wordt.
Voorbeeld:
- Op 10 mei 2017 is OpenAC v2.016 de huidge versie en is v2.014 de vorige versie. Een nieuwe versie is al in test, maar nog niet voor algemeen gebruik vrijgegeven.
- Op 15 september 2015 is OpenAC v2.012 vrijgegeven. Dan is dat de huidge versie, en v2.010 de vorige versie. Versie v2.008 wordt nog kort ondersteund.
Source Onderhoud
Normaal gesproken werken de FENAC ontwikkelaars in development en elk AC in de branch voor de versie die ze op dat moment gebruiken.
- development is de bron van de meeste wijzigingen en nieuwe code. In development wordt de code "clean" gehouden. Dat wil zeggen dat formattering en SVN properties en file-headers in development worden onderhouden met (semi-)automatische tools.
- branches lopen achter bij development en ook achter op nieuwere versies van OpenAC. Maar een AC dat wijzigingen doorvoert in hun actuele versie, verwacht dat die wijzigingen ook in latere versies van OpenAC beschikbaar (zullen) zijn. Er is dus twee-richtingen verkeer tussen de branches en development:
- Wijzigingen van ACs worden overgenomen naar latere versies,
- Sommige wijzgingen in development worden ook toegepast in oudere versies van OpenAC. Dat is een zgn. backport, en wordt toegepast op bugfixes die in de lopende versie gefixt moeten worden, en een heel enkele keer voor features die slechts een kleine impact hebben, maar die wel fijn zijn in de lopende release.
De werkwijze voor elk van deze onderhoudsstappen is hieronder beschreven.
Wijzigingen overnemen
Het meest gemakkelijke is om wijzigingen naar "voren" over te nemen: van een release versie naar nieuwere release versies, of over naar development. Omdat dit regelmatig moet gebeuren is het het meest gemakkelijk om het automatisch met SVN tools te doen.
SVN merge, sinds SVN 1.6, houdt bij welke wijzigingen zijn overgenomen. Daardoor voorkom je dat wijzigingen meer dan een keer overgenomen worden, en het wordt ook vrij makkelijk:
svn pg svn:mergeinfo development svn merge -r NNN:HEAD release/v1.222 development/ svn commit -m "OVERNEMEN: v1.222 -> development NNN t/m MMM"
Met het eerste commando vraag je de mergeinfo op van SVN. Omdat er sommige oude revisies nooit gemerged zijn op een heldere manier, willen we die ook niet meer overnemen. Kijk wat de laatst-gemergede revisie is (in dit geval gaan we v1.222 naar development mergen, dus zoek de uitvoer regel met release/v1.222 en onthoud de meest recente revisie daar. Zeg dat NNN=r19183, bijvoorbeeld.
Vervolgens doen we de merge zelf. Veranderingen vanaf revisie NNN worden overgenomen van v1.222 naar development. Hierbij kunnen conflicts ontstaan. Los die op.
Tot slot met de commit worden de nieuw gemergede revisies als een enkele commit doorgegeven. Merk vervolgens op dat de svn:mergeinfo veranderd is.
Backports
Het is ook mogelijk om veranderingen over te nemen van nieuwere versies naar oude, de zogenaamde backports. Dit gebeurt als er belangrijke functionaliteit ontwikkeld wordt, zeg in development, dat vervolgens tussen twee releases door uit moet komen, of als er ingewikkelde bugfixes moeten worden overgenomen.
svn merge werkt ook van development naar andere branches, maar in het geval van backports is het vaak handig om specifieke commits over te nemen. Gebruik dan -c NNN in plaats van -r NNN:HEAD om precies een revisie NNN over te nemen. Welke revisies over te nemen kan je lezen uit de timeline van OpenAC of uit svn log.
Clean
Met "clean" bedoelen we dat de code opgeschoond wordt volgens de code-formattering die we hebben afgesproken en die automatisch door een tool kan worden toegepast. Daarnaast zijn er diverse headers en instellingen die systematisch worden toegepast op de sources zodat iedereen elkaar niet in de weg zit.