Quale versione di X ha introdotto la funzione Y?


10

Una grande parte del mio lavoro quotidiano sta sviluppando un software per l'utilizzo su macchine con diverse versioni dello stesso software, come bash, finde grep. Quando si incontra una funzione che sarebbe utile ad esempio per semplificare il codice, è importante sapere se questa funzione è disponibile negli strumenti installati più vecchi. Per cose critiche, sarebbe anche utile sapere se questa funzionalità era nuova o esiste da anni nei più vecchi strumenti installati.

Quali sono i modi rapidi per rispondere in modo autorevole a strumenti Linux, in particolare GNU Core Utils? Alcune possibilità in ordine di precisione decrescente:

  • La ricerca binaria binaria (sic) eseguendo le diverse versioni è ovviamente la risposta definitiva, ma è di gran lunga la più dispendiosa in termini di tempo. Le installazioni precedenti spesso non sono disponibili per motivi di sicurezza.
  • La lettura del codice è quasi altrettanto buona, ma può richiedere in modo proibitivo il tempo se la funzione è vagamente denominata, il nome non corrisponde direttamente ai nomi delle variabili / funzioni / oggetti o è stato implementato prima che fosse abilitato.
  • I registri delle modifiche , se disponibili, in genere collegano le modifiche delle funzionalità alle versioni del software.
  • I log di commit possono fornire suggerimenti, ma non sanno in quale versione saranno inclusi.
  • le pagine man raramente menzionano date.
  • Lo stesso vale per Google , e avresti anche difficoltà a escludere tutte le fonti non autorevoli.

Potresti forse approfondire i motivi alla base di questa domanda?
Faheem Mitha,

ISTM che se devi trasferire il software su queste diverse piattaforme, devi avere un'installazione "più vecchia" disponibile da qualche parte. Quindi una risposta abbastanza rapida e autorevole sarebbe quella di provarlo su quella piattaforma. Idealmente su tutte le piattaforme (se hai scritto un caso di test come script, potresti inviarlo a tutte le tue piattaforme di porting e ottenere una serie di risposte sì / no).
roaima,

Risposte:


7

In generale, c'è un log delle modifiche. In effetti, questo (o altri "avvisi importanti" di modifiche) è richiesto dalla GPL! (Almeno, in modo efficace per qualsiasi cosa con più collaboratori - vedi GPLv2 sezione 2a.)

Per il pacchetto GNU coreutils - e praticamente per tutto il resto direttamente dal progetto GNU - questo file è sicuramente il primo posto in cui cercare e dovrebbe rispondere alla tua domanda il 95% delle volte.


Hai un riferimento al registro delle modifiche di coreutils? La più recente che ho potuto trovare è stata del 2007.
l0b0,

2
GNU Coreutils ChangeLog non è stato aggiornato dal 2007. cvs.savannah.gnu.org/viewvc/coreutils/… Ora devi guardare i log di git.
Mikel,

2
Potrebbe essere generato automaticamente dai registri git. C'è un ChangeLog.bz2in /usr/share/doc/coreutils-8.10sul mio sistema Fedora, e la voce principale proviene da 2011-02-04. Possibile anche che si tratti di un fork RH - lo esaminerò più avanti oggi.
Mattdm,

@mattdm: c'è /usr/share/doc/coreutils/changelog.gz su Ubuntu - Grazie! Purtroppo risale solo al 2008, che è troppo recente per alcuni degli strumenti pertinenti. Immagino che subentri dove è finito l'ultimo, però.
20

3
Ecco la prova: git.savannah.gnu.org/cgit/coreutils.git/tree/HACKING Scorri fino alla linea 131.
Shinnok

4

Perché non usare il controllo del codice sorgente afferente a X per cercare la funzione Y? Il repository di origine è il modo migliore per identificare quando è stata introdotta una particolare funzionalità.

Per coreutils puoi andare su http://git.savannah.gnu.org/cgit/coreutils.git e cercare parole chiave correlate a Y nei messaggi di log o particolari righe di codice che hai identificato come appartenenti a Y. Puoi farlo su l'interfaccia web direttamente o, meglio ancora, clona il repository sorgente sulla tua stazione e cerca usando git-bisect , git-blame e git-log --grep .

Quindi usa git-descritto per scoprire che il tag è il più vicino a un commit specifico. I tag sono usati principalmente per i numeri di versione, quindi ti darà la versione che ha introdotto il commit.

Puoi adattare il metodo sopra, a seconda di X e del suo controllo del codice sorgente.


Come identificheresti quale commit / linea è andato in quale versione del software? Inoltre, la ricerca di Savannah è gravemente interrotta - Nessun risultato per le stringhe che sono ovviamente negli stessi messaggi di log.
l0b0

Usa git-descritto per scoprire che il tag è il più vicino a un commit specifico. I tag sono usati principalmente per i numeri di versione. Per quanto riguarda la distruzione di Savannah, non puoi farci molto. Git clona il repository nella tua casella e lavora a modo tuo usando i comandi git che ho descritto nel post.
Shinnok,

1

Su piattaforme Debian e Debian come Ubuntu :

sudo apt-get changelog coreutils > changelog.txt 

fornisce il log delle modifiche di GNU Core Utilities alla versione precedente 4.5.1-1.

Non sono sicuro se ci sono soluzioni altrettanto convenienti su altre piattaforme.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.