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
, ,

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.