def get_blocked_tickets(self): """Return all tickets of blocking changesets in order of them getting unblocked.""" tickets = [] tickets_visited = set(['' ]) # merge changesets have empty ticket values # restrict changesets to only those not completed changesets = self.get_changesets() blocking_changeset = self.get_blocking_changeset(changesets) if blocking_changeset is None: return [] changesets = changesets[changesets.index(blocking_changeset):] # only consider changesets that come after the blocking changeset review = self.get_review(blocking_changeset) blocking_when = review.changeset_when # find blocked tickets for changeset in changesets: review = self.get_review(changeset) for ticket in review.tickets: if ticket in tickets_visited: continue tickets_visited.add(ticket) def get_first_remaining_changeset(): for review in self.get_reviews(ticket): if review.changeset in changesets and \ review.changeset_when >= blocking_when: return review # changeset exists on path raise ResourceNotFound("Not found for #%s" % ticket) # the ticket's oldest *remaining* changeset determines blockage # i.e., if current is already past a changeset, ignore it try: first = get_first_remaining_changeset() tkt = Ticket(self.env, ticket) tkt.first_changeset = first.changeset tkt.first_changeset_when = first.changeset_when tickets.append(tkt) except ResourceNotFound: pass # e.g., incorrect ticket reference return sorted(tickets, key=lambda t: t.first_changeset_when)
def get_blocked_tickets(self): """Return all tickets of blocking changesets in order of them getting unblocked.""" tickets = [] tickets_visited = set(['']) # merge changesets have empty ticket values # restrict changesets to only those not completed changesets = self.get_changesets() blocking_changeset = self.get_blocking_changeset(changesets) if blocking_changeset is None: return [] changesets = changesets[changesets.index(blocking_changeset):] # only consider changesets that come after the blocking changeset review = self.get_review(blocking_changeset) blocking_when = review.changeset_when # find blocked tickets for changeset in changesets: review = self.get_review(changeset) for ticket in review.tickets: if ticket in tickets_visited: continue tickets_visited.add(ticket) def get_first_remaining_changeset(): for review in self.get_reviews(ticket): if review.changeset in changesets and \ review.changeset_when >= blocking_when: return review # changeset exists on path raise ResourceNotFound("Not found for #%s" % ticket) # the ticket's oldest *remaining* changeset determines blockage # i.e., if current is already past a changeset, ignore it try: first = get_first_remaining_changeset() tkt = Ticket(self.env, ticket) tkt.first_changeset = first.changeset tkt.first_changeset_when = first.changeset_when tickets.append( tkt ) except ResourceNotFound: pass # e.g., incorrect ticket reference return sorted(tickets, key=lambda t: t.first_changeset_when)