Question

Nous utilisons svn: externals pour des révisions spécifiques d'une bibliothèque, par exemple. comme

xyzlib -r12345 https://asdf.asdf.local/xyzlib/trunk/

Lorsque vous apportez une modification dans votre copie de travail à un tel serveur externe extrait, il est possible de valider même si les liens externes renvoient à une révision spécifique et non à HEAD.

Lorsque vous exécutez svn update après la validation, les modifications seront supprimées dans la copie de travail, car Subversion rétablit le tout à la révision 12345. Vous ne voyez donc jamais réellement les modifications, mais elles le sont toujours. dans la tête, ce qui est mauvais.

Est-il possible d'interdire les commits uniquement lorsque l'externe ne pointe pas vers la révision HEAD?

Était-ce utile?

La solution

Pour ces types de validations, je recommanderais également un hook de pré-validation, mais au lieu d'écrire un script qui peut facilement se révéler impossible à comprendre, je recommande d'utiliser une bibliothèque comme SVNKit - http://svnkit.com/ (si vous connaissez Java).

J'ai moi-même écrit quelques crochets de pré-commit en utilisant cette bibliothèque et il est assez facile de travailler avec. Vous écrivez un petit programme Java exécutable appelé à partir du hook de pré-validation par Subversion. Ensuite, il est facile d’extraire par exemple propriétés ou parties de l’URL permettant de valider et de rejeter la validation si elle ne s’applique pas à vos "règles".

Consultez les classes SVNLookClient et SVNChangeEntry - elles disposent de méthodes pour les cas les plus courants (par exemple, extraire des informations sur une validation en cours.)

Autres conseils

Vous pouvez essayer quelque chose comme ceci: utilisez un script de pré-validation pour vérifier si la validation va vers une balise. Si c'est le cas, échouez et envoyez un message. En savoir plus sur les points d'ancrage de subversion. Vous devrez écris la regex pour qu'elle échoue si ce n'est pas HEAD plutôt que si elle est une balise.

$SVNLOOK changed -t “$TXN” “$REPOS” | egrep -v “^[AD][[:space:]]+(.*/)?tags/[^/]+/<*>#8221; | egrep “^[^[:space:]]+[[:space:]]+tags/[^/]+/.+”
if [ $? -eq 0 ] ; then
echo >&2 “***************************************”
echo >&2 “* Modification of tags is not allowed *”
echo >&2 “***************************************”
exit 1
fi

Puisque vous utilisez https, je suppose que vous utilisez mod_dav_svn . Vous pouvez configurer une URL supplémentaire dans le référentiel de votre bibliothèque et ne lui octroyer qu’un accès en lecture seule. De cette façon, même les développeurs qui peuvent normalement s’engager dans la bibliothèque ne pourront pas s’engager via svn: external.

Si vous ne vous êtes pas engagé à conserver le paramètre externe défini comme une révision de ligne de réseau, pourquoi ne pas créer simplement une nouvelle étiquette basée sur cette révision. Vous pouvez ensuite avoir votre svn: external point sur la balise et utiliser l’une des méthodes de contrôle d’accès documentées pour limiter les commits dans votre répertoire de balises (ou placer la balise dans un référentiel différent et faire en sorte que ce référentiel soit en lecture seule).

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