2009-07-09 18 views
1

J'utilise Visual SVN sur mon Windows Box.Utiliser svnversion avec svn: keywords

J'ai le dépôt Application, qui a Framework en tant que svn: externe. Tout va bien.

Lorsque je fais un checkout de Application, je voudrais avoir la version de Application et Framework pour l'inclusion dans un fichier de pied de page. De cette façon, je pourrais avoir quelque chose comme:

Application Version $ApplicationVersion$, Framework Version $FrameworkVersion$ 

Ordinairement, je comprends que je pourrais utiliser svn: mots-clés et ajouter la révision - mais si je comprends bien, svn: mots-clés appliquer sur une base par fichier. Quelques sites ont suggéré d'utiliser svnversion pour produire la sortie pour chaque variable, mais je ne suis pas entièrement sûr de la façon de procéder.

Encore une fois, sur une Windows Box, en utilisant VisualSVN. Je développe également sur un Mac en utilisant Versions.app si elle fournit une interface plus familière pour les gens à répondre :)

Édition - mon application est une application web PHP. En tant que tel, il n'y a pas de compilation.

Merci!

Répondre

4

Pour utiliser svnversion, vous devez l'intégrer dans le processus de construction. Si vous l'exécutez sur une extraction Subversion, il affichera une chaîne comme 73597:73598, indiquant la version de votre arborescence (notez que différents fichiers peuvent avoir des versions différentes, plus les fichiers peuvent également avoir des modifications locales). Vous mettez quelque chose comme

CFLAGS+=-DSVNVERSION="\"`svnversion`\"" 

dans votre Makefile, puis mettez

#define VERSION_STRING "Application version" SVNVERSION ", Framework version" FRAMEWORK_VERSION 

dans le code. Si vous n'utilisez pas Make, ou si votre processus de construction ne peut pas exécuter une commande dont la sortie produit une option de ligne de commande du compilateur, vous pouvez également utiliser l'utilitaire subwcrev fourni avec TortoiseSVN. Vous utilisez cela comme une étape de pré-construction, et le faire transformer un fichier avec des espaces réservés dans une copie du fichier avec les espaces réservés remplacés par la version réelle; alors votre compilation va compiler et lier le nouveau fichier.

Modifier: Pour le cas de PHP, il est impossible d'avoir la révision écrite automatiquement dans un fichier sur la caisse ou la mise à jour. Au lieu de cela, vous pouvez lancer svnversion sur chaque accès PHP, en mettant sa sortie dans la réponse HTML. Si cela devient trop cher, vous pouvez mettre en cache le résultat de svnversion dans un fichier et ne régénérer le fichier que s'il est plus ancien qu'une heure (par exemple), laissant à l'utilisateur de se souvenir de supprimer le fichier après une mise à jour pour le recalculer la cache tout de suite.

+0

Mon application est une application web PHP. En tant que tel, pas de compilation. Si je devais utiliser quelque chose comme subwcrev, comment puis-je l'exécuter automatiquement quand il est extrait? – EvilChookie

+0

Je n'ai pas été capable de trouver une solution acceptable. Soit les solutions ne correspondent pas à ma situation (mon serveur svn est juste une fenêtre Windows qui héberge VisualSVN.), Soit les options sont bien trop complexes à implémenter pour ce qui devrait être une simple opération. – EvilChookie

+0

Le fait que vous utilisiez un serveur VisualSVN est vraiment hors de propos ici. svnversion est juste un outil côté client, et n'interagit pas du tout avec le serveur. Pouvez-vous l'obtenir (ou subwcrev) pour afficher les informations de version lorsque vous l'appelez manuellement sur la ligne de commande? –