[Thema]: mob-developing a CLI tool for merging directories (when conflict-free) in Haskell #26
das-g
started this conversation in
1_Themenvorschlag
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
📝 Beschreibung
Lasst uns Mob-Programming an einem nicht-trivialen aber trotzdem überschaubaren Beispiel üben:
Verzeichnis-Zusammenführung
Aufgabe des zu entwickelnden CLI-Programms
Zweck dieses Programms ist, den Inhalt mehrerer Verzeichnisse zusammenzuführen, sofern das konfliktfrei möglich ist, und ohne Aktion mit informativen Fehlermeldungen (und einem non-zero exit code) abzubrechen, falls nicht.
Das Programm soll die Pfade zu mehrerer zusammenzuführender Dateisystem-Verzeichnissen ("Ordnern") sowie zu einem Ausgabe-Verzeichnis als CLI-Argumente entgegennehmen. Falls es möglich ist, die Inhalte der zusammenzuführenden Verzeichnisse (unter Beibehaltung derer internen Struktur) im Ausgabeverzeichnis verlustfrei (also ohne gegenseitiges Überschreiben) zusammenzukopieren, so soll das Programm dies machen; andernfalls soll es auf der Kommandozeile ausgeben, wieso das nicht geht.
Dabei sollen nur ganze Dateien kopiert werden. Haben mehrere Dateien denselben Pfad relativ zu den Wurzeln der zusammenzuführenden Verzeichnisse, aus denen sie stammen, so ist dies als Konflikt zu betrachten, und keine Dateien sollen kopiert werden. Insbesondere soll das Programm also weder Inhalte überschreiben, noch innerhalb einer Ziel-Datei konkatenieren, noch zeilenbasiert oder anderweitig innerhalb einer Datei zu "mergen" versuchen.
Ausgabe im Konfliktfall
Für jeden relativen Pfad, für den ein Konflikt festgestellt wurde soll ausgegeben werden:
Use-Case und Motivation
Ich (@das-g) habe die Verantwortung für eine Vereinswebsite übernommen. Diese wurde mit einer proprietären Software erstellt, die mir als Linux-Benutzer nicht zur Verfügung steht. Die Website ist serverseitig statisch und liegt mir als zu hostendes Verzeichnis mit HTML-, CSS- und Bild-Dateien vor.
Um die Website und ihre Inhalte pflegen zu können, ohne händisch in maschinen-generiertem HTML rumfummeln zu müssen, würde ich sie gerne mit einem (natürlich FLOSS-lizenzierten) Static-Site-Generator (z.B. Hugo) neu machen. Es ist mir jedoch zu viel, in meiner Freizeit die ganze Website mit all ihren Unterseiten aufs Mal damit neu zu machen. Ich würde lieber Schritt für Schritt vorgehen, Inhalte nach und nach (Unterseite für Unterseite) in die neue Struktur übernehmen. Dabei will ich durchgängig sowohl umgestellte als auch noch nicht umgestellte Inhalte online haben.
Meine Idee ist somit folgende Struktur mit folgendem Vorgehen:
Struktur:
Repo mit 2 Toplevel-Verzeichnissen:
Vorgehen:
Wiederhole bis fertig:
Für Schritt 6 bräuchte ich das hier zu erstellende Tool.
Schritte 5 bis 7 würden in der CI/CD-Pipeline automatisiert. Deswegen soll das Tool ein nicht-interaktives CLI-Tool sein.
Das Prüfen der Konflikt-Freiheit soll sicherstellen,
Überlegungen
Mögliche (optionale) Ausbau-Möglichkeiten
Mob-Programming in Haskell
Warum Mob-Programming?
Warum Haskell?
Muss man schon Haskell können, um mitzumachen?
Nein. Beim Mob-Programming können wir voneinander lernen und auch ohne einschlägige Vorkenntnisse kann man mitmachen, sofern man den Computer grundlegend bedienen kann.
🎬 Formate
🛠 Workshop
🎤 Präsentiert von
@das-g
⏱️ Dauer
Vermutlich 2 bis 3 Sessions à je 2 bis 3 h
📌 Status
Vorschlag
Beta Was this translation helpful? Give feedback.
All reactions