| |
@@ -184,6 +184,33 @@
|
| |
or bug.accepted_fe)
|
| |
|
| |
|
| |
+ def _link_key(milestone, bug):
|
| |
+ return "%d_%d" % (milestone.release.number, bug.bugid)
|
| |
+
|
| |
+
|
| |
+ def create_discussions_links(milestone, bugs, links_to_reuse={}):
|
| |
+ for bug in bugs:
|
| |
+ if not needs_discussion(bug):
|
| |
+ app.logger.debug('Skipping bug %d, no discussion needed' % bug.bugid)
|
| |
+ continue
|
| |
+
|
| |
+ link = links_to_reuse.get(_link_key(milestone, bug))
|
| |
+ if link:
|
| |
+ app.logger.debug('Reusing discussion link for bug %d' % bug.bugid)
|
| |
+ else:
|
| |
+ app.logger.debug('Creating Pagure discussion for bug %d' % bug.bugid)
|
| |
+ try:
|
| |
+ link = pagure_interface.create_bug_discussion(bug)
|
| |
+ links_to_reuse[_link_key(milestone, bug)] = link
|
| |
+ except pagure_interface.PagureAPIException as e:
|
| |
+ app.logger.error('Unable to create Pagure discussion for bug %s. '
|
| |
+ 'Pagure error: %s' % (bug.bugid, e))
|
| |
+ continue
|
| |
+
|
| |
+ bug.discussion_link = link
|
| |
+ db.session.add(bug)
|
| |
+ db.session.commit()
|
| |
+
|
| |
def sync_discussions(args):
|
| |
if app.config["PAGURE_REPO_TOKEN"] in (bb_Config.PAGURE_REPO_TOKEN, ""):
|
| |
# skip this if the API token is set to the placeholder value
|
| |
@@ -191,28 +218,19 @@
|
| |
app.logger.debug('Not syncing discussions, because PAGURE_REPO_TOKEN '
|
| |
'is not configured.')
|
| |
return
|
| |
+
|
| |
+ links = {}
|
| |
+
|
| |
active_milestones = Milestone.query.filter_by(active=True).all()
|
| |
|
| |
for milestone in active_milestones:
|
| |
- bugs = Bug.query.filter_by(milestone=milestone, active=True)
|
| |
- for bug in bugs:
|
| |
- if bug.discussion_link:
|
| |
- app.logger.debug('Skipping bug %d, discussion already exists' % bug.bugid)
|
| |
- continue
|
| |
- if not needs_discussion(bug):
|
| |
- app.logger.debug('Skipping bug %d, no discussion needed' % bug.bugid)
|
| |
- continue
|
| |
+ bugs = Bug.query.filter_by(milestone=milestone, active=True).all()
|
| |
+ for bug in (b for b in bugs if b.discussion_link):
|
| |
+ links.setdefault(_link_key(milestone, bug), bug.discussion_link)
|
| |
|
| |
- app.logger.debug('Creating Pagure discussion for bug %d' % bug.bugid)
|
| |
- try:
|
| |
- bug.discussion_link = pagure_interface.create_bug_discussion(bug)
|
| |
- except pagure_interface.PagureAPIException as e:
|
| |
- app.logger.error('Unable to create Pagure discussion for bug %s. '
|
| |
- 'Pagure error: %s' % (bug.bugid, e))
|
| |
- continue
|
| |
-
|
| |
- db.session.add(bug)
|
| |
- db.session.commit()
|
| |
+ for milestone in active_milestones:
|
| |
+ bugs = Bug.query.filter_by(milestone=milestone, active=True, discussion_link=None).all()
|
| |
+ create_discussions_links(milestone, bugs, links_to_reuse=links)
|
| |
|
| |
|
| |
def recreate_discussion(args):
|
| |
@@ -223,14 +241,10 @@
|
| |
app.logger.error('No bug %d in databse.' % bugid)
|
| |
sys.exit(1)
|
| |
|
| |
- try:
|
| |
- bug.discussion_link = pagure_interface.create_bug_discussion(bug)
|
| |
- except pagure_interface.PagureAPIException as e:
|
| |
- app.logger.error('Unable to create Pagure discussion for bug %s. '
|
| |
- 'Pagure error: %s' % (bug.bugid, e))
|
| |
-
|
| |
- db.session.add(bug)
|
| |
- db.session.commit()
|
| |
+ milestones = Milestone.query.all()
|
| |
+ for milestone in milestones:
|
| |
+ bugs = Bug.query.filter_by(bugid=bugid, milestone=milestone).all()
|
| |
+ create_discussions_links(milestone, bugs)
|
| |
|
| |
|
| |
def sync_bugs(args):
|
| |
Fix for #127