#214 Store who closed the PR in the DB
Merged 9 years ago by . Opened 9 years ago by pingou.

@@ -0,0 +1,34 @@ 

+ """Add the closed_by column to pull_requests

+ 

+ 

+ Revision ID: abc71fd60fa

+ Revises: 298891e63039

+ Create Date: 2015-06-08 16:06:18.017110

+ 

+ """

+ 

+ # revision identifiers, used by Alembic.

+ revision = 'abc71fd60fa'

+ down_revision = '298891e63039'

+ 

+ from alembic import op

+ import sqlalchemy as sa

+ 

+ 

+ def upgrade():

+     ''' Add the column merge_status to the table pull_requests.

+     '''

+     op.add_column(

+         'pull_requests',

+         sa.Column(

+             'closed_by_id',

+             sa.Integer,

+             sa.ForeignKey('users.id', onupdate='CASCADE'),

+         )

+     )

+ 

+ 

+ def downgrade():

+     ''' Remove the column merge_status from the table pull_requests.

+     '''

+     op.drop_column('pull_requests', 'closed_by_id')

file modified
+1
@@ -1484,6 +1484,7 @@ 

          request.status = 'Merged'

      else:

          request.status = 'Closed'

+     request.closed_by_id = user_obj.id

      session.add(request)

      session.flush()

  

file modified
+7 -1
@@ -493,6 +493,12 @@ 

              gitfolder, forkfolder, docfolder, ticketfolder, requestfolder

          )

  

+         status = json_data.get('status')

+         if str(status).lower() == 'true':

+             status = 'Open'

+         elif str(status).lower() == 'false':

+             status = 'Merged'

+ 

          # Create new request

          pagure.lib.new_pull_request(

              session,
@@ -504,7 +510,7 @@ 

              user=user.username,

              requestuid=json_data.get('uid'),

              requestid=json_data.get('id'),

-             status=json_data.get('status'),

+             status=status,

              requestfolder=None,

              notify=False,

          )

file modified
+8
@@ -698,6 +698,10 @@ 

              'status_pull_requests.status', onupdate='CASCADE'),

          default='Open',

          nullable=False)

+     closed_by_id = sa.Column(

+         sa.Integer,

+         sa.ForeignKey('users.id', onupdate='CASCADE'),

+         nullable=True)

  

      date_created = sa.Column(sa.DateTime, nullable=False,

                               default=datetime.datetime.utcnow)
@@ -714,6 +718,8 @@ 

                      remote_side=[User.id], backref='pull_requests')

      assignee = relation('User', foreign_keys=[assignee_id],

                          remote_side=[User.id], backref='assigned_requests')

+     closed_by = relation('User', foreign_keys=[closed_by_id],

+                          remote_side=[User.id], backref='closed_requests')

  

      def __repr__(self):

          return 'PullRequest(%s, project:%s, user:%s, title:%s)' % (
@@ -780,6 +786,8 @@ 

              'status': self.status,

              'commit_start': self.commit_start,

              'commit_stop': self.commit_stop,

+             'closed_by': self.closed_by.to_json(public=public)

+             if self.closed_by else None,

          }

  

          comments = []

@@ -28,7 +28,7 @@ 

  <div class="header">

      <h3>Title: {{ pull_request.title }}</h3>

      <ul class="buttons">

-   {% if pull_request.status and repo_admin %}

+   {% if pull_request.status == 'Open' and repo_admin %}

        <li>

          <form action="{{ url_for('merge_request_pull', username=username,

              repo=repo.name, requestid=requestid) }}" method="POST">
@@ -43,9 +43,13 @@ 

            <input type="submit" value="Close" id="cancel_pr" class="button"/>

          </form>

        </li>

-   {% elif pull_request and pull_request.status != 'Open' %}

+   {% elif pull_request.status != 'Open' %}

      <li>

-       <span class="error">{{ pull_request.status }}</span>

+       <span class="error">{{ pull_request.status }} by

+         <a href="{{ url_for('view_user', username=pull_request.closed_by.user)}} ">

+           {{ pull_request.closed_by.user if pull_request.closed_by else ''}}

+         </a>

+       </span>

      </li>

    {% endif %}

        <li>

@@ -104,6 +104,7 @@ 

                    "assignee": None,

                    "branch": "master",

                    "branch_from": "master",

+                   "closed_by": None,

                    "comments": [],

                    "commit_start": None,

                    "commit_stop": None,
@@ -220,6 +221,7 @@ 

                "assignee": None,

                "branch": "master",

                "branch_from": "master",

+               "closed_by": None,

                "comments": [],

                "commit_start": None,

                "commit_stop": None,

@@ -43,6 +43,7 @@ 

          pagure.ui.filters.SESSION = self.session

          pagure.ui.fork.SESSION = self.session

          pagure.ui.repo.SESSION = self.session

+         pagure.ui.issues.SESSION = self.session

  

          pagure.APP.config['GIT_FOLDER'] = os.path.join(tests.HERE, 'repos')

          pagure.APP.config['FORK_FOLDER'] = os.path.join(tests.HERE, 'forks')
@@ -474,7 +475,7 @@ 

          self.assertIn(

              '<title>Pull request #1 - test - Pagure</title>', output.data)

          self.assertIn(

-             '<span class="error">Merged</span>', output.data)

+             '<span class="error">Merged by', output.data)

          self.assertIn(

              'title="View file as of 2a552b">View</a>', output.data)

  
@@ -1148,7 +1149,8 @@ 

              # Pull-Request closed

              repo = pagure.lib.get_project(self.session, 'test')

              req = repo.requests[0]

-             req.status = False

+             req.status = 'Closed'

+             req.closed_by_in = 1

              self.session.add(req)

              self.session.commit()

  
@@ -1332,7 +1334,7 @@ 

                  '<li class="error">Fork is empty, there are no commits to '

                  'request pulling</li>', output.data)

  

-             output = self.app.get('/fork/foo/test/new_issue')

+             output = self.app.get('/test/new_issue')

              csrf_token = output.data.split(

                  'name="csrf_token" type="hidden" value="')[1].split('">')[0]

  

file modified
+2 -2
@@ -641,7 +641,7 @@ 

              requestfolder=tests.HERE,

              requestuid='foobar',

              requestid=None,

-             status=True,

+             status='Open',

              notify=True

          )

          self.assertEqual(req.id, 1)
@@ -669,7 +669,7 @@ 

  --- /dev/null

  +++ b/456

  @@ -0,0 +1 @@

- +{"status": true, "branch_from": "feature", "uid": "foobar", "commit_stop": null, "title": "test PR", "comments": [], "project": {"description": "test project for ticket", "parent": null, "settings": {"Minimum_score_to_merge_pull-request": -1, "Web-hooks": null, "project_documentation": true, "pull_requests": true, "Enforce_signed-off_commits_in_pull-request": false, "Only_assignee_can_merge_pull-request": false, "issue_tracker": true}, "user": {"fullname": "PY C", "default_email": "bar@pingou.com", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "date_created": null, "id": 1, "name": "test_ticket_repo"}, "assignee": null, "repo_from": {"description": "test project for ticket", "parent": null, "settings": {"Minimum_score_to_merge_pull-request": -1, "Web-hooks": null, "project_documentation": true, "pull_requests": true, "Enforce_signed-off_commits_in_pull-request": false, "Only_assignee_can_merge_pull-request": false, "issue_tracker": true}, "user": {"fullname": "PY C", "default_email": "bar@pingou.com", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "date_created": null, "id": 1, "name": "test_ticket_repo"}, "user": {"fullname": "PY C", "default_email": "bar@pingou.com", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "branch": "master", "date_created": null, "commit_start": null, "id": 1}

+ +{"status": "Open", "branch_from": "feature", "uid": "foobar", "commit_stop": null, "title": "test PR", "comments": [], "closed_by": null, "project": {"description": "test project for ticket", "parent": null, "settings": {"Minimum_score_to_merge_pull-request": -1, "Web-hooks": null, "project_documentation": true, "pull_requests": true, "Enforce_signed-off_commits_in_pull-request": false, "Only_assignee_can_merge_pull-request": false, "issue_tracker": true}, "user": {"fullname": "PY C", "default_email": "bar@pingou.com", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "date_created": null, "id": 1, "name": "test_ticket_repo"}, "assignee": null, "repo_from": {"description": "test project for ticket", "parent": null, "settings": {"Minimum_score_to_merge_pull-request": -1, "Web-hooks": null, "project_documentation": true, "pull_requests": true, "Enforce_signed-off_commits_in_pull-request": false, "Only_assignee_can_merge_pull-request": false, "issue_tracker": true}, "user": {"fullname": "PY C", "default_email": "bar@pingou.com", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "date_created": null, "id": 1, "name": "test_ticket_repo"}, "user": {"fullname": "PY C", "default_email": "bar@pingou.com", "name": "pingou", "emails": ["bar@pingou.com", "foo@pingou.com"]}, "branch": "master", "date_created": null, "commit_start": null, "id": 1}

  \ No newline at end of file

  

  """