From 573e63acd68eeb862b365b21885c3e2cb7b05483 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Sep 25 2015 09:11:49 +0000 Subject: [PATCH 1/6] Add a method to get all the pull-requests for a specified user --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index bae94d3..3c2fcd2 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -2411,3 +2411,68 @@ def could_be_text(text): return True except: return False + + +def get_pull_request_of_user(session, username): + '''List the opened pull-requests of an user. + These pull-requests have either been opened by that user or against + projects that user has commit on. + ''' + projects = session.query( + sqlalchemy.distinct(model.Project.id) + ) + + projects = projects.filter( + # User created the project + sqlalchemy.and_( + model.User.user == username, + model.User.id == model.Project.user_id, + ) + ) + q2 = session.query( + model.Project.id + ).filter( + # User got commit right + sqlalchemy.and_( + model.User.user == username, + model.User.id == model.ProjectUser.user_id, + model.ProjectUser.project_id == model.Project.id + ) + ) + q3 = session.query( + model.Project.id + ).filter( + # User created a group that has commit right + sqlalchemy.and_( + model.User.user == username, + model.PagureGroup.user_id == model.User.id, + model.PagureGroup.group_type == 'user', + model.PagureGroup.id == model.ProjectGroup.group_id, + model.Project.id == model.ProjectGroup.project_id, + ) + ) + q4 = session.query( + model.Project.id + ).filter( + # User is part of a group that has commit right + sqlalchemy.and_( + model.User.user == username, + model.PagureUserGroup.user_id == model.User.id, + model.PagureUserGroup.group_id == model.PagureGroup.id, + model.PagureGroup.group_type == 'user', + model.PagureGroup.id == model.ProjectGroup.group_id, + model.Project.id == model.ProjectGroup.project_id, + ) + ) + + projects = projects.union(q2).union(q3).union(q4) + + query = session.query( + model.PullRequest + ).filter( + model.PullRequest.project_id.in_(projects.subquery()) + ).order_by( + model.PullRequest.date_created.desc() + ) + + return query.all() From 331e1c07f92ea395378db9695ced214ce72c7cfb Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Sep 25 2015 09:11:50 +0000 Subject: [PATCH 2/6] Add a new endpoint listing all the pull-requests for a given user --- diff --git a/pagure/templates/user_requests.html b/pagure/templates/user_requests.html new file mode 100644 index 0000000..cbf5329 --- /dev/null +++ b/pagure/templates/user_requests.html @@ -0,0 +1,64 @@ +{% extends "master.html" %} +{% from "_formhelper.html" import render_field_in_row %} + +{% block title %}Pull-requests of {{ username }}{% endblock %} +{%block tag %}home{% endblock %} + + +{% block content %} + +

Opened pull-requests

+ + + + + + + + + + + + + + + + + {% for request in requests %} + + + + + + + + + {% else %} + + + + {% endfor %} + +
#TitleProjectOpened byOpened onAssigned to
#{{ request.id }} + + {{ request.title | noJS("img") | safe }} + + + + {{ request.project.name }} + + + {{ request.user.user | avatar(16) | safe }} + {{ request.user.user }} + + {{ request.date_created.strftime('%Y-%m-%d %H:%M') }} + + {{ request.assignee.user | avatar(16) | safe }} + {{ request.assignee.user }} +
No pull-request found
+ +{% endblock %} diff --git a/pagure/ui/app.py b/pagure/ui/app.py index 85d9b1e..a2145e3 100644 --- a/pagure/ui/app.py +++ b/pagure/ui/app.py @@ -305,6 +305,28 @@ def view_user(username): ) +@APP.route('/user//requests/') +@APP.route('/user//requests') +def view_user_requests(username): + """ Shows the pull-requests for the specified user. + """ + user = pagure.lib.search_user(SESSION, username=username) + if not user: + flask.abort(404, 'No user `%s` found' % username) + + requests = pagure.lib.get_pull_request_of_user( + SESSION, + username=username + ) + + return flask.render_template( + 'user_requests.html', + username=username, + user=user, + requests=requests, + ) + + @APP.route('/new/', methods=('GET', 'POST')) @APP.route('/new', methods=('GET', 'POST')) @cla_required From dd5cfd5a7faa3f8c5b54f739b88eb1be8afc6567 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Sep 25 2015 09:11:50 +0000 Subject: [PATCH 3/6] Make it prettier by showing the user's avatar --- diff --git a/pagure/templates/user_requests.html b/pagure/templates/user_requests.html index cbf5329..8aa8962 100644 --- a/pagure/templates/user_requests.html +++ b/pagure/templates/user_requests.html @@ -7,8 +7,15 @@ {% block content %} -

Opened pull-requests

+

Opened pull-requests for

+

+ {{ username | avatar(36) | safe }} {{ username }} + {% if g.fas_user and g.fas_user.username == username %} + + {% endif %} + +

From 1750575f38dd2fb0744fc715e894f7aec558281a Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Sep 25 2015 09:11:50 +0000 Subject: [PATCH 4/6] Show the in the table if the project is a fork or not --- diff --git a/pagure/templates/user_requests.html b/pagure/templates/user_requests.html index 8aa8962..c7df449 100644 --- a/pagure/templates/user_requests.html +++ b/pagure/templates/user_requests.html @@ -45,6 +45,7 @@ 'view_repo', username=request.project.username if request.project.is_fork else None, repo=request.project.name)}}"> + {{ request.project.username + '/' if request.project.is_fork }} {{ request.project.name }} From 47c80086352918838797c86b1d9a20e2bc6956d9 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Sep 25 2015 09:11:50 +0000 Subject: [PATCH 5/6] Tell when the PR is un-assigned --- diff --git a/pagure/templates/user_requests.html b/pagure/templates/user_requests.html index c7df449..876606f 100644 --- a/pagure/templates/user_requests.html +++ b/pagure/templates/user_requests.html @@ -57,8 +57,12 @@ {{ request.date_created.strftime('%Y-%m-%d %H:%M') }} {% else %} From 1bd694b402b2f77144f23bfc4b5ba777e66eb840 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Sep 25 2015 09:30:43 +0000 Subject: [PATCH 6/6] Fix empty space at the end of the title that's breaking the unit-tests --- diff --git a/pagure/templates/pull_request.html b/pagure/templates/pull_request.html index 67ec6b4..7120aa8 100644 --- a/pagure/templates/pull_request.html +++ b/pagure/templates/pull_request.html @@ -23,7 +23,7 @@ {% if pull_request %}

Pull Request: {{ pull_request.title | noJS("img") | safe - }} {% if g.fas_user and (g.fas_user.username == pull_request.user.username + }}{% if g.fas_user and (g.fas_user.username == pull_request.user.username or repo_admin) %}

+ {% if request.assignee %} {{ request.assignee.user | avatar(16) | safe }} {{ request.assignee.user }} + {% else %} + (unassigned) + {% endif %}