From 25b32300f535c75a2c5af664fba3138eebcc5b0f Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 02 2015 07:32:01 +0000 Subject: [PATCH 1/7] Add a closed_at field to the pull_requests table and export it in the JSON --- diff --git a/pagure/lib/model.py b/pagure/lib/model.py index ce0a6e2..88f4080 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -756,6 +756,9 @@ class PullRequest(BASE): sa.Integer, sa.ForeignKey('users.id', onupdate='CASCADE'), nullable=True) + closed_at = sa.Column( + sa.DateTime, + nullable=True) date_created = sa.Column(sa.DateTime, nullable=False, default=datetime.datetime.utcnow) @@ -855,6 +858,7 @@ class PullRequest(BASE): 'remote_git': self.remote_git, 'date_created': self.date_created.strftime('%s'), 'updated_on': self.updated_on.strftime('%s'), + 'closed_at': self.closed_at.strftime('%s'), 'user': self.user.to_json(public=public), 'assignee': self.assignee.to_json( public=public) if self.assignee else None, From e8692fc22dfc952433c9701ec054f48194f32ded Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 02 2015 07:32:01 +0000 Subject: [PATCH 2/7] Set the value of pull-request.closed_at when the PR gets closed --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 1559fac..01046a9 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -1669,6 +1669,7 @@ def close_pull_request(session, request, user, requestfolder, merged=True): else: request.status = 'Closed' request.closed_by_id = user_obj.id + request.closed_at = datetime.datetime.utcnow() session.add(request) session.flush() From 66fd87832c1b7a859afc1c8296779b74dc2eaf79 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 02 2015 07:32:01 +0000 Subject: [PATCH 3/7] Only format closed_at if it has a value --- diff --git a/pagure/lib/model.py b/pagure/lib/model.py index 88f4080..277f25d 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -858,7 +858,8 @@ class PullRequest(BASE): 'remote_git': self.remote_git, 'date_created': self.date_created.strftime('%s'), 'updated_on': self.updated_on.strftime('%s'), - 'closed_at': self.closed_at.strftime('%s'), + 'closed_at': self.closed_at.strftime( + '%s') if self.closed_at else None, 'user': self.user.to_json(public=public), 'assignee': self.assignee.to_json( public=public) if self.assignee else None, From bf72a20889ec9d7722c6316a61e6c0d05c302962 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 02 2015 07:32:01 +0000 Subject: [PATCH 4/7] Adjust unit-tests for the new field of the pull-request table --- diff --git a/tests/test_progit_flask_api_fork.py b/tests/test_progit_flask_api_fork.py index d3e90cb..d4cee86 100644 --- a/tests/test_progit_flask_api_fork.py +++ b/tests/test_progit_flask_api_fork.py @@ -105,6 +105,7 @@ class PagureFlaskApiForktests(tests.Modeltests): "assignee": None, "branch": "master", "branch_from": "master", + "closed_at": None, "closed_by": None, "comments": [], "commit_start": None, @@ -227,6 +228,7 @@ class PagureFlaskApiForktests(tests.Modeltests): "assignee": None, "branch": "master", "branch_from": "master", + "closed_at": None, "closed_by": None, "comments": [], "commit_start": None, diff --git a/tests/test_progit_lib_git.py b/tests/test_progit_lib_git.py index a3c0697..9701ecc 100644 --- a/tests/test_progit_lib_git.py +++ b/tests/test_progit_lib_git.py @@ -689,11 +689,12 @@ new file mode 100644 index 0000000..60f7480 --- /dev/null +++ b/456 -@@ -0,0 +1,77 @@ +@@ -0,0 +1,78 @@ +{ + "assignee": null, + "branch": "master", + "branch_from": "feature", ++ "closed_at": null, + "closed_by": null, + "comments": [], + "commit_start": null, From bf8489e598de2946b4805c3927e10b905a6a9005 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 02 2015 07:33:57 +0000 Subject: [PATCH 5/7] Add an alembic revision file to add the closed_at field to the PR table --- diff --git a/alembic/versions/1cd0a853c697_add_closed_at_field_in_pr.py b/alembic/versions/1cd0a853c697_add_closed_at_field_in_pr.py new file mode 100644 index 0000000..0ecf8b3 --- /dev/null +++ b/alembic/versions/1cd0a853c697_add_closed_at_field_in_pr.py @@ -0,0 +1,34 @@ +"""Add closed_at field in PR + + +Revision ID: 1cd0a853c697 +Revises: 6190226bed0 +Create Date: 2015-10-02 09:32:15.370676 + +""" + +# revision identifiers, used by Alembic. +revision = '1cd0a853c697' +down_revision = '6190226bed0' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + ''' Add the column closed_at to the table pull_requests. + ''' + op.add_column( + 'pull_requests', + sa.Column( + 'closed_at', + sa.DateTime, + nullable=True, + ) + ) + + +def downgrade(): + ''' Remove the column closed_at from the table pull_requests. + ''' + op.drop_column('pull_requests', 'closed_at') From 15c50300c87fe3ceb606457d0ac094cc72c5338a Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 02 2015 10:14:41 +0000 Subject: [PATCH 6/7] Adjust API documentation for missing fields in the JSON repr of a PR --- diff --git a/pagure/api/fork.py b/pagure/api/fork.py index 844aff9..3040b53 100644 --- a/pagure/api/fork.py +++ b/pagure/api/fork.py @@ -74,6 +74,8 @@ def api_pull_request_views(repo, username=None): "assignee": null, "branch": "master", "branch_from": "master", + "closed_at": null, + "closed_by": null, "comments": [], "commit_start": null, "commit_stop": null, @@ -184,6 +186,8 @@ def api_pull_request_view(repo, requestid, username=None): "assignee": null, "branch": "master", "branch_from": "master", + "closed_at": null, + "closed_by": null, "comments": [], "commit_start": null, "commit_stop": null, From 940ed3381409e79d3b9820512a19d57c930deb06 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 02 2015 10:23:12 +0000 Subject: [PATCH 7/7] Set a default when adding the closed_at column --- diff --git a/alembic/versions/1cd0a853c697_add_closed_at_field_in_pr.py b/alembic/versions/1cd0a853c697_add_closed_at_field_in_pr.py index 0ecf8b3..d6eef26 100644 --- a/alembic/versions/1cd0a853c697_add_closed_at_field_in_pr.py +++ b/alembic/versions/1cd0a853c697_add_closed_at_field_in_pr.py @@ -27,6 +27,9 @@ def upgrade(): ) ) + op.execute('''UPDATE "pull_requests" SET closed_at=date_created ''' + '''WHERE STATUS != 'Open';''') + def downgrade(): ''' Remove the column closed_at from the table pull_requests.