annotate rhodecode/model/pull_request.py @ 3303:ae5ac36cdf83 beta

pull request: use unionrepo instead of outgoing This makes it possible to look the 'moving target' symbols up in the right repo. Using a revset with the right revisions also removes the need for pruning changesets that are outside the requested range. It will also not be confused by changesets that for some reason has been pulled to the repo but haven't been merged yet. They are going to be 'merged' by the 'pull' request and should thus be a part of what is reviewed.
author Mads Kiilerich <madski@unity3d.com>
date Thu, 03 Jan 2013 18:05:18 +0100
parents 3c91ec4419a6
children fc08484c5bf3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
2 """
2608
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
3 rhodecode.model.pull_request
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
5
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
6 pull request model for RhodeCode
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
7
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
8 :created_on: Jun 6, 2012
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
9 :author: marcink
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
10 :copyright: (C) 2012-2012 Marcin Kuzminski <marcin@python-works.com>
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
11 :license: GPLv3, see COPYING for more details.
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
12 """
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
13 # This program is free software: you can redistribute it and/or modify
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
14 # it under the terms of the GNU General Public License as published by
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
15 # the Free Software Foundation, either version 3 of the License, or
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
16 # (at your option) any later version.
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
17 #
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
18 # This program is distributed in the hope that it will be useful,
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
21 # GNU General Public License for more details.
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
22 #
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
23 # You should have received a copy of the GNU General Public License
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
25
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
26 import logging
2608
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
27 import datetime
3010
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2810
diff changeset
28 import re
2597
7b092b919f4f Switch to waitress wsgi server by default in rhodecode.
Marcin Kuzminski <marcin@python-works.com>
parents: 2584
diff changeset
29
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
30 from pylons.i18n.translation import _
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
31
2597
7b092b919f4f Switch to waitress wsgi server by default in rhodecode.
Marcin Kuzminski <marcin@python-works.com>
parents: 2584
diff changeset
32 from rhodecode.model.meta import Session
3303
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
33 from rhodecode.lib import helpers as h, unionrepo
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
34 from rhodecode.model import BaseModel
3175
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
35 from rhodecode.model.db import PullRequest, PullRequestReviewers, Notification,\
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
36 ChangesetStatus
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
37 from rhodecode.model.notification import NotificationModel
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
38 from rhodecode.lib.utils2 import safe_unicode
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
39
3303
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
40 from rhodecode.lib.vcs.utils.hgcompat import scmutil
3301
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
41 from rhodecode.lib.vcs.utils import safe_str
2442
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
42
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
43 log = logging.getLogger(__name__)
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
44
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
45
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
46 class PullRequestModel(BaseModel):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
47
2522
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
48 cls = PullRequest
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
49
2608
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
50 def __get_pull_request(self, pull_request):
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
51 return self._get_instance(PullRequest, pull_request)
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
52
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
53 def get_all(self, repo):
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
54 repo = self._get_repo(repo)
3262
14e9a06c37a7 fix order of pull-requests in show all page
Marcin Kuzminski <marcin@python-works.com>
parents: 3251
diff changeset
55 return PullRequest.query()\
14e9a06c37a7 fix order of pull-requests in show all page
Marcin Kuzminski <marcin@python-works.com>
parents: 3251
diff changeset
56 .filter(PullRequest.other_repo == repo)\
14e9a06c37a7 fix order of pull-requests in show all page
Marcin Kuzminski <marcin@python-works.com>
parents: 3251
diff changeset
57 .order_by(PullRequest.created_on)\
14e9a06c37a7 fix order of pull-requests in show all page
Marcin Kuzminski <marcin@python-works.com>
parents: 3251
diff changeset
58 .all()
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
59
3175
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
60 def create(self, created_by, org_repo, org_ref, other_repo, other_ref,
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
61 revisions, reviewers, title, description=None):
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
62 from rhodecode.model.changeset_status import ChangesetStatusModel
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
63
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
64 created_by_user = self._get_user(created_by)
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
65 org_repo = self._get_repo(org_repo)
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
66 other_repo = self._get_repo(other_repo)
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
67
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
68 new = PullRequest()
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
69 new.org_repo = org_repo
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
70 new.org_ref = org_ref
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
71 new.other_repo = other_repo
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
72 new.other_ref = other_ref
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
73 new.revisions = revisions
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
74 new.title = title
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
75 new.description = description
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
76 new.author = created_by_user
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
77 self.sa.add(new)
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
78 Session().flush()
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
79 #members
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
80 for member in reviewers:
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
81 _usr = self._get_user(member)
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
82 reviewer = PullRequestReviewers(_usr, new)
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
83 self.sa.add(reviewer)
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
84
3175
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
85 #reset state to under-review
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
86 ChangesetStatusModel().set_status(
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
87 repo=org_repo,
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
88 status=ChangesetStatus.STATUS_UNDER_REVIEW,
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
89 user=created_by_user,
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
90 pull_request=new
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
91 )
5d1d25c1c700 set the status of changesets initially on pull request, and make sure we care of version collisions.
Marcin Kuzminski <marcin@python-works.com>
parents: 3076
diff changeset
92
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
93 #notification to reviewers
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
94 notif = NotificationModel()
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
95
2799
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
96 pr_url = h.url('pullrequest_show', repo_name=other_repo.repo_name,
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
97 pull_request_id=new.pull_request_id,
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
98 qualified=True,
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
99 )
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
100 subject = safe_unicode(
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
101 h.link_to(
3251
e76859961cbc pull request: mention title of pull request in notifications
Mads Kiilerich <madski@unity3d.com>
parents: 3192
diff changeset
102 _('%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s') % \
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
103 {'user': created_by_user.username,
3251
e76859961cbc pull request: mention title of pull request in notifications
Mads Kiilerich <madski@unity3d.com>
parents: 3192
diff changeset
104 'pr_title': new.title,
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
105 'pr_id': new.pull_request_id},
2799
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
106 pr_url
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
107 )
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
108 )
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
109 body = description
2799
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
110 kwargs = {
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
111 'pr_title': title,
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
112 'pr_user_created': h.person(created_by_user.email),
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
113 'pr_repo_url': h.url('summary_home', repo_name=other_repo.repo_name,
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
114 qualified=True,),
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
115 'pr_url': pr_url,
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
116 'pr_revisions': revisions
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
117 }
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
118 notif.create(created_by=created_by_user, subject=subject, body=body,
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
119 recipients=reviewers,
2799
493646d3146f Nicer email notifications about pull-request
Marcin Kuzminski <marcin@python-works.com>
parents: 2746
diff changeset
120 type_=Notification.TYPE_PULL_REQUEST, email_kwargs=kwargs)
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
121 return new
2442
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
122
2614
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
123 def update_reviewers(self, pull_request, reviewers_ids):
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
124 reviewers_ids = set(reviewers_ids)
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
125 pull_request = self.__get_pull_request(pull_request)
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
126 current_reviewers = PullRequestReviewers.query()\
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
127 .filter(PullRequestReviewers.pull_request==
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
128 pull_request)\
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
129 .all()
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
130 current_reviewers_ids = set([x.user.user_id for x in current_reviewers])
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
131
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
132 to_add = reviewers_ids.difference(current_reviewers_ids)
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
133 to_remove = current_reviewers_ids.difference(reviewers_ids)
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
134
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
135 log.debug("Adding %s reviewers" % to_add)
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
136 log.debug("Removing %s reviewers" % to_remove)
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
137
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
138 for uid in to_add:
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
139 _usr = self._get_user(uid)
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
140 reviewer = PullRequestReviewers(_usr, pull_request)
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
141 self.sa.add(reviewer)
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
142
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
143 for uid in to_remove:
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
144 reviewer = PullRequestReviewers.query()\
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
145 .filter(PullRequestReviewers.user_id==uid,
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
146 PullRequestReviewers.pull_request==pull_request)\
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
147 .scalar()
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
148 if reviewer:
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
149 self.sa.delete(reviewer)
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
150
2746
49a4864b11c1 Authors of pull-requests can now delete them
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
151 def delete(self, pull_request):
49a4864b11c1 Authors of pull-requests can now delete them
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
152 pull_request = self.__get_pull_request(pull_request)
49a4864b11c1 Authors of pull-requests can now delete them
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
153 Session().delete(pull_request)
49a4864b11c1 Authors of pull-requests can now delete them
Marcin Kuzminski <marcin@python-works.com>
parents: 2684
diff changeset
154
2608
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
155 def close_pull_request(self, pull_request):
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
156 pull_request = self.__get_pull_request(pull_request)
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
157 pull_request.status = PullRequest.STATUS_CLOSED
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
158 pull_request.updated_on = datetime.datetime.now()
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
159 self.sa.add(pull_request)
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2597
diff changeset
160
3192
b9105d31e582 refactoring: drop unused 'discovery data' in pull request and compare diffs
Mads Kiilerich <madski@unity3d.com>
parents: 3175
diff changeset
161 def _get_changesets(self, alias, org_repo, org_ref, other_repo, other_ref):
2442
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
162 """
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
163 Returns a list of changesets that are incoming from org_repo@org_ref
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
164 to other_repo@other_ref
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
165
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
166 :param org_repo:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
167 :param org_ref:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
168 :param other_repo:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
169 :param other_ref:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
170 :param tmp:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
171 """
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
172
2442
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
173 changesets = []
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
174
3300
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
175 if alias == 'hg':
3301
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
176 # lookup up the exact node id
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
177 _revset_predicates = {
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
178 'branch': 'branch',
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
179 'book': 'bookmark',
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
180 'tag': 'tag',
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
181 'rev': 'id',
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
182 }
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
183 org_rev_spec = "%s('%s')" % (_revset_predicates[org_ref[0]],
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
184 safe_str(org_ref[1]))
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
185 org_rev = scmutil.revsingle(org_repo._repo,
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
186 org_rev_spec)
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
187 other_rev_spec = "%s('%s')" % (_revset_predicates[other_ref[0]],
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
188 safe_str(other_ref[1]))
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
189 other_rev = scmutil.revsingle(other_repo._repo, other_rev_spec)
2442
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
190
3300
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
191 #case two independent repos
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
192 if org_repo != other_repo:
3303
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
193 hgrepo = unionrepo.unionrepository(org_repo.baseui,
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
194 org_repo.path,
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
195 other_repo.path)
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
196 revs = ["ancestors(id('%s')) and not ancestors(id('%s'))" %
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
197 (org_rev, other_rev)]
3300
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
198
3010
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2810
diff changeset
199 #no remote compare do it on the same repository
3300
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
200 else:
3303
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
201 hgrepo = org_repo._repo
3301
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
202 revs = ["ancestors(id('%s')) and not ancestors(id('%s'))" %
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
203 (other_rev, org_rev)]
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
204
3303
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
205 out = scmutil.revrange(hgrepo, revs)
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
206 for cs in (out):
ae5ac36cdf83 pull request: use unionrepo instead of outgoing
Mads Kiilerich <madski@unity3d.com>
parents: 3301
diff changeset
207 changesets.append(org_repo.get_changeset(cs))
3300
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
208
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
209 elif alias == 'git':
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
210 assert org_repo == other_repo, (org_repo, other_repo) # no git support for different repos
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
211 so, se = org_repo.run_git_command(
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
212 'log --reverse --pretty="format: %%H" -s -p %s..%s' % (org_ref[1],
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
213 other_ref[1])
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
214 )
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
215 ids = re.findall(r'[0-9a-fA-F]{40}', so)
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
216 for cs in (ids):
2c0208bd686b pull request: shuffle different-repo and hg-git conditionals around, no code change
Mads Kiilerich <madski@unity3d.com>
parents: 3262
diff changeset
217 changesets.append(org_repo.get_changeset(cs))
2442
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
218
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
219 return changesets
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
220
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
221 def get_compare_data(self, org_repo, org_ref, other_repo, other_ref):
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
222 """
3301
3c91ec4419a6 pull requeset: move stuff around, preparing for next change
Mads Kiilerich <madski@unity3d.com>
parents: 3300
diff changeset
223 Returns incoming changesets for mercurial repositories
2442
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
224
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
225 :param org_repo:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
226 :type org_repo:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
227 :param org_ref:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
228 :type org_ref:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
229 :param other_repo:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
230 :type other_repo:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
231 :param other_ref:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
232 :type other_ref:
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
233 """
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
234
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
235 if len(org_ref) != 2 or not isinstance(org_ref, (list, tuple)):
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
236 raise Exception('org_ref must be a two element list/tuple')
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
237
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
238 if len(other_ref) != 2 or not isinstance(org_ref, (list, tuple)):
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
239 raise Exception('other_ref must be a two element list/tuple')
3bf057a7f7e8 small refactoring, moved shared for diff generation of code into pull-request model
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
240
3010
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2810
diff changeset
241 org_repo_scm = org_repo.scm_instance
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2810
diff changeset
242 other_repo_scm = other_repo.scm_instance
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2810
diff changeset
243
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2810
diff changeset
244 alias = org_repo.scm_instance.alias
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2810
diff changeset
245 cs_ranges = self._get_changesets(alias,
bf96fd1920c1 Enabled compare engine for tags
Marcin Kuzminski <marcin@python-works.com>
parents: 2810
diff changeset
246 org_repo_scm, org_ref,
3192
b9105d31e582 refactoring: drop unused 'discovery data' in pull request and compare diffs
Mads Kiilerich <madski@unity3d.com>
parents: 3175
diff changeset
247 other_repo_scm, other_ref)
b9105d31e582 refactoring: drop unused 'discovery data' in pull request and compare diffs
Mads Kiilerich <madski@unity3d.com>
parents: 3175
diff changeset
248 return cs_ranges