Quelle version de X a introduit la fonctionnalité Y?


10

Une grande partie de mon travail quotidien développe des logiciels pour une utilisation sur des machines avec différentes versions du même logiciel, comme bash, findet grep. Lorsque vous rencontrez une fonctionnalité qui serait utile par exemple pour simplifier le code, il est important de savoir si cette fonctionnalité est disponible dans les outils installés les plus anciens. Pour les éléments critiques, il serait également utile de savoir si cette fonctionnalité est nouvelle ou existe depuis des années dans les plus anciens outils installés.

Quels sont les moyens rapides de répondre avec autorité aux outils Linux, en particulier les GNU Core Utils? Quelques possibilités par ordre de précision décroissante:

  • La recherche binaire binaire (sic) en exécutant les différentes versions est bien sûr la réponse ultime, mais elle est de loin la plus longue. Les installations plus anciennes ne sont souvent pas disponibles pour des raisons de sécurité.
  • La lecture du code est presque aussi bonne, mais elle peut prendre beaucoup de temps si la fonctionnalité est vaguement nommée, le nom ne correspond pas directement aux noms de variable / fonction / objet, ou il a été implémenté avant d'être activé.
  • Les journaux des modifications , lorsqu'ils sont disponibles, connectent généralement les modifications des fonctionnalités aux versions logicielles.
  • Les journaux de validation peuvent fournir des conseils, mais ne savent pas dans quelle version ils seront inclus.
  • les pages de manuel mentionnent rarement les dates.
  • La même chose s'applique à Google , et vous auriez également du mal à exclure toutes les sources sans autorité.

Pourriez-vous peut-être expliquer les raisons de cette question?
Faheem Mitha

ISTM que si vous devez porter le logiciel sur ces différentes plates-formes, vous devez avoir une installation "la plus ancienne" disponible quelque part. Une réponse assez rapide et faisant autorité serait donc de l'essayer sur cette plate-forme. Idéalement sur toutes les plates-formes (si vous avez écrit un scénario de test sous forme de script, vous pouvez le transmettre à toutes vos plates-formes de portage et obtenir une série de réponses oui / non).
roaima

Réponses:


7

Généralement, il existe un journal des modifications. En fait, cela (ou d'autres "avis importants" de changements) est requis par la GPL! (Du moins, effectivement pour tout ce qui a plusieurs contributeurs - voir la section 2a de la GPLv2.)

Pour le paquet GNU coreutils - et pour à peu près tout le reste directement du projet GNU - ce fichier est certainement le premier endroit à consulter, et devrait répondre à votre question dans 95% des cas.


Avez-vous une référence au journal des modifications de coreutils? Le plus récent que j'ai pu trouver date de 2007.
l0b0

2
GNU Coreutils ChangeLog n'a pas été mis à jour depuis 2007. cvs.savannah.gnu.org/viewvc/coreutils/… Vous devez maintenant regarder les journaux git.
Mikel

2
Il peut être généré automatiquement à partir des journaux git. Il y a une entrée ChangeLog.bz2dans /usr/share/doc/coreutils-8.10mon système Fedora, et l'entrée principale vient de 2011-02-04. Il est également possible qu'il s'agisse d'une fourche droite - je vérifierai cela plus tard dans la journée.
mattdm

@mattdm: Il y a /usr/share/doc/coreutils/changelog.gz sur Ubuntu - Merci! Malheureusement, cela ne remonte qu'à 2008, ce qui est trop récent pour certains des outils pertinents. Je suppose que cela prend le relais là où le dernier s'est terminé.
l0b0

3
Voici la preuve: git.savannah.gnu.org/cgit/coreutils.git/tree/HACKING Faites défiler jusqu'à la ligne 131.
Shinnok

4

Pourquoi ne pas utiliser le contrôle de source afférent à X pour rechercher la fonctionnalité Y? Le dépôt source est le meilleur moyen d'identifier quand une fonctionnalité particulière a été introduite.

Pour coreutils, vous pouvez vous rendre sur http://git.savannah.gnu.org/cgit/coreutils.git et rechercher des mots clés liés à Y dans les messages de journal ou des lignes de code particulières que vous avez identifiées comme appartenant à Y. Vous pouvez le faire sur l'interface Web directement, ou mieux encore, clonez le référentiel source sur votre station et effectuez une recherche à l'aide de git-bisect , git-blame et git-log --grep .

Utilisez ensuite git-describe pour découvrir que la balise est la plus proche d'un commmit spécifique. Les balises sont principalement utilisées pour les numéros de version, donc cela vous donnera la version qui a introduit le commit.

Vous pouvez adapter la méthode ci-dessus, en fonction de X et de son contrôle de source.


Comment identifieriez-vous quel commit / ligne est entré dans quelle version du logiciel? De plus, la recherche Savannah est gravement interrompue - Aucun résultat pour les chaînes qui sont évidemment dans les mêmes messages de journal.
l0b0

Utilisez git-describe pour découvrir que la balise est la plus proche d'un commmit spécifique. Les balises sont principalement utilisées pour les numéros de version. Quant à Savannah étant brisée, vous ne pouvez pas y faire grand-chose. Git clone le référentiel dans votre boîte et travaillez à votre manière en utilisant les commandes git que j'ai décrites dans le post.
Shinnok

1

Sur les plateformes Debian et dérivées de Debian telles que Ubuntu :

sudo apt-get changelog coreutils > changelog.txt 

fournit le journal des modifications de GNU Core Utilities jusqu'à la version 4.5.1-1.

Je ne sais pas s'il existe des solutions similaires sur d'autres plateformes.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.