Johannes Seitz

Voraussichtliche Lesedauer: 3 Minuten

Spuk im Source Code Repository

In den letzten Wochen ist mir ein seltsamer Spuk in einem unserer Kundenprojekte untergekommen. Alles fing damit an, dass eine JSON Datei gelegentlich als verändert angezeigt wurde, obwohl die Datei auf dem Entwicklerrechner nicht editiert wurde.

Übersicht

In den letzten Wochen ist mir ein seltsamer Spuk in einem unserer Kundenprojekte untergekommen. Alles fing damit an, dass eine JSON Datei gelegentlich als verändert angezeigt wurde, obwohl die Datei auf dem Entwicklerrechner nicht editiert wurde.

Mein erster Verdacht war, dass ein Entwickler wohl einen Unit-Test geschrieben hat, der nicht “hinter sich aufräumt”. Eine Suche nach dem Dateinamen der veränderten Datei im Code ergab allerdings keine verdächtigen Treffer. Die Datei wurde stets nur gelesen, niemals geschrieben.

Als besagte modifizierte Datei selbst nach einem frischen Checkout angezeigt wurde, stellte sich Ratlosigkeit ein. Der Fehler muss außerhalb des Codes liegen. Eine weitere Seltsamkeit fiel auf: der Dateiinhalt schien zwischen zwei komplett unterschiedlichen Versionen hin- und herzuschalten. Ein Reset der Datei über das SCM hatte zur Folge, dass sie mit der anderen Version überschrieben und direkt wieder als geändert markiert wurde. Ein weiteres Indiz fiel auf: Der Dateiname unterschied sich von Mal zu Mal leicht. Bei der einen Version wurde die Datei “Datagram.json”, bei der anderen “datagram.json” als verändert angezeigt. Langsam kam ich dahinter, welcher Spuk sich hier zutrug.

Jemand hatte es geschafft die mysteriöse Datei mit zwei verschiedenen Schreibweisen in unser Repository einzuchecken. Ich vermute, dass das bei einem “rename” passiert ist, der nicht über das SCM durchgeführt wurde. Da der Repository-Server ein Linux-Dateisystem verwendet, konnten beide Dateien friedlich im Repository nebeneinander existieren. 

Unser Entwicklerrechner verwendet ein NTFS-Dateisystem. Das Problem: NTFS unterscheidet nicht zwischen Groß- und Kleinschreibung. In dieser Situation passiert Folgendes: Der Server sendete zwei unterschiedliche Dateien an den Client. Das Dateisystem des Client sieht jedoch keinen Unterschied im anders geschriebenen Dateinamen und überschreibt die Datei auf dem Client mit dem Inhalt der anderen.

Mit dieser Erkenntnis war der Fehler schnell zu beheben. Durch das Löschen einer der beiden Dateien hatte der Spuk ein Ende. Leider habe ich keine Möglichkeit gefunden eine Warnung im SVN-Client auszugeben, wenn ein Repository mit einem derartigen Konflikt in einem Dateisystem ohne Unterscheidung zwischen Groß- und Kleinschreibung ausgecheckt wird. Es liegt am Entwickler diesen Fehler zu vermeiden.

Oder kennt jemand einen Trick? 


Über den Autor

Johannes Seitz