2009-10-08 6 views
0

Dans l'intérêt d'essayer d'accélérer mon processus de construction continue NAnt/CruiseControl.Net/Ivy, j'espérais obtenir NAnt pour vérifier si mon code de base avait changé sur mon PC local après effectuer une mise à jour NAnt, puis si le code a a changé, puis démarrer le processus pour reconstruire ce projet et éventuellement élever un drapeau pour construire tous les composants suivants, quel que soit leur statut de changement. Raison d'être, mon processus de construction prend actuellement plus de 12 minutes pour accomplir beaucoup de travail, et je pense que je peux obtenir ce temps en ne construisant pas de code qui ne va pas changer, aussi bien comme garder les devs dans le bureau plus heureux aussi.Obtenir NAnt pour vérifier les fichiers modifiés dans SVN

Nous avons étudié la suppression de certains projets de l'ordre de construction, mais ils sont tous requis en cas de modification ultérieure de l'ordre de l'arbre de construction.

Répondre

6

Couple d'options que je peux voir

1 - émettre un svn status --show-mises à jour avant la mise svn et travailler s'il y a des changements (doit être aussi simple que de compter les lignes dans la réponse - 2 - passer de la tâche svn-update à la tâche exec et rediriger la sortie de svn up dans un fichier de test que vous pouvez publier pour déterminer si des mises à jour ont été effectuées. fait (similaire à la première option).

3 - Saisissez le svn log après le svn up avec une tâche basée sur http://jonathanmalek.com/wp/?p=244, puis traitez le fichier XML pour déterminer si des modifications ont été apportées. Cela ne fonctionnerait que si vous aviez la garantie d'une augmentation du nombre de tours seulement, car elle ne reçoit que les informations du journal pour la dernière révision. Variation sur ce serait saisir le journal avant le svn up et après, puis les comparer.

Personnellement, j'aller avec l'option 2. Exécution svn sur une mise aux résultats du répertoire de travail ce jour dans une ligne (à la révision) change donc d'utiliser la tâche de mise à jour de svn à ce qui suit:

<target name="Svn-update"> 
    <!-- Default to true so failure mode is to build/signal build is required --> 
    <property name="source.changed" value="true"/> 
    <exec 
      program="svn.exe" 
     commandline=’up′ 
      output="_update.log" 
      failonerror="true"/> 
    <property name="updates.count" value="0"/> 
    <foreach item="Line" in="_update.log" property="updates.line" trim="Both"> 
     <property name="updates.count" value="${int::parse(updates.count) + 1}"/> 
    </foreach> 
    <if test="${updates.count==1}"> 
     <!-- An up to date working directory generates a single line "At revision xxx" --> 
     <property name="source.changed" value="false"/> 
    </if> 
</target> 

maintenant vous pouvez utiliser if = "$ {source.change == 'true'}" et à moins = "$ {source.changed == 'true'}" pour déterminer quand vous devriez et devriez exécuter le reste de votre build et vos notifications

+0

Bon effort jusqu'à maintenant, mais je pense que j'ai besoin de quelque chose de plus concret pour attribuer les points. C'mon - donne moi du code !! : o) –

+0

Vous êtes l'homme! Bon effort! 150 points à venir! –

Questions connexes