Skip to content

Commit dfe4508

Browse files
committed
If a repo is treeclosed, link to the comment issuing that command
1 parent 7bb21f2 commit dfe4508

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

homu/html/queue.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
</style>
3333
</head>
3434
<body>
35-
<h1>Homu queue - {% if repo_url %}<a href="{{repo_url}}" target="_blank">{{repo_label}}</a>{% else %}{{repo_label}}{% endif %} {% if treeclosed %} [TREE CLOSED below priority {{treeclosed}}] {% endif %}</h2>
35+
<h1>Homu queue - {% if repo_url %}<a href="{{repo_url}}" target="_blank">{{repo_label}}</a>{% else %}{{repo_label}}{% endif %} {% if treeclosed %} [<a href="{{treeclosed_src}}">TREE CLOSED</a> below priority {{treeclosed}}] {% endif %}</h2>
3636

3737
<p>
3838
<button type="button" id="expand-rollup">Create a rollup</button>

homu/main.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def db_query(db, *args):
6969

7070
class Repository:
7171
treeclosed = -1
72+
treecloesd_src = None
7273
gh = None
7374
label = None
7475
db = None
@@ -79,17 +80,20 @@ def __init__(self, gh, repo_label, db):
7980
self.db = db
8081
db_query(
8182
db,
82-
'SELECT treeclosed FROM repos WHERE repo = ?',
83+
'SELECT treeclosed, treeclosed_src FROM repos WHERE repo = ?',
8384
[repo_label]
8485
)
8586
row = db.fetchone()
8687
if row:
8788
self.treeclosed = row[0]
89+
self.treecloesd_src = row[1]
8890
else:
8991
self.treeclosed = -1
92+
self.treeclosed_src = None
9093

91-
def update_treeclosed(self, value):
94+
def update_treeclosed(self, value, src):
9295
self.treeclosed = value
96+
self.treeclosed_src = src
9397
db_query(
9498
self.db,
9599
'DELETE FROM repos where repo = ?',
@@ -98,8 +102,8 @@ def update_treeclosed(self, value):
98102
if value > 0:
99103
db_query(
100104
self.db,
101-
'INSERT INTO repos (repo, treeclosed) VALUES (?, ?)',
102-
[self.repo_label, value]
105+
'INSERT INTO repos (repo, treeclosed, treeclosed_src) VALUES (?, ?, ?)',
106+
[self.repo_label, value, src]
103107
)
104108

105109
def __lt__(self, other):
@@ -340,8 +344,8 @@ def fake_merge(self, repo_cfg):
340344
title = merged_prefix + title
341345
issue.edit(title=title)
342346

343-
def change_treeclosed(self, value):
344-
self.repos[self.repo_label].update_treeclosed(value)
347+
def change_treeclosed(self, value, src):
348+
self.repos[self.repo_label].update_treeclosed(value, src)
345349

346350
def blocked_by_closed_tree(self):
347351
treeclosed = self.repos[self.repo_label].treeclosed
@@ -414,7 +418,7 @@ class LabelEvent(Enum):
414418

415419

416420
def parse_commands(body, username, repo_label, repo_cfg, state, my_username,
417-
db, states, *, realtime=False, sha=''):
421+
db, states, *, realtime=False, sha='', command_src=''):
418422
global global_cfg
419423
state_changed = False
420424

@@ -695,14 +699,14 @@ def parse_commands(body, username, repo_label, repo_cfg, state, my_username,
695699
continue
696700
try:
697701
treeclosed = int(word[len('treeclosed='):])
698-
state.change_treeclosed(treeclosed)
702+
state.change_treeclosed(treeclosed, command_src)
699703
except ValueError:
700704
pass
701705
state.save()
702706
elif word == 'treeclosed-':
703707
if not _reviewer_auth_verified():
704708
continue
705-
state.change_treeclosed(-1)
709+
state.change_treeclosed(-1, None)
706710
state.save()
707711
elif 'hooks' in global_cfg:
708712
hook_found = False
@@ -1492,6 +1496,8 @@ def synchronize(repo_label, repo_cfg, logger, gh, states, repos, db, mergeable_q
14921496
db,
14931497
states,
14941498
sha=comment.original_commit_id,
1499+
command_src=comment.to_json()['html_url'],
1500+
# FIXME switch to `comment.html_url` after updating github3 to 1.3.0+
14951501
)
14961502

14971503
for comment in pull.iter_issue_comments():
@@ -1504,6 +1510,8 @@ def synchronize(repo_label, repo_cfg, logger, gh, states, repos, db, mergeable_q
15041510
my_username,
15051511
db,
15061512
states,
1513+
command_src=comment.to_json()['html_url'],
1514+
# FIXME switch to `comment.html_url` after updating github3 to 1.3.0+
15071515
)
15081516

15091517
saved_state = saved_states.get(pull.number)
@@ -1629,8 +1637,16 @@ def main():
16291637
db_query(db, '''CREATE TABLE IF NOT EXISTS repos (
16301638
repo TEXT NOT NULL,
16311639
treeclosed INTEGER NOT NULL,
1640+
treeclosed_src TEXT,
16321641
UNIQUE (repo)
16331642
)''')
1643+
1644+
# manual DB migration :/
1645+
try:
1646+
db_query(db, 'SELECT treeclosed_src FROM repos LIMIT 0')
1647+
except sqlite3.OperationalError:
1648+
db_query(db, 'ALTER TABLE repos ADD COLUMN treeclosed_src TEXT')
1649+
16341650
for repo_label, repo_cfg in cfg['repo'].items():
16351651
repo_cfgs[repo_label] = repo_cfg
16361652
repo_labels[repo_cfg['owner'], repo_cfg['name']] = repo_label

homu/server.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ def queue(repo_label):
109109
lazy_debug(logger, lambda: 'repo_label: {}'.format(repo_label))
110110

111111
single_repo_closed = None
112+
treeclosed_src = None
112113
if repo_label == 'all':
113114
labels = g.repos.keys()
114115
multiple = True
@@ -118,6 +119,7 @@ def queue(repo_label):
118119
multiple = len(labels) > 1
119120
if repo_label in g.repos and g.repos[repo_label].treeclosed >= 0:
120121
single_repo_closed = g.repos[repo_label].treeclosed
122+
treeclosed_src = g.repos[repo_label].treeclosed_src
121123
repo_url = 'https://github.com/{}/{}'.format(
122124
g.cfg['repo'][repo_label]['owner'],
123125
g.cfg['repo'][repo_label]['name'])
@@ -132,7 +134,7 @@ def queue(repo_label):
132134
pull_states = sorted(states)
133135
rows = []
134136
for state in pull_states:
135-
treeclosed = (single_repo_closed or
137+
treeclosed = (single_repo_closed and
136138
state.priority < g.repos[state.repo_label].treeclosed)
137139
status_ext = ''
138140

@@ -166,6 +168,7 @@ def queue(repo_label):
166168
repo_url=repo_url,
167169
repo_label=repo_label,
168170
treeclosed=single_repo_closed,
171+
treeclosed_src=treeclosed_src,
169172
states=rows,
170173
oauth_client_id=g.cfg['github']['app_client_id'],
171174
total=len(pull_states),
@@ -354,6 +357,7 @@ def github():
354357
g.states,
355358
realtime=True,
356359
sha=original_commit_id,
360+
command_src=info['comment']['html_url'],
357361
):
358362
state.save()
359363

@@ -399,6 +403,8 @@ def github():
399403
g.my_username,
400404
g.db,
401405
g.states,
406+
command_src=c.to_json()['html_url'],
407+
# FIXME switch to `c.html_url` after updating github3 to 1.3.0+
402408
) or found
403409

404410
status = ''
@@ -519,6 +525,7 @@ def fail(err):
519525
g.db,
520526
g.states,
521527
realtime=True,
528+
command_src=info['comment']['html_url'],
522529
):
523530
state.save()
524531

0 commit comments

Comments
 (0)