Mercurial > kallithea
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 |
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 |