diff --git a/examples/googlesource-gertty.yaml b/examples/googlesource-gertty.yaml index 1f5da9a..0663e48 100644 --- a/examples/googlesource-gertty.yaml +++ b/examples/googlesource-gertty.yaml @@ -58,6 +58,8 @@ dashboards: key: "f4" - name: "Recently seen changes" query: "recentlyseen:24 hours" + sort-by: "last-seen" + reverse: True key: "f5" # Reviewkeys are hotkeys that perform immediate reviews within the diff --git a/examples/openstack-gertty.yaml b/examples/openstack-gertty.yaml index 444319b..84fc5f8 100644 --- a/examples/openstack-gertty.yaml +++ b/examples/openstack-gertty.yaml @@ -101,6 +101,8 @@ dashboards: key: "f4" - name: "Recently seen changes" query: "recentlyseen:24 hours" + sort-by: "last-seen" + reverse: True key: "f5" # Reviewkeys are hotkeys that perform immediate reviews within the diff --git a/examples/reference-gertty.yaml b/examples/reference-gertty.yaml index 9149bfa..0d74d7a 100644 --- a/examples/reference-gertty.yaml +++ b/examples/reference-gertty.yaml @@ -147,9 +147,10 @@ commentlinks: # selected. The default is "status:open". # change-list-query: "status:open" -# This section defines default sorting options for the change list. The -# "sort-by" key specifies the sort order, which can be 'number' or 'updated'. -# The 'reverse' key specifies ascending (true) or descending (false) order. +# This section defines default sorting options for the change +# list. The "sort-by" key specifies the sort order, which can be +# 'number', 'updated', or 'last-seen'. The 'reverse' key specifies +# ascending (true) or descending (false) order. # change-list-options: # sort-by: 'number' # reverse: false @@ -207,6 +208,8 @@ dashboards: key: "f4" - name: "Recently seen changes" query: "recentlyseen:24 hours" + sort-by: "last-seen" + reverse: True key: "f5" # Reviewkeys are hotkeys that perform immediate reviews within the diff --git a/gertty/app.py b/gertty/app.py index 14105cc..7da8458 100644 --- a/gertty/app.py +++ b/gertty/app.py @@ -612,7 +612,9 @@ class App(object): self.doSearch("is:held") elif key in self.config.dashboards: d = self.config.dashboards[key] - view = view_change_list.ChangeListView(self, d['query'], d['name']) + view = view_change_list.ChangeListView(self, d['query'], d['name'], + sort_by=d.get('sort-by'), + reverse=d.get('reverse')) self.changeScreen(view) elif keymap.FURTHER_INPUT in commands: self.input_buffer.append(key) diff --git a/gertty/config.py b/gertty/config.py index 5056a29..eeedf39 100644 --- a/gertty/config.py +++ b/gertty/config.py @@ -53,6 +53,8 @@ class ConfigSchema(object): servers = [server] + sort_by = v.Any('number', 'updated', 'last-seen') + text_replacement = {'text': v.Any(str, {'color': str, v.Required('text'): str})} @@ -78,6 +80,8 @@ class ConfigSchema(object): dashboard = {v.Required('name'): str, v.Required('query'): str, + v.Optional('sort-by'): sort_by, + v.Optional('reverse'): bool, v.Required('key'): str} dashboards = [dashboard] @@ -95,7 +99,7 @@ class ConfigSchema(object): hide_comments = [hide_comment] - change_list_options = {'sort-by': v.Any('number', 'updated'), + change_list_options = {'sort-by': sort_by, 'reverse': bool} keymap = {v.Required('name'): str, @@ -216,6 +220,7 @@ class Config(object): self.dashboards = OrderedDict() for d in self.config.get('dashboards', []): self.dashboards[d['key']] = d + self.dashboards[d['key']] self.reviewkeys = OrderedDict() for k in self.config.get('reviewkeys', []): diff --git a/gertty/db.py b/gertty/db.py index 43e1f9a..ee9bb59 100644 --- a/gertty/db.py +++ b/gertty/db.py @@ -854,12 +854,14 @@ class DatabaseSession(object): return None def getChanges(self, query, unreviewed=False, sort_by='number'): - self.database.log.debug("Search query: %s" % query) + self.database.log.debug("Search query: %s sort: %s" % (query, sort_by)) q = self.session().query(Change).filter(self.search.parse(query)) if unreviewed: q = q.filter(change_table.c.hidden==False, change_table.c.reviewed==False) if sort_by == 'updated': q = q.order_by(change_table.c.updated) + elif sort_by == 'last-seen': + q = q.order_by(change_table.c.last_seen) else: q = q.order_by(change_table.c.number) self.database.log.debug("Search SQL: %s" % q) diff --git a/gertty/view/change_list.py b/gertty/view/change_list.py index 9152e78..d1d8acb 100644 --- a/gertty/view/change_list.py +++ b/gertty/view/change_list.py @@ -199,7 +199,7 @@ class ChangeListView(urwid.WidgetWrap): ] def __init__(self, app, query, query_desc=None, project_key=None, - unreviewed=False): + unreviewed=False, sort_by=None, reverse=None): super(ChangeListView, self).__init__(urwid.Pile([])) self.log = logging.getLogger('gertty.view.change_list') self.app = app @@ -212,8 +212,11 @@ class ChangeListView(urwid.WidgetWrap): self.project_key = project_key if project_key is not None: self.display_project = False - self.sort_by = app.config.change_list_options['sort-by'] - self.reverse = app.config.change_list_options['reverse'] + self.sort_by = sort_by or app.config.change_list_options['sort-by'] + if reverse is not None: + self.reverse = reverse + else: + self.reverse = app.config.change_list_options['reverse'] self.header = ChangeListHeader(self.display_project, self.display_owner, self.display_updated) self.categories = []