Exemplo n.º 1
0
    def ticket_deleted(self, tkt):
        db = self.env.get_db_cnx()

        links = TicketLinks(self.env, tkt, db)
        links.blocking = set()
        links.blocked_by = set()
        links.save('trac', 'Ticket #%s deleted' % tkt.id, when=None, db=db)

        db.commit()
Exemplo n.º 2
0
 def ticket_changed(self, tkt, comment, author, old_values):
     db = self.env.get_db_cnx()
     
     links = TicketLinks(self.env, tkt, db)
     links.blocking = set(self.NUMBERS_RE.findall(tkt['blocking'] or ''))
     links.blocked_by = set(self.NUMBERS_RE.findall(tkt['blockedby'] or ''))
     links.save(author, comment, tkt.time_changed, db)
     
     db.commit()
Exemplo n.º 3
0
    def validate_ticket(self, req, ticket):
        db = self.env.get_db_cnx()
        cursor = db.cursor()
        
        id = unicode(ticket.id)
        links = TicketLinks(self.env, ticket, db)
        links.blocking = extract_ticket_ids(ticket['blocking'] or '')
        links.blocked_by = extract_ticket_ids(ticket['blockedby'] or '')
        
        # Check that ticket does not have itself as a blocker 
        if id in links.blocking | links.blocked_by:
            yield 'blocked_by', 'This ticket is blocking itself'
            return

        # Check that there aren't any blocked_by in blocking or their parents
        blocking = links.blocking.copy()
        while len(blocking) > 0:
            if len(links.blocked_by & blocking) > 0:
                yield 'blocked_by', 'This ticket has circular dependencies'
                return
            new_blocking = set()
            for link in blocking:
                tmp_tkt = Ticket(self.env, link)
                new_blocking |= TicketLinks(self.env, tmp_tkt, db).blocking
            blocking = new_blocking
        
        for field in ('blocking', 'blockedby'):
            try:
                ids = self.NUMBERS_RE.findall(ticket[field] or '')
                for id in ids[:]:
                    cursor.execute('SELECT id FROM ticket WHERE id=%s', (id,))
                    row = cursor.fetchone()
                    if row is None:
                        ids.remove(id)
                ticket[field] = ', '.join(sorted(ids, key=lambda x: int(x)))
            except Exception, e:
                self.log.debug('TicketRelations: Error parsing %s "%s": %s', field, ticket[field], e)
                yield field, 'Not a valid list of ticket IDs'
Exemplo n.º 4
0
 def _prepare_links(self, tkt, db):
     links = TicketLinks(self.env, tkt, db)
     links.blocking = set(int(n) for n in self.NUMBERS_RE.findall(tkt['blocking'] or ''))
     links.blocked_by = set(int(n) for n in self.NUMBERS_RE.findall(tkt['blockedby'] or ''))
     return links