Question

Dans mon application Web, j'ai un fichier contenant le numéro de révision actuel via $Rev$.Cela fonctionne bien, sauf que si je n'apporte aucune modification à ce fichier, il n'est pas validé.

Puis-je forcer un seul fichier à toujours être validé sur le serveur SVN ?

J'utilise TortoiseSVN pour Windows, donc tout code ou instructions étape par étape serait utile.

Était-ce utile?

La solution

Si TortoiseSVN est installé, vous disposez également de l'outil SubWCRev.Utilisez cet outil pour obtenir la révision au lieu d'utiliser à mauvais escient le mot-clé $REV$.

  1. créez un fichier modèle contenant vos définitions, peut-être quelque chose comme

    const long WC_REV = $WCREV$;

    dans un fichier nommé version.h.tmpl

  2. à chaque build, appelez SubWCRev pour créer le « vrai » fichier que vous pouvez utiliser dans votre application :

    Chemin SubWCRev\vers\workingcopy chemin\vers\version.h.tmpl chemin\vers\version.h

Cela créera le fichier version.h à partir de version.h.tmpl, avec le texte $WCREV$ remplacé par la révision actuelle de votre copie de travail.

Le documentation pour SubWCRev pourrait aider aussi.

Autres conseils

Fondamentalement, vous voulez la sortie du svnversion commande dans un fichier.

Ces fichiers sont généralement conservés en dehors du référentiel et créés automatiquement par un script de build.Je vous conseille de faire de même.Si vous ne construisez pas, mais juste pour un svn up côté serveur, il suffit d'appeler svnversion après svn up ou créez un script shell pour effectuer les deux actions.

Si tu avoir pour le conserver dans le référentiel par contre, en appelant svnversion dans un hook de pré-commit serait votre meilleur pari.

Je pense que vous ne comprenez peut-être pas comment fonctionne l'indicateur $Rev$.Le but de l'indicateur Rev n'est pas que cette révision soit toujours validée dans le référentiel Subversion.L'objectif est que lors d'une mise à jour, l'indicateur Rev soit toujours celui de la révision. Vous ne devriez pas avoir besoin de mettre du code dans Subversion contenant la révision. Subversion est très efficace pour garder une trace de ces informations pour vous.

Ce que vous avez probablement manqué, c'est que vous devez définir une propriété sur le fichier afin que le mot-clé Revision soit correctement traité.

svn propset svn:keywords "Revision" file.txt

Cela garantira que chaque fois que vous effectuez une mise à jour, le $Rev :L'indicateur xxx$ sera mis à jour avec la révision actuelle.Vous n'avez pas à vous soucier de la manière dont il est validé dans le référentiel.

@gatekiller :Il semble que TortoiseSVN prenne en charge Crochets côté client.

Cela fonctionne bien, sauf que si je n'apporte aucune modification à ce fichier, il n'est pas validé.

Si le fichier ne change jamais, pourquoi auriez-vous besoin de le valider à chaque fois ?

Edit] @sean = Je comprends ce qu'il essaie de faire, mais si le fichier ne se met jamais à jour via un crochet ou un autre processus et donc ne change pas, SVN ne le ramassera jamais.

Je suggère de changer d'approche, valider un fichier à chaque fois signifie conserver implicitement le numéro de révision global dans ce fichier.L'utilisateur peut avoir besoin d'un autre mot-clé, Clé globale, dont l'inexistence s'explique ici En fait, je n'ai pas utilisé mentionné version svn cependant, cela peut vous conduire à une solution.

Le fichier de numéro de révision pourrait-il être modifié par un script qui déploie votre site Web de SVN sur le serveur Web ?

Je ne suis pas sûr sous Windows, mais en utilisant un script bash, je ferais quelque chose comme ..

$ version=$(svnversion)
$ svn export . /tmp/staging/
Export complete.
$ echo "Revision: ${version}" > /tmp/staging/version.txt

Alors /tmp/staging/version.txt contiendrait « Révision :1" (ou quel que soit le numéro de révision le plus élevé).

Vous pouvez bien sûr remplacer un identifiant dans un fichier, comme $Rev$ (au lieu de créer version.txt comme dans l'exemple ci-dessus)

En fonction de votre client, certains d'entre eux proposent un hook de pré-validation qui vous permet d'implémenter quelque chose qui "touche" simplement le fichier et le marque comme modifié.Si vous utilisez quelque chose comme Visual Studio, vous pouvez créer une tâche de post-construction qui "toucherait" le fichier, mais vous devrez vous assurer que vous effectuez une construction avant de valider les modifications.

@gradonmantank :Parce qu'il souhaite que ce fichier soit mis à jour avec le dernier numéro de révision.Avez-vous lu sa question dans son intégralité ?

Le hook de pré-validation pourrait fonctionner.

J'avais l'habitude de faire cela manuellement.J'exécuterais un script qui utiliserait sed pour remplacer un commentaire par l'horodatage actuel dans mon fichier $Rev$.De cette façon, le contenu du fichier changerait et Subversion le validerait.

Ce que je n'ai pas fait, c'est passer à l'étape suivante :en utilisant Hooks du référentiel de Subversion pour automatiser le processus.Le problème est que je ne sais pas si vous êtes autorisé à modifier le contenu du fichier dans les hooks.La documentation semble suggérer que vous ne pouvez pas.

Au lieu de cela, je suppose que vous auriez besoin d'un petit script que vous exécuteriez à la place du svn commit commande qui met d’abord à jour l’horodatage, puis exécute la validation normale.

Commettre le fichier ne vous servirait à rien.Le fichier n'est pas validé avec la version complète à l'intérieur, il est remplacé uniquement par le mot-clé.Si vous regardez le fichier dans le référentiel, vous verrez ceci.

En tant que tel, vous devez plutôt forcer la mise à jour du fichier d’une manière ou d’une autre.

Si vous êtes sur la plateforme Windows, vous pouvez utiliser l'outil SubWCRev, distribué avec TortoiseSVN.Documentation ici.

Vous pouvez utiliser les hooks de pré-commit svn pour le faire.
L'idée générale que j'ai en tête est d'en créer une qui, avant la validation, mettra le nouveau numéro de révision dans le fichier (obtenez-le en utilisant svnlook) ou peut-être modifiera une fausse propriété sur le fichier (elle doit changer ou SVN l'ignorera).

Pour plus d'informations sur les hooks de pré-commit, j'ai trouvé cette page utile.

Je pense que la meilleure approche pour garantir qu'il existe un fichier dans votre application Web portant le numéro de révision SVN est de ne pas avoir de fichier que vous validez, mais plutôt de l'extraire dans le cadre de votre script de construction.

Si vous utilisez maven, vous pouvez le faire avec le plugin maven-buildnumber-plugin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top