Come funzionano le versioni di calcolo dei programmi?

3

Ho scritto uno strumento da riga di comando e voglio che stampi la versione corrente del programma se scrivo il comando --version . Ho un setup git repository per il mio programma, quindi ho pensato che potrei in qualche modo collegarmi per ottenere informazioni sulla versione dai tag o qualcosa del genere?

Che cosa accade quando digito program --version nel mio terminale? Presumendo che ho un qualche tipo di impostazione del parser di flag in cui posso verificare che sia presente la flag di versione, come posso gestirlo?

L'unico modo in cui posso pensare di farlo ora è con un semplice valore hardcoded, ad es. #define VERSION "0.0.1" , ma sono sicuro che possiamo fare meglio di così, giusto?

    
posta user2592868 06.12.2016 - 02:36
fonte

2 risposte

2

Fondamentalmente, la stringa della versione deve essere incorporata da qualche parte nel programma.

La parte interessante è come rendere più semplice mantenere questa versione sincronizzata con altre posizioni in cui si potrebbe desiderare di avere il numero di versione, come il controllo della versione, la documentazione, i file di configurazione di build, ecc. Tale meccanismo può ridurre la quantità di lavoro e prevenire errori come l'aggiornamento della versione in un posto ma non nell'altro.

Potresti, ad esempio, utilizzare i tag nel controllo della versione come principale fonte di informazioni e diffondere queste informazioni negli altri posti. È possibile scrivere uno script / makefile personalizzato per questo scopo e leggere la versione dalla "fonte principale di verità", quindi propagarla in altri luoghi tramite i parametri della riga di comando, generando i file di risorse con le definizioni appropriate o sostituendo i parametri del modello come $VERSION in alcuni file, ecc.

Potresti anche provare a utilizzare un software pronto all'uso - la disponibilità potrebbe dipendere da ciò che utilizzi per creare il tuo software. Ad esempio, se stai utilizzando Gradle, plug-in di rilascio di assioni abbraccia questo approccio e propaga la versione trovata nei tag git per Nomi JAR e metadati che l'applicazione può quindi leggere e visualizzare quando viene richiesto.

    
risposta data 06.12.2016 - 09:53
fonte
0

Questo spesso esce dal meccanismo di costruzione. per esempio. prendi una decisione che la tua prossima versione sia la versione 1.x . Questo viene incorporato in una configurazione che viene quindi referenziata o incorporata staticamente nel codice sorgente.

Una variante di questo è usare un numero di build , e questo spesso proviene da un server di build, ad esempio se usi TeamCity o simili, assegnerà un numero di build univoco a ogni build e di nuovo è incorporato nel codice.

Nel mio progetto attuale usiamo entrambi. Accettiamo e configuriamo manualmente un numero di versione ( 1.0.20 , ad esempio) e il motore di compilazione determina inoltre il numero di build. In questo modo è chiaro che tipo di funzionalità sono presenti in quella build (tramite il numero di versione) ma il numero di build identifica con precisione quale revisione. Incorporiamo entrambi in un file di proprietà e incorporiamo quello nel deliverable, che sa come leggerlo e segnalarlo.

    
risposta data 06.12.2016 - 16:06
fonte

Leggi altre domande sui tag