Trac: Supression de ticket en masse


Suite à un problème avec mon environnement Trac pour gérer mes sources, celui ci était envahi de ticket SPAM envoyé par des bots car j’avais mal configuré les permissions. Maintenant que les permissions sont bonnes, il ne reste plus qu’à supprimer les ticket SPAM.

Ma version de Trac est celle de la Dapper (6.06 LTS) d’Ubuntu Server, donc la version 9.3. Il n’existe pas de plugin pour cette version qui permette de supprimer des tickets en masse. J’avais 300 ticket à supprimer.

La base de donnée étant en SQLite, j’ai écrit un petit script qui permet de supprimer les tickets.

Ce script doit être lancé avec un utilisateur qui a les droits décriture sur la base de donnée de Trac.

Paramètres:

  1. Chemin de la base de donnée SQLite de trac
  2. Premier ticket à supprimer
  3. Dernier ticket à supprimer

Script trac_del_ticket.sh :

#
#    Mass removing tickets from Trac environnement
#
#    Motarion <motarion@gmail.com>
#    Creation date: 12/07/2009
#    Last modification: 12/07/2009
#
#    History:
#    v0.1: <12/07/2009> Initial release.
#

# Variables
NB_PARAM="$#"
DB_PATH="$1"
FIRST_TICKET="$2"
LAST_TICKET="$3"

# Programs
SQLITE_CLIENT=`which sqlite3`

# Tests
if [ $NB_PARAM -gt 3 ] || [ $NB_PARAM -lt 3 ];
then
echo "Error: Usage $0 PATH_TO_TRAC.DB FIRST_TICKET LAST_TICKET"
exit 1
fi

if [ $SQLITE_CLIENT == "" ]
then
echo "Error: This script require Sqlite3 client to work. Please install it."
exit 1
else
echo "Info: Sqlite client dependancy satisfied. ($SQLITE_CLIENT)"
fi

if [ ! -d $DB_PATH ]
then
echo "Error: The path to the trac.db file is not correct."
exit 1
else
echo "Info: Path to the trac.db is correct."
fi

# Main loop
for i in `seq $FIRST_TICKET $LAST_TICKET`
do
TICKET_ID=$i
$SQLITE_CLIENT $DB_PATH"trac.db" "DELETE FROM ticket WHERE id=$TICKET_ID"
$SQLITE_CLIENT $DB_PATH"trac.db" "DELETE FROM ticket_change WHERE ticket=$TICKET_ID"
$SQLITE_CLIENT $DB_PATH"trac.db" "DELETE FROM attachment WHERE type='ticket' and id=$TICKET_ID"
$SQLITE_CLIENT $DB_PATH"trac.db" "DELETE FROM ticket_custom WHERE ticket=$TICKET_ID"
done

19 responses to “Trac: Supression de ticket en masse”

  1. Bonjour,
    je voudrais savoir svp comment acceder à la base de données de trac?

    • En fait dans le script il y a les commande qui permettent de le faire mais au lieu de cela il exécute directement la requête.

      Si tu es dans le répertoire de la base de donnée trac.db il suffit d’utiliser la commande suivante:

      sqlite3 trac.db

      Cela ne fonctionne QUE si ton Trac fonctionne avec comme base de donnée SQLite. Il faut le client sqlite3 pour y accéder par contre il faut que l’utilisateur qui lance cette commande aient les droits de lecture sur la base et d’écriture si tu veux faire des modifications.

  2. Comment faire la migration de la base d’un Trac1 vers 1 Trac2?

    Dans le Trac 1 j’ai les projets et les incidents.
    Est-il possible de séparer la base actuelle pour mettre les incidents d’un coté et les projets de l’autre?
    Si oui? comment?

    Merci

  3. Tu veux savoir s’il est possible d’avoir deux bases ?

    Une pour les incidents et l’autre pour les projets ?

    D’après ce que je sais, ce n’est pas possible puisque Trac ne gère qu’une seule et unique base.

    À moins de t’avoir mal compris :/

  4. Bonjour, c’est bien cela. j’aurai voulu avoir deux bases dans mon nouveau trac, mais si ce n’est pas possible tant pis.

    Mais concernant la migration de la base de l’ancien trac vers le nouveau, coment dois-je m’y prendre?
    MERCI

    • La doc de Trac est bien fournie à ce sujet. Je n’ai jamais eu à le faire pour l’instant mais d’après ce que j’ai compris:

      Tu met à jour ton Trac et tu fais une mise à jour de la base de donnée via trac-admin (trac-admin . upgrade si tu es dans le répertoire de trac)

      Lis bien la doc de Trac pour être sûre 😉

  5. je voudrais aussi savoir s’il est possible de modifier le nom de certaines tables et attributs dans la base de données de trac?
    Par rapport aux modifications que je veux apporter à mon trac gantt par exemple, si je veux changer “owner” en “Propriétaire”, pour certaines actions propriétaire n’est pas reconnu, donc j’ai un warning.
    je changerai donc l’attribut “owner” en “propriétaire”.

    Mecri encore pour votre précieuse aide.

    • Tu veux changer le nom des colonne de la base de donnée Trac ?
      Tu as changé quoi exactement ? Copie colle la requête que je puisse voir 😉

  6. je n’ai rien changé dans la base de données pour l’instant. J’ai modifier le gantt.html du plugin TracganttCalendar. Lorsque je modifie le champ “owner” en “propriétaire” par exemple j’ ai un message d’erreur. Je pense donc que cela est dû au fait que dans la base de données “propiétaire” n ‘existe pas. je compte donc modifier la base de données en fonction des changement que je voudrais faire, si cela est possible.
    merciii

  7. Bonjour,
    Je voudrais povoir enregistrer des projets dans 3environnements trac d’un coup.Donc dans 3 tables de base de données différentes. Comment m’y prendre?
    Mes env sont les suivants:
    /var/trac/projet1/db/trac.db
    /var/trac/projet2/db/trac.db
    /var/trac/projet3/db/trac.db
    Dois je faire un script? si oui a quoi est ce qu’il doit ressembler.
    Merci

  8. Je ne vois pas comment faire ni même l’intérêt de faire ça.

    Trac n’est pas prévu pour ça, il va falloir voir comment il est fait de l’intérieur pour arriver à faire ce que tu veux.

  9. C’est fait!
    j’aimodifier le script de niko (dispo dans la doc ubuntu_trac)
    qui permet d importer automatiquement les projets dans subversion et j y ai inséeé la commande qui permet de créer un projet à savoir : sudo trac-admin /chmin/du /projet milestone add pour chaque projet.

  10. Bonjour, je reviens vers vous une fois de plus.
    je suis presqu’à la fin de ma mission et j’ai un gros souci concernant la migration de ma basa de données trac(sqlite3) à postgesql .
    j’ai utilisé le script sqlite2pg comme indiqué ici
    http://trac-hacks.org/wiki/SqliteToPgScript
    Mais lorsque je lance le script ./sqlite2pg -e /var/trac/monprojet -p’postgres://user:pass@localhost/db?schema=myschema’
    J ai l’erreur suivante:
    Traceback (most recent call last):

    File “./sqlite2pg”, line 29, in

    from trac.env import Environment, EnvironmentSetup?, IEnvironmentSetupParticipant

    ImportError?: No module named trac.env

    Je compte sur vos connaissances de scripteur 🙂
    Merci

  11. je pense que je ne lance pas la commande au bon endroit.Ou dois-je le faire?

  12. Salutation !

    Je ne pense pas que tu lances la commande au mauvais endroit, mais si tu lances cette commande, il semble qu’elle ne soit pas adaptée au nom du shéma que tu vas utiliser dans PostGreSQL.

    Si je comprend bien le script, -e doit être le chemin vers la racine de l’environnement Trac.

    Vu l’erreur, il ne semble pas trouver le bon environnement et donc la racine du Trac.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.