All pastes #47656 Raw Edit

Python

public python v1 · immutable
#47656 ·published 2006-03-31 02:29 UTC
rendered paste body
#!/usr/bin/env pythonfrom trac.env import Environmentfrom trac.ticket.model import Ticketdef revert_changes(ticket, changed_fields, cursor):    for f in ticket.fields:        name = f['name']        if name not in changed_fields:            continue        old, new = changed_fields[name]        if ticket[name] != new:            continue        if f.get('custom'):            cursor.execute("UPDATE ticket_custom SET value=%s "                           "WHERE ticket=%s AND name=%s",                           (old, ticket.id, name))        else:            cursor.execute("UPDATE ticket SET %s=%%s WHERE id=%%s" % name,                           (old, ticket.id))def delete_spam(envdir):    env = Environment(envdir)    db = env.get_db_cnx()    try:        cur = db.cursor()        cur.execute("select ticket,time from ticket_change where field = 'comment' and newvalue like '%dynu.net%'")        for id,time in cur:            ticket = Ticket(env, id, db)            cur.execute("select field,oldvalue,newvalue from ticket_change where ticket = %s and time = %s", (id, time))            changed_fields = dict([(field, (old, new)) for field, old, new in cur])            revert_changes(ticket, changed_fields, cur)            cur.execute("delete from ticket_change where ticket = %s and time = %s", (id, time))    except Exception:        db.rollback()        raise    else:        db.commit()if __name__ == '__main__':    import sys    for envdir in sys.argv[1:]:        delete_spam(envdir)