From c52bddb6933d22a2b1f347ef994d34452c33b3b2 Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Wed, 4 Jun 2014 11:52:00 +0100 Subject: [PATCH] Handle multiple child revisions of same parent Where there are multiple revisions of a child change that depend on the same revision of the parent, we hit this: File ".../gertty/view/change.py", line 548, in refreshDependencies unseen_keys.remove(c.key) KeyError: 177 An example of this a change with this issue is that revision 1 of I8cd0af9bd4d3669f436f169059e4b602d4d3036c is the parent of revisions 1 and 2 of If608302b6efacceb9ac3630b7ac402cf65ae6d68. Handle this case by uniqifying the children list simply by using a mapping of change key to subject. Change-Id: I934c6df1bdf12bf87cc9e6827d38b92d04057f39 --- gertty/view/change.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/gertty/view/change.py b/gertty/view/change.py index 267d614..167b96c 100644 --- a/gertty/view/change.py +++ b/gertty/view/change.py @@ -521,27 +521,29 @@ This Screen self.depends_on.contents[:] = [] # Handle needed-by - children = [r.change for r in session.getRevisionsByParent(revision.commit) if r.change.status != 'MERGED'] + children = dict((r.change.key, r.change.subject) + for r in session.getRevisionsByParent(revision.commit) + if r.change.status != 'MERGED') if children: if len(self.needed_by.contents) == 0: self.needed_by.contents.append((urwid.Text(('table-header', 'Needed by:')), self.needed_by.options('pack'))) unseen_keys = set(self.needed_by_rows.keys()) i = 1 - for c in children: - row = self.needed_by_rows.get(c.key) + for key, subject in children.items(): + row = self.needed_by_rows.get(key) if not row: - row = urwid.AttrMap(urwid.Padding(ChangeButton(self, c.key, c.subject), width='pack'), + row = urwid.AttrMap(urwid.Padding(ChangeButton(self, key, subject), width='pack'), 'link', focus_map={None: 'focused-link'}) self.needed_by.contents.insert(i, (row, self.depends_on.options())) if not self.needed_by.focus.selectable(): self.needed_by.set_focus(i) if not self.left_column.focus.selectable(): self.left_column.set_focus(self.needed_by) - self.needed_by_rows[c.key] = row + self.needed_by_rows[key] = row else: - row.original_widget.original_widget.set_label(c.subject) - unseen_keys.remove(c.key) + row.original_widget.original_widget.set_label(subject) + unseen_keys.remove(key) i += 1 for key in unseen_keys: row = self.needed_by_rows[key]