Welche Version von X hat Feature Y eingeführt?

10

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, findund 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.
l0b0
quelle
Könnten Sie vielleicht die Gründe für diese Frage erläutern?
Faheem Mitha
ISTM: Wenn Sie die Software auf diese verschiedenen Plattformen portieren müssen, muss irgendwo eine "älteste" Installation verfügbar sein. Eine ziemlich schnelle und maßgebliche Antwort wäre also, es auf dieser Plattform auszuprobieren. Idealerweise auf allen Plattformen (wenn Sie einen Testfall als Skript geschrieben haben, können Sie diesen auf alle Ihre Portierungsplattformen übertragen und eine Reihe von Ja / Nein-Antworten erhalten).
Roaima

Antworten:

7

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.

mattdm
quelle
Haben Sie einen Verweis auf das Änderungsprotokoll von coreutils? Das neueste, das ich finden konnte, war von 2007.
l0b0
2
GNU Coreutils ChangeLog wurde seit 2007 nicht aktualisiert. Cvs.savannah.gnu.org/viewvc/coreutils/… Sie müssen sich jetzt die Git-Protokolle ansehen.
Mikel
2
Es kann automatisch aus den Git-Protokollen generiert werden. Es gibt eine ChangeLog.bz2in /usr/share/doc/coreutils-8.10auf meinem Fedora - System, und der oberste Eintrag aus 2011-02-04. Möglicherweise ist dies auch eine RH-Gabel - darauf werde ich später noch eingehen.
Mattdm
@mattdm: Es gibt /usr/share/doc/coreutils/changelog.gz auf Ubuntu - Danke! Leider geht es nur auf das Jahr 2008 zurück, das für einige der relevanten Tools zu neu ist. Ich denke, es übernimmt, wo der letzte endete.
10.
3
Hier ist der Beweis: git.savannah.gnu.org/cgit/coreutils.git/tree/HACKING Scrollen Sie zu Zeile 131.
Shinnok
4

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.

Shinnok
quelle
Wie würden Sie feststellen, welches Commit / welche Zeile in welche Version der Software eingefügt wurde? Außerdem ist die Savannah-Suche stark unterbrochen - Keine Ergebnisse für Zeichenfolgen, die sich offensichtlich in denselben Protokollnachrichten befinden.
10.
Verwenden Sie git- description, um herauszufinden, dass das Tag einem bestimmten Commmit am nächsten kommt. Tags werden hauptsächlich für Versionsnummern verwendet. Was Savannah betrifft, kann man nicht viel dagegen tun. Git klonen Sie das Repository in Ihre Box und arbeiten Sie sich mit den Git-Befehlen vor, die ich im Beitrag beschrieben habe.
Shinnok
1

Auf Debian und von Debian abgeleiteten Plattformen wie Ubuntu :

sudo apt-get changelog coreutils > changelog.txt 

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.

mklement0
quelle