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.

È stato utile?

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...

Maggiori informazioni sul manuale di Subversion

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:

  1. sed sostituisce RevNumber nel .dox con l'output di svnversion (eseguito nella cartella principale del repository) e salva il file modificato in YourFileDummy.dox
  2. doxygen viene eseguito su YourFileDummy.dox per generare la documentazione
  3. La tua documentazione ora conterrà il numero di revisione!
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top