Trac : un outil de gestion de projet

trac est un outil intégré de gestion de projet, avec wiki, gestion de bugs, feuille de route. On peut aussi le brancher avec un système de gestion de version. Je l’ai utilisé pendant un moment, et j’ai arrêté de l’utiliser plus par manque de besoin que parce qu’il ne m’allait pas. Je le réutiliserai donc volontier à l’occasion.

Installation

Il s’agit d’une installation locale.

$ mkdir  ~/Trac

Ajout de projets :

    $ trac-admin  ~/Trac/Projet1 initenv Projet1 'sqlite:db/trac.db'
    $ cp Trac/Projet1/conf/trac.ini Trac
    $ trac-admin  ~/Trac/Projet2 initenv Projet2 'sqlite:db/trac.db' \
         --inherit=~/Trac/trac.ini

Démarage du serveur :

$ tracd --port 8080  ~/Trac/Projet1  ~/Trac/Projet2

On peut voir sur la page http://localhost:8080/ que ça fonctionne, mais il n’y a pas encore d’utilisateur.

Ajout d’un utilisateur (administrateur) :

    $ htpasswd -c ~/.htpasswd anne

    $ trac-admin ~/Trac/Projet2 permission add anne TRAC_ADMIN

    $ tracd -p 8080 --basic-auth="*,/home/anne/.htpasswd,nom_de_domaine" \
          ~/Trac/Projet1  ~/Trac/Projet2

Configuration

C’est dans les fichiers ~/Trac/trac.ini pour la partie commune où les fichiers ~/Trac/Projet1/conf/trac.ini pour les configurations spécifiques. Par exemple :

    [mainnav]
    wiki.label = Home
    tickets.href = /report/1

    [metanav]
    help = disabled
    about = disabled

Installation de TagsPlugin

$ sudo easy_install https://trac-hacks.org/svn/tagsplugin/tags/0.6

puis, dans trac.ini :

    [tags]
    ignore_closed_tickets = true
    ticket_fields = component, keywords, milestone

    [components]
    tractags.* = enabled

    $ trac-admin ~/Trac/Projet2 upgrade
    $ trac-admin ~/Trac/Projet2 wiki upgrade

Puis redémarrer le seveur.

Installation ChildTicketsPlugin :

    unzip childticketsplugin-r11365.zip
    cd childticketsplugin
    sudo easy_install 0.12

Et modifier trac.ini pour l’ajouter :

    [components]
    childtickets.* = enabled
    childtickets.childtickets.tracchildticketsmodule = enabled

et configurer le plugin dans la rubrique :

    [childtickets]

Import files

    $ trac-admin ~/Trac/Projet2 wiki load <path> [...]

ou

    ... wiki import <page> [file]

Par exemple, la mise à jour de la doc :

    $ trac-admin ~/Trac/Projet2 wiki import UserManual \
               ~/Projet2//Manual/index.moin

Cf. cette note pour voir la génération de index.moin en txt2tags.

SVN repos

Depuis le menu adminitrateur :

Name: MonSvn
Type: svn
Directory: /var/svn

Puis:

$ trac-admin ~/Trac/Projet2 repository resync "MonSvn"

et hop: on voit apparaitre un nouvel onglet [Browse source].

Reste à prevenir SVN pour la synchro. Pour cela, il faut ajouter un //hook// post-commit pour appeler :

trac-admin $ENV changeset added "toto" $REV

à chaque changeset.

     mkdir /tmp/svn_cache
     chown -R root:subversion /tmp/svn_cache

     cd /var/svn/hooks
     sudo vim post-commit

     #!/bin/sh
     export PYTHON_EGG_CACHE="/tmp/cache"
     REPOS="$1"
     REV="$2"
     /usr/local/bin/trac-admin /home/anne/Trac/Projet2 changeset added /var/svn "$2"

    $ chmod 755 post-commit

On met presque la même chose dans post-revprop-change mais avec modified au lieu de added dans la commande trac-admin.

    $ touch post-revprop-change
    $ vi post-revprop-change
    #!/bin/sh
    export PYTHON_EGG_CACHE="/tmp/cache"
    REPOS="$1"
    REV="$2"
    /usr/local/bin/trac-admin /home/anne/Trac/Projet2 changeset modified /var/svn "$2"

$ chmod 755 post-revprop-change

Raccoucis

Dans mon .bashrc, quelques fonctions pratiques :

    function trac_start () {
      tracd -d --hostname=localhost -p 8080 \
        --basic-auth="*,/home/anne/.htpasswd,pacatech" \
        -e ~/Trac
    }
    function trac_stop () {
      echo ""
      echo "DIY: kill this process to stop trac daemon:"
      echo ""
      psam | grep tracd | grep htpasswd
    }
    function trac_bkp () {
      NAME=Trac-``date +"%Y%m%d"``
      TAR=$NAME.tar.gz
      mkdir $NAME
      trac-admin ~/Trac/Projet1 hotcopy $NAME/CartoC
      trac-admin ~/Trac/Projet2 hotcopy $NAME/Divers
      tar zcf $TAR $NAME
      rm -rf $NAME
      echo "trac backup ``du -sh $TAR``"
    }

Voir aussi :