diff --git a/gertty.yaml-sample b/gertty.yaml-sample index ba2636f..78fe0f4 100644 --- a/gertty.yaml-sample +++ b/gertty.yaml-sample @@ -41,6 +41,11 @@ commentlinks: # of the default side-by-side: # diff-view: unified +# Hide comments by default that match the following criteria. +# You can toggle their display with 't'. +hide-comments: + - author: "^(.*CI|Jenkins)$" + dashboards: - name: "My changes" query: "owner:self status:open" diff --git a/gertty/config.py b/gertty/config.py index ff2a449..7fea291 100644 --- a/gertty/config.py +++ b/gertty/config.py @@ -16,6 +16,7 @@ import collections import getpass import os +import re try: import ordereddict except: @@ -83,6 +84,10 @@ class ConfigSchema(object): reviewkeys = [reviewkey] + hide_comment = {v.Required('author'): str} + + hide_comments = [hide_comment] + def getSchema(self, data): schema = v.Schema({v.Required('servers'): self.servers, 'palettes': self.palettes, @@ -91,6 +96,7 @@ class ConfigSchema(object): 'reviewkeys': self.reviewkeys, 'change-list-query': str, 'diff-view': str, + 'hide-comments': self.hide_comments, }) return schema @@ -155,6 +161,10 @@ class Config(object): for k in self.config.get('reviewkeys', []): self.reviewkeys[k['key']] = k + self.hide_comments = [] + for h in self.config.get('hide-comments', []): + self.hide_comments.append(re.compile(h['author'])) + def getServer(self, name=None): for server in self.config['servers']: if name is None or name == server['name']: diff --git a/gertty/view/change.py b/gertty/view/change.py index 483ad88..9047c40 100644 --- a/gertty/view/change.py +++ b/gertty/view/change.py @@ -289,6 +289,7 @@ class ChangeView(urwid.WidgetWrap): Go to the next change in the list.

Go to the previous change in the list. Leave a review for the most recent revision. + Toggle display of hidden comments. Back to the list of changes. Toggle the reviewed flag for the current change. Cherry-pick the most recent revision onto the local repo. @@ -310,6 +311,7 @@ class ChangeView(urwid.WidgetWrap): self.revision_rows = {} self.message_rows = {} self.last_revision_key = None + self.hide_comments = True self.change_id_label = urwid.Text(u'', wrap='clip') self.owner_label = urwid.Text(u'', wrap='clip') self.project_label = urwid.Text(u'', wrap='clip') @@ -481,17 +483,37 @@ class ChangeView(urwid.WidgetWrap): listbox_index += 1 if len(self.listbox.body) == listbox_index: self.listbox.body.insert(listbox_index, urwid.Divider()) - listbox_index += 1 + listbox_index += 1 + # Get the set of messages that should be displayed + display_messages = [] for message in change.messages: + skip = False + if self.hide_comments: + for regex in self.app.config.hide_comments: + if regex.match(message.author.name): + skip = True + break + if not skip: + display_messages.append(message) + # The set of message keys currently displayed + unseen_keys = set(self.message_rows.keys()) + # Make sure all of the messages that should be displayed are + for message in display_messages: row = self.message_rows.get(message.key) if not row: box = ChangeMessageBox(self.app, message) row = urwid.Padding(box, width=80) self.listbox.body.insert(listbox_index, row) self.message_rows[message.key] = row - # Messages are extremely unlikely to be deleted, skip - # that case. + else: + unseen_keys.remove(message.key) listbox_index += 1 + # Remove any messages that should not be displayed + for key in unseen_keys: + row = self.message_rows.get(key) + self.listbox.body.remove(row) + del self.message_rows[key] + listbox_index -= 1 def _updateDependenciesWidget(self, changes, widget, widget_rows, header): if not changes: @@ -607,6 +629,10 @@ class ChangeView(urwid.WidgetWrap): except gertty.view.DisplayError as e: self.app.error(e.message) return None + if r == 't': + self.hide_comments = not self.hide_comments + self.refresh() + return None if r == 'ctrl r': self.app.sync.submitTask( sync.SyncChangeTask(self.change_rest_id, priority=sync.HIGH_PRIORITY))