diff --git a/pagure/templates/_render_pullrequests.html b/pagure/templates/_render_pullrequests.html
new file mode 100644
index 0000000..483f755
--- /dev/null
+++ b/pagure/templates/_render_pullrequests.html
@@ -0,0 +1,99 @@
+{% macro render_pullrequest_row(request, repo, username) %}
+ {% if request.status|lower == 'open' %}
+ {% set status_color = "success" %}
+ {% elif request.status|lower == 'merged' %}
+ {% set status_color = "info" %}
+ {% else %}
+ {% set status_color = "danger" %}
+ {% endif %}
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {% set filters_list = [
+ {"key": "date_created", "display_string": "Open Date", "sort_icon_prefix": "fa-sort-numeric-", "icon":"fa-calendar"},
+ {"key": "last_updated", "display_string": "Last Modified Date", "sort_icon_prefix": "fa-sort-numeric-", "icon":"fa-calendar"},
+ ] %}
+
+
+
+
+
+
+
+
+ {% if requests %}
+ {% for request in requests %}
+ {{render_pullrequest_row(request, repo, username)}}
+ {% endfor %}
+ {% else %}
+
+
+
+
+ {% if status_filter == 'Open'%}
+ no open pull requests found
+ {% if merged_cnt %}
+
+ {% else %}
+
no merged pull requests match this filter either
+ {% endif %}
+ {% elif status_filter == 'Merged'%}
+ no merged pull requests found
+ {% if open_cnt %}
+
+ {% else %}
+ no open pull requests match this filter either
+ {% endif %}
+ {% else %}
+ no pull requests found
+ {% endif %}
+
+
+
+
+ {% endif %}
+
+
+{% if total_page > 1 %}
{{ pagination_link('page', g.page, total_page) }}
+{% endif %}
+{% endblock %}
+
+{% block jscripts %}
+{{ super() }}
+
+
+
{% endblock %}
diff --git a/pagure/ui/fork.py b/pagure/ui/fork.py
index 4d3a865..38ab14e 100644
--- a/pagure/ui/fork.py
+++ b/pagure/ui/fork.py
@@ -78,61 +78,90 @@ def request_pulls(repo, username=None, namespace=None):
if not repo.settings.get('pull_requests', True):
flask.abort(404, 'No pull-requests found for this project')
- if is_true(status, ['false', '0']):
- status = False
- elif is_true(status, ['all']):
- status = None
-
- if is_true(status, ['true', '1', 'open']):
+ total_open = pagure.lib.search_pull_requests(
+ flask.g.session,
+ project_id=repo.id,
+ status=True,
+ count=True)
+
+ total_merged = pagure.lib.search_pull_requests(
+ flask.g.session,
+ project_id=repo.id,
+ status='Merged',
+ count=True)
+
+ if status.lower() == 'merged' or is_true(status, ['false', '0']):
+ status_filter = 'Merged'
requests = pagure.lib.search_pull_requests(
flask.g.session,
project_id=repo.id,
- status=True,
+ status='Merged',
order=order,
order_key=order_key,
assignee=assignee,
author=author,
offset=flask.g.offset,
limit=flask.g.limit)
- requests_cnt = pagure.lib.search_pull_requests(
+ elif is_true(status, ['true', '1', 'open']):
+ status_filter = 'Open'
+ requests = pagure.lib.search_pull_requests(
flask.g.session,
project_id=repo.id,
- status=True,
+ status='Open',
+ order=order,
+ order_key=order_key,
assignee=assignee,
author=author,
- count=True)
- oth_requests = pagure.lib.search_pull_requests(
+ offset=flask.g.offset,
+ limit=flask.g.limit)
+ elif status.lower() == 'closed':
+ status_filter = 'Closed'
+ requests = pagure.lib.search_pull_requests(
flask.g.session,
project_id=repo.id,
- status=False,
+ status='Closed',
+ order=order,
+ order_key=order_key,
assignee=assignee,
author=author,
- count=True)
+ offset=flask.g.offset,
+ limit=flask.g.limit)
else:
+ status_filter = None
requests = pagure.lib.search_pull_requests(
flask.g.session,
project_id=repo.id,
+ status=None,
order=order,
order_key=order_key,
assignee=assignee,
author=author,
- status=status,
offset=flask.g.offset,
limit=flask.g.limit)
- requests_cnt = pagure.lib.search_pull_requests(
- flask.g.session,
- project_id=repo.id,
- assignee=assignee,
- author=author,
- status=status,
- count=True)
- oth_requests = pagure.lib.search_pull_requests(
- flask.g.session,
- project_id=repo.id,
- status=True,
- assignee=assignee,
- author=author,
- count=True)
+
+ open_cnt = pagure.lib.search_pull_requests(
+ flask.g.session,
+ project_id=repo.id,
+ status='Open',
+ assignee=assignee,
+ author=author,
+ count=True)
+
+ merged_cnt = pagure.lib.search_pull_requests(
+ flask.g.session,
+ project_id=repo.id,
+ status='Merged',
+ assignee=assignee,
+ author=author,
+ count=True)
+
+ closed_cnt = pagure.lib.search_pull_requests(
+ flask.g.session,
+ project_id=repo.id,
+ status='Closed',
+ assignee=assignee,
+ author=author,
+ count=True)
repo_obj = flask.g.repo_obj
if not repo_obj.is_empty and not repo_obj.head_is_unborn:
@@ -141,8 +170,8 @@ def request_pulls(repo, username=None, namespace=None):
head = 'master'
total_page = 1
- if requests_cnt:
- total_page = int(ceil(requests_cnt / float(flask.g.limit)))
+ if len(requests):
+ total_page = int(ceil(len(requests) / float(flask.g.limit)))
return flask.render_template(
'requests.html',
@@ -150,15 +179,19 @@ def request_pulls(repo, username=None, namespace=None):
repo=repo,
username=username,
requests=requests,
- requests_cnt=requests_cnt,
- oth_requests=oth_requests,
+ open_cnt=open_cnt,
+ merged_cnt=merged_cnt,
+ closed_cnt=closed_cnt,
order=order,
order_key=order_key,
status=status,
+ status_filter=status_filter,
assignee=assignee,
author=author,
head=head,
total_page=total_page,
+ total_open=total_open,
+ total_merged=total_merged,
)
diff --git a/tests/test_pagure_flask_ui_fork.py b/tests/test_pagure_flask_ui_fork.py
index 386ba37..bce6766 100644
--- a/tests/test_pagure_flask_ui_fork.py
+++ b/tests/test_pagure_flask_ui_fork.py
@@ -924,16 +924,12 @@ class PagureFlaskForktests(tests.Modeltests):
# sort by last_updated
output = self.app.get('/test/pull-requests?order_key=last_updated')
output_text = output.get_data(as_text=True)
- tr_elements = re.findall('
(.*?)
', output_text, re.M | re.S)
+ tr_elements = re.findall('
(.*?)
', output_text, re.M | re.S)
self.assertEqual(output.status_code, 200)
- arrowed_th = ('Modified\n
')
- # First table row is the header
- self.assertIn(arrowed_th, tr_elements[0])
# Make sure that issue four is first since it was modified last
- self.assertIn('href="/test/pull-request/4"', tr_elements[1])
- self.assertIn('href="/test/pull-request/2"', tr_elements[2])
- self.assertIn('href="/test/pull-request/1"', tr_elements[3])
+ self.assertIn('href="/test/pull-request/4"', tr_elements[0])
+ self.assertIn('href="/test/pull-request/2"', tr_elements[1])
+ self.assertIn('href="/test/pull-request/1"', tr_elements[2])
pr_one = pagure.lib.search_pull_requests(
self.session, project_id=1, requestid=1)
@@ -944,27 +940,24 @@ class PagureFlaskForktests(tests.Modeltests):
# sort by last_updated
output = self.app.get('/test/pull-requests?order_key=last_updated')
output_text = output.get_data(as_text=True)
- tr_elements = re.findall(r'
(.*?)
', output_text, re.M | re.S)
+ tr_elements = re.findall('
(.*?)
', output_text, re.M | re.S)
self.assertEqual(output.status_code, 200)
# Make sure that PR four is first since it was modified last
- self.assertIn('href="/test/pull-request/1"', tr_elements[1])
+ self.assertIn('href="/test/pull-request/1"', tr_elements[0])
# Make sure that PR two is second since it was modified second
- self.assertIn('href="/test/pull-request/4"', tr_elements[2])
+ self.assertIn('href="/test/pull-request/4"', tr_elements[1])
# Make sure that PR one is last since it was modified first
- self.assertIn('href="/test/pull-request/2"', tr_elements[3])
+ self.assertIn('href="/test/pull-request/2"', tr_elements[2])
# Now query so that the results are ascending
output = self.app.get('/test/pull-requests?'
'order_key=last_updated&order=asc')
output_text = output.get_data(as_text=True)
- tr_elements = re.findall(r'
(.*?)
', output_text, re.M | re.S)
- arrowed_th = ('Modified\n
')
- self.assertIn(arrowed_th, tr_elements[0])
- self.assertIn('href="/test/pull-request/2"', tr_elements[1])
- self.assertIn('href="/test/pull-request/4"', tr_elements[2])
- self.assertIn('href="/test/pull-request/1"', tr_elements[3])
+ tr_elements = re.findall('
(.*?)
', output_text, re.M | re.S)
+ self.assertIn('href="/test/pull-request/2"', tr_elements[0])
+ self.assertIn('href="/test/pull-request/4"', tr_elements[1])
+ self.assertIn('href="/test/pull-request/1"', tr_elements[2])
@patch('pagure.lib.notify.send_email')
def test_request_pulls(self, send_email):
@@ -983,15 +976,8 @@ class PagureFlaskForktests(tests.Modeltests):
self.assertEqual(output.status_code, 200)
output_text = output.get_data(as_text=True)
self.assertIn(
- '
\n 0 Pull Requests (of 0)\n
',
+ '
0 Open PRs\n',
output_text)
- # Open is primary
- self.assertIn(
- '
Open', output_text)
- self.assertIn(
- '
Closed', output_text)
self.set_up_git_repo(new_project=None, branch_from='feature')
@@ -999,44 +985,44 @@ class PagureFlaskForktests(tests.Modeltests):
self.assertEqual(output.status_code, 200)
output_text = output.get_data(as_text=True)
self.assertIn(
- '
\n 1 Pull Requests (of 1)\n
',
+ '
1 Open PRs\n',
output_text)
- # Open is primary
- self.assertIn(
- '
Open', output_text)
- self.assertIn(
- '
Closed', output_text)
- output = self.app.get('/test/pull-requests?status=Closed')
+ output = self.app.get('/test/pull-requests?status=1')
self.assertEqual(output.status_code, 200)
output_text = output.get_data(as_text=True)
self.assertIn(
- '
\n 0 Closed Pull Requests (of 0)\n
',
+ '
1 Open PRs\n',
output_text)
- # Close is primary
+
+ output = self.app.get('/test/pull-requests?status=true')
+ self.assertEqual(output.status_code, 200)
+ output_text = output.get_data(as_text=True)
self.assertIn(
- '
Open', output_text)
+ '
1 Open PRs\n',
+ output_text)
+
+ output = self.app.get('/test/pull-requests?status=Merged')
+ self.assertEqual(output.status_code, 200)
+ output_text = output.get_data(as_text=True)
self.assertIn(
- '
Closed', output_text)
+ '
0 Merged PRs\n',
+ output_text)
output = self.app.get('/test/pull-requests?status=0')
self.assertEqual(output.status_code, 200)
output_text = output.get_data(as_text=True)
self.assertIn(
- '
\n 0 Closed/Merged Pull Requests (of 0)\n
',
+ '
0 Merged PRs\n',
output_text)
- # Close is primary
- self.assertIn(
- '
Open', output_text)
+ output = self.app.get('/test/pull-requests?status=Closed')
+ self.assertEqual(output.status_code, 200)
+ output_text = output.get_data(as_text=True)
self.assertIn(
- '
Closed', output_text)
+ '
0 Cancelled PRs\n',
+ output_text)
+
# Project w/o pull-request
repo = pagure.lib.get_authorized_project(self.session, 'test')