Ich arbeite derzeit an einem Tool zur Generierung von Quellcode. Um sicherzustellen, dass meine Änderungen keine neuen Fehler verursachen, wäre ein diff
zwischen der Ausgabe des Programms vor und nach meinen Änderungen theoretisch ein wertvolles Werkzeug.
Dies stellt sich jedoch als schwieriger heraus, als man denkt, da das Tool Zeilen, bei denen die Reihenfolge keine Rolle spielt (wie import
Anweisungen, Funktionsdeklarationen usw.), in halb zufälliger Reihenfolge ausgibt . Aus diesem Grund ist die Ausgabe von diff
mit vielen Änderungen überfüllt, bei denen es sich tatsächlich nur um Zeilen handelt, die an eine andere Position in derselben Datei verschoben wurden.
Gibt es eine Möglichkeit, diff dazu zu bringen, diese Bewegungen zu ignorieren und nur die Zeilen auszugeben, die wirklich hinzugefügt oder entfernt wurden?
diff
Tool in der Lage sein , gültig bewegt sich von ungültigen zu trennen, wie Reihenfolge der Anweisungen im Code tut Angelegenheit, und Fälle , in denen dies nicht der Fall ist , sind begrenzt (Importe, Erklärung von Funktionen und Klassen, usw.) ?Antworten:
Sie können ein einfaches Diff erstellen, das Ergebnis irgendwo speichern (um ein weiteres Diff zu vermeiden), die Linien in beiden Versionen durchlaufen und diese dann von der anderen Seite entfernen.
Dies führte zu einem separaten Projekt für den Arbeitscode. Der Code.
quelle
/tmp/old
und/tmp/new
ohne diff Ergebnisse würden gesucht werden , da nur Linien gibt es , die herum bewegt haben. Dieser Code führt jedoch zu Ergebnissen.Sie können versuchen, sie zuerst zu sortieren. Etwas wie:
Bash (und zsh) können dies in einer Zeile mit Prozessersetzung tun
quelle
Es hört sich so an, als hätten Sie die Kontrolle über das Werkzeug. Machen Sie dann die Ausgabe vorhersehbar: Verwenden Sie als letztes Mittel die alphabetische Reihenfolge, anstatt Deklarationen in einer halbzufälligen Reihenfolge auszugeben. Dies hat nicht nur den Vorteil, dass nutzlose Kruft von Unterschieden entfernt wird, sondern auch, dass die Ausgabe des Werkzeugs für einen Menschen leichter lesbar und verifizierbar ist.
quelle
Wenn die Datei in Abschnitte unterteilt ist, sind nur die Abschnitte nicht in der richtigen Reihenfolge, und es gibt einen regulären Ausdruck, mit dem Sie den Abschnittskopf erkennen können. Sie können die Dateien in ihre Abschnitte aufteilen und die Abschnitte dann paarweise vergleichen.
Zum Beispiel habe ich dies nur bei zwei MySQL-Dumps durchgeführt, um sie zu vergleichen, nachdem einige der Datenbanknamen die Groß- und Kleinschreibung geändert hatten (und der Dump sie daher in einer anderen Reihenfolge auflistete):
quelle