scripts voor repository management

Mijn manier van werken

Net als iedereen duid ik de zaken waar ik aan werk ook wel aan als "project".

Om zoveel mogelijk te profiteren van mijn dagelijkse ervaringen met de zaken die ik gemaakt heb laat ik de scripts / symlinks die ze starten wijzen naar de versie waar ik ook op ontwikkel. Dat geeft me onmiddellijke feedback over de dingen die ik aanpas. Ik noem dit wel mijn "working" omgeving.

Als ik tevreden ben - en dat omvat ook het uitgevoerd hebben van unittests - zet ik het spul over naar een repository waar ik in principe nooit aanpassingen in doe, zodat ik ook een stabiele versie op mijn systeem heb staan. Ik noem dit mijn "central" omgeving.

Van hier uit kan ik het spul tenslotte overzetten naar GitHub zodat ik ook een versie buiten mijn laptop heb opgeslagen, voor het geval dat. De benaming voor deze omgeving is "remote".

Periodiek alles in één keer controleren heeft mijn voorkeur omdat het me toch even de gelegenheid geeft om te bedenken of ik dingen die ik nog niet gecommit heb al wel wil committen of toch maar liever terugdraai en anders aanpak.

De beschikbare commando's

Bij veel commando's kun je met optie -n een of meer namen van repositories meegeven. Indien meer, dan worden ze gescheiden door komma's zonder spaties erachter. Als je dit weglaat worden alle (actieve) repositories doorlopen.

repo.check-local (ook aan te roepen als "repocheck")

dit is een taak die ik periodiek uitvoer om te kijken in welke repositories er zaken zijn aangepast zodat ik kan controleren (met check-repo bijvoorbeeld) of er nog gecommit moet worden en/of er iets klaar is om overgezet moet worden.

Het geeft als output een opsomming, bijvoorbeeld

repocheck-output.png

Er wordt ook een bestand weggeschreven met wat meer details; dit kan bekeken worden met het commando

repo.check-local-changes

in het bestand is informatie voor de repo's uit "git log" en "git status" verzameld. Het wordt geopend in een tekst editor.

repo.check-local-notes

opent een treedocs bestand met daarin onder andere notities over nog (niet) over te zetten repositories

repo.check-remote

doet hetzelfde als "check-local" maar dan voor de "central" vs GitHub repositories. Git legt gelukking van allerlei vast tijdens het pushen zodat die informatie niet van de remote server gehaald hoeft te worden. Toen ik dat nog niet wist had ik daar zelf een mechanisme voor gemaakt met zogeheten "tip-files".

repo.push-local [--exclude=<reponames>] [--include=<reponames>]

doet hetzelfde als "check-local" maar migreert tevens de gecommitte wijzigingen naar de volgende ("central") omgeving.

Behalve opgeven welke repo's je wel / alleen maar wilt migreren kun je ook opgeven welke je niet wilt doen

repo.push-remote [--exclude=<reponames>] [--include=<reponames>]

doet hetzelfde als "push-local" maar dan van "central" naar remote

repo.list-branches

taak om de branches van één of meer projecten uit te lijsten

repo.add2gitweb [--names=<reponames>] [--frozen]

taak om een repository op te voeren in de configuratie zodat deze bekeken kan worden met gitweb

repo.dtree --name=<reponame>

Taak om een treedocs document met daarin project informatie / documentatie te openen. Gebruikt in mijn "session management".

repo.mee-bezig

Taak om een treedocs bestand voor alle projecten gezamenlijk te openen

repo.overview --name=<reponame> [--outtype=<output-type>]

Taak om een gecondenseerd project historie bestand aan te maken, overbodig geworden met het kunnen bekijken in een web interface.

repo.prshell --name=<reponame>

Taak om een (groter dan standaard) terminal te openen in de project root. Gebruikt in mijn "session management".

repo.preadme --name=<reponame>

Open het readme document voor een project in een text editor

repo.rreadme --name=<reponame>

Open het readme document voor een project in een rst viewer.

repo.qgit --name=<reponame>

Open een Git gui voor een project. Misschien is dit een alternatief voor check-repo, moet ik nog eens rustig naar kijken.

repo.runtests --name=<reponame> [<test>]

voer unittests uit voor alle of een gespecificeerde module van een project/repo

repo.find-failing-tests

voer unitttests uit voor alle of gespecificeerde repo's en laat de tests zien die failen

repo.find-test-errors

voer unitttests uit voor alle of gespecificeerde repo's en laat de tests zien die fout gaan

repo.find-test-stats

voer unitttests uit voor alle of gespecificeerde repo's en laat de testcoverage zien

repo.search-all --find=<search-term> [--rebuild]

voer een zoekactie uit op alle getrackede bestanden in alle repos en bouw indien nodig of gewenst de zoekindex opnieuw op

repo.search-p --find=<search-term> [--rebuild]

hetzelfde als search-all maar alleen in programmadirectories

repo.search-t --find=<search-term> [--rebuild]

hetzelfde als search-all maar alleen in directories met testmodules