Schrijf een bash shell script repogen dat kan gebruikt worden om git repositories aan te maken, waarbij op een geautomatiseerde manier reeds een aantal commits worden uitgevoerd. Aan het shell script moet een bestandsnaam als argument doorgegeven worden. Daarnaast moet het shell script ook de volgende drie opties ondersteunen:

Het shell script moet voor de verwerking van de opties de flexibiliteit aan de dag leggen die gebruikelijk is bij Unix commando's: volgorde van opties speelt geen rol, opties kunnen eventueel samengenomen worden, …. Op basis van de gegeven opties en argumenten moet het shell script dan de volgende stappen automatiseren:

  1. maak een nieuwe git repository aan met de naam die als argument aan het shell script werd doorgegeven

  2. voer een initiële commit uit (met commit message initial commit) in de master branch, waarbij een leeg bestand (0 bytes) README.md aan de repository wordt toegevoegd

  3. voer $$c \in \mathbb{N}_0$$ commits (waarbij $$c$$ overeenkomt met het verplichte argument dat werd opgegeven bij de optie -c, standaard 3) uit in de branch waarvan de naam overeenkomt met het verplichte argument dat werd opgegeven bij de optie -b (standaard in de master branch); hierbij moet de $$i$$-de commit ($$i = 1, 2, \ldots$$)

    1. een willekeurige commit message $$m_i$$ gebruiken die wordt gegenereerd aan de hand van de web service met URL http://whatthecommit.com/index.txt (opmerking: als deze web service een commit message teruggeeft die bestaat uit meerdere regels, dan moet enkel de eerste regel gebruikt worden)

    2. een regel toevoegen aan het bestand README.md die bestaat uit het volgnummer $$i$$, een afsluitend rond haakje, een spatie en de commit message $$m_i$$

  4. merge de branch waarin de commits in stap 3 uitgevoerd werden met de master branch, indien een specifieke branch werd opgegeven met de optie -b en de optie -m werd opgegeven

Geen enkele van de git commando's die gebruikt worden om het uitvoeren van bovenstaande stappen te automatiseren mag uitvoer genereren (noch op stdout noch op stderr). Het shell script moet zelf de volgende foutafhandeling voorzien:

Indien er zich geen fouten voordoen, dan moet het shell script eindigen met exit status 0.

Voorbeeld

Onderstaande voorbeeldsessie geeft aan hoe het shell script repogen moet kunnen gebruikt worden.

$ repogen repo01
$ echo $?
0
$ cd repo01; git log --oneline --decorate --graph --all; cd ..
* ffb8bf8 (HEAD -> master) fix bug, for realz
* ce3695b fixed mistaken bug
* ef1c981 For great justice.
* 7ad18b4 initial commit
$ cat repo01/README.md
1) For great justice.
2) fixed mistaken bug
3) fix bug, for realz
$ repogen -c5 repo02
$ cd repo02; git log --oneline --decorate --graph --all; cd ..
* 1b5a2bc (HEAD -> master) added some filthy stuff
* 80ea21f this is how we generate our shit.
* 451835f This is supposed to crash
* e16e601 omgsosorry
* 9fd5801 pay no attention to the man behind the curtain
* 3f52902 initial commit
$ repogen -b develop repo03
$ cd repo03; git log --oneline --decorate --graph --all; cd ..
* 78ad351 (HEAD -> develop) changes
* 2658c9a By works, I meant 'doesnt work'.  Works now..
* f844fa4 harharhar
* 309726e (master) initial commit
$ repogen -b develop -m repo04
$ cd repo04; git log --oneline --decorate --graph --all; cd ..
* 68638ea (HEAD -> master, develop) Trust me, I'm an engineer!... What the f*ck did just happened here?
* c17b2b4 this doesn't really make things faster, but I tried
* 83a42cf For great justice.
* 0a30c4d initial commit
$ repogen
Syntaxis: repogen [-b <string>] [-c <integer>] [-m] dirname
$ echo $?
1
$ repogen repo01
repogen: bestandsnaam bestaat reeds
$ echo $?
2