7 octobre 2014

Subversion : update automatique sous Windows

Début de journée de boulot : allumer le PC, mettre à jour les projets via SVN. Les cafés ne sont volontairement pas listés.
Point de salut sans les updates SVN. A moins d'aimer gérer des conflits (de fichiers) et plus généralement, perdre du temps.
Voici donc une astuce pour automatiser (sous Windows) la mise à jour des projets versionnés et pouvoir ainsi prendre tranquillement son café pendant que ça mouline.

L'idée est ici de :
  • utiliser le client en ligne de commande de TortoiseSVN pour mettre à jour des projets ;
  • encapsuler les lignes de commande nécessaires dans un fichier .bat ;
  • faire exécuter ce fichier par Windows selon certains déclencheurs.
Note : Si vous utilisez Subversion et Windows, il y a de très fortes chances que vous utilisiez le logiciel TortoiseSVN. Si ce n'est pas le cas, charge à vous de vérifier que le logiciel que vous utilisez inclut une CLI et comment l'utiliser. Il vous suffira alors d'adapter la dernière ligne du fichier .bat présenté plus bas.

A priori, il n'y aura pas qu'un seul projet versionné. Il va donc falloir dire à TortoiseSVN de mettre à jour chacun de ces projets. Or sa documentation (cf. liens en bas de l'article) dit que le paramètre "path" accepte plusieurs chemins séparés par le caractère "*". Super, ça évitera d'avoir à lancer une requête par projet !

Dans mon cas, tous les projets versionnés sont dans le même dossier (et ce dossier ne contient QUE des projets versionnés) donc c'est plutôt simple :
SET svnFolders=
FOR /D %%G IN ("C:\Users\aurelien\Documents\projets\*") DO SET svnFolders=!svnFolders!%%G*
Ce code concatène dans la variable "svnFolders" les chemins de tous les dossiers enfants directs du dossier dont on indique le chemin dans le "FOR ... IN".

Si les projets sont répartis dans différents dossiers, il suffit de lister les dossiers parents dans le "FOR ... IN", exemple :
SET svnFolders=
FOR /D %%G IN ("C:\Users\aurelien\Documents\projets\*" "C:\Users\aurelien\Documents\autre dossier\*") DO SET svnFolders=!svnFolders!%%G*

Si dans un des dossiers parents, au même niveau que les projets versionnés, se trouve un dossier n'étant pas versionné, il ne sera simplement pas pris en considération par TortoiseSVN lors de l'update.

Au final, voici le contenu de mon fichier "svnUpdate.bat" :
@ECHO off
SETLOCAL enabledelayedexpansion
SET svnFolders=
FOR /D %%G IN ("C:\Users\aurelien\Documents\projets\*") DO SET svnFolders=!svnFolders!%%G*
START TortoiseProc.exe /command:update /path:%svnFolders% /closeonend:0
La première ligne sert à ne pas afficher dans la console chaque commande exécutée.
La seconde ligne active l'interprétation des variables à l'exécution (avec "!...!") et plus seulement au parsing.
La dernière dit à TortoiseSVN de mettre à jour les projets. Le paramètre "/closeonend:0" spécifie le fait de ne pas fermer la fenêtre de TortoiseSVN à la fin de l'opération. C'est un choix personnel, ça permet de voir quels fichiers ont été mis à jour dans quel projet.

Maintenant que l'on a un fichier .bat qui lance bien la mise à jour des projets versionnés, il faut que ce fichier soit exécuté automatiquement.
Pour cela, accédez au Panneau de configuration puis aux Outils d'administration et enfin au Planificateur de tâches. Cliquez sur "Action" dans les menus puis "Créer une tâche de base". Nommez votre tâche puis choisissez son déclencheur (pour ma part : ouverture de ma session). A l'écran "Action", choisissez "Démarrer un programme"et à l'écran suivant, indiquez le chemin du fichier .bat créé précédemment.

Et voilà, ça vous permet aussi de juste double cliquer sur le .bat pour lancer manuellement la mise à jour de tous vos projets n'importe quand, pratique :)

Sources : documentation de TortoiseSVN ; FAQ Batch de Developpez.com ; support Microsoft

Aucun commentaire:

Enregistrer un commentaire