Inserimento del numero del repository di subversion nel codice
Domanda
Mi piacerebbe implementare un modo per registrare la versione di un progetto all'interno del codice, in modo che possa essere utilizzato durante i test e per tenere traccia dei bug.Sembra che il miglior numero di versione da utilizzare sia semplicemente il numero di revisione corrente di Subversion.Esiste un modo semplice per collegare questo numero a un file di intestazione (C++ nel mio caso) o qualcosa del genere, a cui posso quindi accedere nel codice?Immagino che questo sia un hook post commit o qualcosa del genere?
Qualcuno ha qualche esperienza nell'implementazione di questo (con codice da condividere, per favore?) o può suggerire un'alternativa migliore?Grazie.
Soluzione
Sebbene sia ingegnoso, il trucco della parola chiave revision aggiorna il file solo quando viene modificato in quella revisione: se non modifichi il file, continuerà a riflettere la vecchia revisione.
Se vuoi che il software rifletta sempre il numero di revisione complessivo, dovrai approfondire il file file di voci SVN pertinente ed estrarlo, il che non è troppo difficile (è un file XML).
Wikipedia lo fa la pagina della loro versione per indicare la revisione del software in esecuzione; il codice è qui - cerca il getSvnRevisione() metodo.
Altri suggerimenti
Due strade:
Incorporare $Id$ O $Revisione$ all'interno del codice.Quindi imposta svn:keywords="Revisione ID" proprietà sul file.Questo ti darà l'ultima revisione modificata di quel file sorgente.Buono per progetti e script più piccoli.
In alternativa, utilizzare un processo basato su Makefile e lo strumento da riga di comando svnversion.(Specifico della lingua: dovrebbe funzionare per C/C++)
echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
O qualche script di build più complesso con sed e version.h.in.Allora basta #include versione.h
Questo ti darà il numero di versione del repository, che cambierà con ogni commit/aggiornamento, ed è probabilmente un numero di versione più appropriato per la maggior parte dei progetti.
Nota:Ho anche utilizzato una stringa di versione leggibile dall'uomo che aggiorno manualmente.L'esempio darebbe: Versione:1.0.1-r13445
~J
Puoi anche utilizzare SubWCRev che fa parte di TortoiseSVN.
SubWCRev è un programma console Windows che può essere utilizzato per leggere lo stato di una copia di lavoro di Subversion e facoltativamente eseguire la sostituzione di parole chiave in un file modello.Questo viene spesso utilizzato come parte del processo di creazione come mezzo per incorporare le informazioni della copia di lavoro nell'oggetto che stai creando.In genere potrebbe essere utilizzato per includere il numero di revisione in una casella "Informazioni".
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
nel tuo Makefile, aggiungi:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
allora puoi usare la macro SVN_REV
ovunque nel codice, ad esempio:
printf ("Version: SVN %s\n", SVN_REV);
Puoi usare il svn:keywords
proprietà per abilitare il Rev
parola chiave.
È quindi possibile utilizzare $Rev$
nel tuo codice e SVN lo espanderà automaticamente durante l'aggiornamento a $Rev: 256 $
che può quindi analizzare...
Una buona soluzione aggiornata:
Creare un Makefile
contenente la riga seguente (nella stessa cartella di YourFile.dox
):
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
E YourFile.dox
dovrebbe contenere questo:
...
PROJECT_NUMBER = "Revision RevNumber"
...
Ora:
sed
sostituisceRevNumber
nel .dox con l'output disvnversion
(eseguito nella cartella principale del repository) e salva il file modificato inYourFileDummy.dox
doxygen
viene eseguito suYourFileDummy.dox
per generare la documentazione- La tua documentazione ora conterrà il numero di revisione!