Ein großer Teil meiner täglichen Arbeit ist die Entwicklung von Software für den Einsatz auf Maschinen mit unterschiedlichen Versionen der gleichen Software, wie bash
, find
und grep
. Wenn Sie auf eine Funktion stoßen, die beispielsweise zur Vereinfachung von Code nützlich wäre, ist es wichtig zu wissen, ob diese Funktion in den ältesten installierten Tools verfügbar ist. Für kritische Dinge wäre es auch nützlich zu wissen, ob diese Funktion neu war oder seit Jahren in den ältesten installierten Tools vorhanden ist.
Was sind schnelle Möglichkeiten, dies für Linux-Tools, insbesondere die GNU Core Utils, maßgeblich zu beantworten ? Einige Möglichkeiten in der Reihenfolge abnehmender Genauigkeit:
- Die binäre binäre Suche (sic) durch Ausführen der verschiedenen Versionen ist natürlich die ultimative Antwort, aber bei weitem die zeitaufwändigste. Ältere Installationen sind aus Sicherheitsgründen häufig nicht verfügbar.
- Das Lesen des Codes ist fast genauso gut, aber es kann unerschwinglich zeitaufwändig sein, wenn die Funktion vage benannt ist, der Name nicht direkt mit Variablen- / Funktions- / Objektnamen übereinstimmt oder vor der Aktivierung implementiert wurde.
- Änderungsprotokolle, sofern verfügbar, verbinden normalerweise Funktionsänderungen mit Softwareversionen.
- Commit-Protokolle können Hinweise enthalten, wissen jedoch nicht, in welcher Version sie enthalten sein werden.
- Manpages erwähnen selten Daten.
- Gleiches gilt für das Googeln , und es fällt Ihnen auch schwer, alle nicht autorisierenden Quellen auszuschließen.
Antworten:
Im Allgemeinen gibt es ein Changelog. Tatsächlich wird dies (oder andere "wichtige Hinweise" auf Änderungen) von der GPL verlangt! (Zumindest effektiv für alles mit mehreren Mitwirkenden - siehe GPLv2-Abschnitt 2a.)
Für das GNU-Coreutils-Paket - und für so ziemlich alles andere direkt aus dem GNU-Projekt - ist diese Datei definitiv der erste Ort, an dem Sie suchen müssen, und sollte Ihre Frage in 95% der Fälle beantworten.
quelle
ChangeLog.bz2
in/usr/share/doc/coreutils-8.10
auf meinem Fedora - System, und der oberste Eintrag aus2011-02-04
. Möglicherweise ist dies auch eine RH-Gabel - darauf werde ich später noch eingehen.Warum nicht die für X relevante Quellcodeverwaltung verwenden, um nach Merkmal Y zu suchen? Das Quell-Repo ist der beste Weg, um festzustellen, wann eine bestimmte Funktion eingeführt wurde.
Für Coreutils können Sie unter http://git.savannah.gnu.org/cgit/coreutils.git nach Schlüsselwörtern suchen, die mit Y in Protokollnachrichten oder bestimmten Codezeilen zusammenhängen, die Sie als zu Y gehörend identifiziert haben Das Webinterface klont das Quell-Repo direkt oder noch besser auf Ihre Station und sucht mit git-bisect , git- tad und git-log --grep .
Verwenden Sie dann git- description, um herauszufinden, dass das Tag einem bestimmten Commmit am nächsten kommt. Tags werden meistens für Versionsnummern verwendet, sodass Sie die Version erhalten, mit der das Commit eingeführt wurde.
Sie können die obige Methode abhängig von X und der Quellcodeverwaltung anpassen.
quelle
Auf Debian und von Debian abgeleiteten Plattformen wie Ubuntu :
stellt das Änderungsprotokoll der GNU Core Utilities bis zur Version bereit
4.5.1-1
.Ich bin mir nicht sicher, ob es auf anderen Plattformen ähnlich bequeme Lösungen gibt.
quelle
Überprüfen Sie die NEUT- Datei von coreutils in ihrem Git-Repo .
quelle