Question

J'aimerais implémenter un moyen d'enregistrer la version d'un projet dans le code, afin qu'elle puisse être utilisée lors des tests et pour aider à suivre les bugs.Il semble que le meilleur numéro de version à utiliser serait simplement le numéro de révision actuel de Subversion.Existe-t-il un moyen simple d'intégrer ce numéro dans un fichier d'en-tête (C++ dans mon cas) ou quelque chose du genre, que je peux ensuite accéder dans le code ?Je suppose que c'est un hook post-commit ou quelque chose comme ça ?

Quelqu'un a-t-il une expérience dans la mise en œuvre de cela (avec du code à partager, s'il vous plaît ?), ou peut suggérer une meilleure alternative ?Merci.

Était-ce utile?

La solution

Bien que astucieuse, l'astuce du mot clé de révision ne met à jour le fichier que lorsqu'il est modifié dans cette révision - si vous ne modifiez pas le fichier, il continuera à refléter l'ancienne révision.

Si vous souhaitez que le logiciel reflète toujours le numéro de révision global, vous devrez alors vous plonger dans le fichier d'entrées SVN pertinent et extrayez-le, ce qui n'est pas trop difficile (c'est un fichier XML).

Wikipédia fait ça sur leur page de version pour indiquer la révision du logiciel en cours d'exécution ; le code est ici - Cherchez le getSvnRevision() méthode.

Autres conseils

Deux façons:

Intégrer $Id$ ou $Révision$ dans le code.Puis réglez svn:keywords="Révision de l'identifiant" propriété sur le fichier.Cela vous donnera la dernière révision modifiée de ce fichier source.Idéal pour les petits projets et scripts.

Vous pouvez également utiliser un processus piloté par Makefile et l'outil de ligne de commande svnversion.(Spécifique au langage - cela devrait fonctionner pour C/C++)

echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h

Ou un script de construction plus complexe avec sed et version.h.in.Alors juste #inclure la version.h

Cela vous donnera le numéro de version du référentiel, qui changera à chaque validation/mise à jour, et constitue probablement un numéro de version plus approprié pour la plupart des projets.

Note:J'ai également utilisé une chaîne de version lisible par l'homme que je mets à jour manuellement.L'exemple donnerait : Version:1.0.1-r13445

~J

Vous pouvez également utiliser SubWCRev qui fait partie de TortoiseSVN.

SubWCRev est un programme de console Windows qui peut être utilisé pour lire l'état d'une copie de travail Subversion et éventuellement effectuer une substitution de mots clés dans un fichier modèle.Ceci est souvent utilisé dans le cadre du processus de construction comme moyen d'incorporer les informations de la copie de travail dans l'objet que vous construisez.Généralement, il peut être utilisé pour inclure le numéro de révision dans une case « À propos ».

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

dans votre Makefile, ajoutez :

SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...

alors tu peux utiliser une macro SVN_REV n'importe où dans votre code, par exemple :

printf ("Version: SVN %s\n", SVN_REV);

Vous pouvez utiliser le svn:keywords propriété pour permettre à Rev mot-clé.

Vous pouvez alors utiliser $Rev$ dans votre code et SVN le développera automatiquement lors de la mise à jour vers $Rev: 256 $ qui peut ensuite analyser...

Plus d'informations sur le manuel Subversion

Une bonne solution à jour :

Créer un Makefile contenant la ligne suivante (dans le même dossier que YourFile.dox):

sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox

Et YourFile.dox devrait contenir ceci :

...
PROJECT_NUMBER         = "Revision RevNumber"
...

Maintenant:

  1. sed remplace RevNumber dans le .dox avec la sortie de svnversion (exécuté dans le dossier principal de votre référentiel) et enregistre le fichier modifié dans YourFileDummy.dox
  2. doxygen est exécuté le YourFileDummy.dox pour générer la documentation
  3. Votre documentation contiendra désormais le numéro de révision !
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top