2010-03-29 13 views
1

nous avons l'environnement suivant: un serveur Windows 2008 avec Apache 2.2.14 et SVN 1.6.6 via WebDAV. Plusieurs développeurs s'engagent dans le code Java à partir de différentes plates-formes Windows.Comment éviter la conversion du délimiteur de ligne (résultant en des numéros de lignes incorrects) dans le hook de pré-validation de Subversion?

Maintenant, nous voulons implémenter un hook pré-commit dans notre dépôt qui exécute Checkstyle sur le code validé. Nous utilisons SVNChecker (http://svnchecker.tigris.org/) pour cela, qui fonctionne plutôt bien. Malheureusement, lorsque Checkstyle signale des erreurs, les numéros de ligne dans les rapports sont les valeurs doubles des numéros de ligne réels.

Lorsque vous validez quelque chose dans SVN, il crée un répertoire temporaire avec les nouveaux fichiers. Ensuite, le hook pré-commit est exécuté et s'il réussit, les nouveaux fichiers sont réellement validés dans le référentiel. J'ai analysé ces fichiers temporaires dans un éditeur hexadécimal et j'ai découvert que toutes les nouvelles lignes (\ n) étaient remplacées par un retour chariot et une nouvelle ligne (\ r \ n). Comme nous utilisons les sauts de ligne Windows (\ r \ n) dans nos fichiers, ceci a abouti à \ r \ r \ n, qui est considéré comme deux nouvelles lignes par Checkstyle et plusieurs éditeurs de texte. La chose strage est que les sauts de ligne sont corrects lors de la vérification de notre dépôt, de sorte qu'ils sont en quelque sorte reconverti quelque part.

Je pourrais résoudre ce problème en définissant la propriété svn: eol-style (voir http://svnbook.red-bean.com/en/1.1/ch07s02.html#svn-ch-7-sect-2.3.5) en natif. Tout a fonctionné comme il se doit alors. Malheureusement, pour nous cela voudrait dire que nous devrions ajouter cette propriété à tous les fichiers de notre dépôt. Pour autant que je sache, il y a un paramètre dans le client SVN qui le fait automatiquement quand vous ajoutez un nouveau fichier, mais malheureusement nous ne pouvons pas dire à tous nos développeurs d'ajouter ce paramètre à leur client SVN.

La description de la propriété eol-style indique que «par défaut, Subversion ne prête aucune attention au type de marqueur de fin de ligne (EOL) utilisé dans vos fichiers». Pour moi, cela ressemble à un bug dans SVN que les nouvelles lignes sont néanmoins converties.

Est-ce que quelqu'un a une idée de comment résoudre ce problème sans utiliser des solutions de contournement laides telles que la conversion manuelle des retours à la ligne dans le crochet de pré-validation?

Merci pour votre aide, MEMMINGER

Répondre

0

Je suppose que SVN a créé un répertoire temporaire pour les crochets pré-COMMIT a eu tort. Au lieu de cela, un hook de pré-validation peut accéder aux fichiers sources en utilisant svnlook et un numéro de transaction. SVNChecker est celui qui enregistre ces fichiers dans un répertoire temporaire. Ce qui cause les mauvais délimiteurs de ligne est une fonctionnalité Python qui convertit automatiquement les sauts de ligne afin que toutes les applications Python puissent utiliser les délimiteurs de lignes Unix en interne. Cependant, seules certaines fonctions convertissent les sauts de ligne de sources externes en sauts de ligne internes à Python par défaut. SVNChecker ne s'occupe pas de cela, qui a déjà été signalé comme un bug sur http://svnchecker.tigris.org/issues/show_bug.cgi?id=33.