Programmierpraktikum SoSe 2024, Bachelor Informatik, FU Berlin
ProPra2024 > Sprachen > Pythonpraxis > mlh-gitac

My Little Helpers: gitac - git add+commit by file date

Experience
Product

Ziel

  • Ich habe ein externes Programm (git) von Python aus eingesetzt.
  • Ich habe mir ein Hilfsprogramm gebaut, um nachträgliche commits sinnvoller zu gestalten.

Hintergrund

Wenn man an einer kleinen oder mittelgroßen Software arbeitet, fokussiert man oft nicht nur auf eine einzige Änderung, sondern macht mehrere "zugleich". Nach einer Weile hat man dann mehrere Dateien geändert, was in git aber auf mehrere Commits aufgeteilt werden sollte. Dabei macht man sich meist nicht die Mühe, diesen Commits realistische Zeitstempel mitzugeben, sondern die Zeitstempel der Commits liegen nur um Sekunden oder Minuten auseinander am Ende der Arbeitsperiode.

Wäre es nicht hübsch, wenn ein Hilfsprogramm sinnvollere Zeitpunkte in diese Commits schreibt? Das bauen wir uns jetzt.

Loose

Arbeitsschritte

Anforderungen

  • Angenommen, wir haben (in dieser Reihenfolge) die Dateien A, B, C, D und E geändert. Dabei gehören inhaltlich A und D in einen Commit, B, C und E in einen zweiten.
  • 1 Unser Programm hat folgendes Aufrufformat:
    python mlh gitac [-m|--message commit-msg] file...
  • Es macht zunächst git add auf die angegebenen Dateien.
  • Dann macht es git commit, ggf. mit der angegebenen Option.
  • Beim Commit wird der Zeitstempel entsprechend der mtime der jüngsten Datei gesetzt.
  • Auch diese Aufgabe lässt sehr gut komplett mit der Standardbibliothek lösen; sie brauchen keine zusätzlichen Pakete.

Aufräumen

  • 1 mlh gitac überlappt sich von der Funktionalität her mit mlh lsnew. Haben Sie diese Überlappung bereits im Code widergespiegelt oder gibt es noch Duplikationen im Code? Lagern Sie alle gemeinsamen Teile in ein Hilfsmodul mlh.utils aus.

Ausprobieren

  • 2 Führen Sie beim Testen des Programms Protokoll über die Defekte, die Sie entdecken.
  • Testen Sie Ihr Programm entweder auf einem Hilfsrepo oder schreiben Sie das Programm richtig genug, dass es schon beim Testen nur sinnvolle Commits macht, oder machen Sie reine Test-Commits mit git reset wieder rückgängig.

Führen Sie nach ausreichendem Testen zur Abgabe folgende Kommandos aus:

  • 1 f=mlh/subcmds/gitac.py; date; ls -l $f; python mlh gitac -m"$f, committed by itself" $f
  • Sie haben das Kommando doch hoffentlich genau verstanden bevor Sie es ausgeführt haben?
  • 2 git -P show HEAD
Trace

Abgabe

Geben Sie den Quellcode ab, wie er am Ende der Aufgabe vorliegt.

Geben Sie ein Kommandoprotokoll ab, das genau nur die Eingaben und Ausgaben der obigen Kommandos 1, 2, … enthält. Entfernen Sie vor Abgabe eventuelle Fehlversuche und sonstige zusätzliche Kommandos aus dem Protokoll.

Geben Sie ein Markdown-Dokument ab mit knappen Antworten zu den oben gestellten Fragen 1, 2, … Geben Sie diese Marker mit an.
Geben Sie ggf. Beispiele oder benutzte Quellen an.