From 0e99a171a04c0fb919b3979319bf92d0aa94beac Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jan 20 2017 10:20:03 +0000 Subject: Rework a little the active milestone/all milestone filtering So we want either only the active milestones, or all of them, so this is a simple boolean, if we want only the active milestones then we retrieve the list of all the active milestones (ie: having at least one ticket open) and consider only this list. Otherwise, we get the list of all the milestones and consider this list. --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index b3e33c3..6a292fc 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -3656,3 +3656,20 @@ def get_custom_key(session, project, keyname): ) return query.first() + + +def get_active_milestones(session, project): + ''' Returns the list of all the active milestones for a given project. + ''' + + query = session.query( + model.Issue.milestone + ).filter( + model.Issue.project_id == project.id + ).filter( + model.Issue.status == 'Open' + ).filter( + model.Issue.milestone.isnot(None) + ) + + return sorted([item[0] for item in query.distinct()]) diff --git a/pagure/templates/roadmap.html b/pagure/templates/roadmap.html index a634cb1..dca552d 100644 --- a/pagure/templates/roadmap.html +++ b/pagure/templates/roadmap.html @@ -101,35 +101,31 @@ {% for stone in milestones %} - {% if (all_ms_tags is none and (stone in active_milestones or stone in requested_stones)) or all_ms_tags is not none %} - {% if stone in requested_stones %} - - {{ stone }} - {% else %} - - {{ stone }} - {% endif %} + {% if stone in requested_stones %} + + {{ stone }} + {% else %} + + {{ stone }} {% endif %} {% endfor %} @@ -144,7 +140,6 @@ namespace=repo.namespace, milestone=requested_stones, all_ms_tags=all_ms_tags, - active_milestones=active_milestones, status=status) }}" title="Filter issues by tag"> {% else %} @@ -156,7 +151,6 @@ status=status, tag=tag, all_ms_tags=all_ms_tags, - active_milestones=active_milestones, milestone=requested_stones) }}" title="Filter issues by tag"> {% endif %} diff --git a/pagure/ui/issues.py b/pagure/ui/issues.py index c43ea82..c5e54fb 100644 --- a/pagure/ui/issues.py +++ b/pagure/ui/issues.py @@ -731,6 +731,7 @@ def view_roadmap(repo, username=None, namespace=None): private = None all_milestones = sorted(list(repo.milestones.keys())) + active_milestones = pagure.lib.get_active_milestones(SESSION, repo) issues = pagure.lib.search_issues( SESSION, @@ -773,19 +774,9 @@ def view_roadmap(repo, username=None, namespace=None): cnt = len(all_milestones) all_milestones.insert(cnt, all_milestones.pop(index)) - if len(active_milestones) == 0 and all_ms_tags is None: - # We don't have any requested active milestones, so grab a fresh list. - # Get all the active tickets regardless what tags/milestones were - # requested. - active_issues = pagure.lib.search_issues( - SESSION, - repo, - milestones=all_milestones, - private=private, - status=status if status.lower() != 'all' else None, - ) - for issue in active_issues: - active_milestones.append(issue.milestone) + milestones_list = active_milestones + if all_ms_tags: + milestones_list = all_milestones return flask.render_template( 'roadmap.html', @@ -795,8 +786,7 @@ def view_roadmap(repo, username=None, namespace=None): tag_list=tag_list, status=status, all_ms_tags=all_ms_tags, - milestones=all_milestones, - active_milestones=active_milestones, + milestones=milestones_list, requested_stones=milestones, issues=milestone_issues, tags=tags,