annotate rhodecode/controllers/pullrequests.py @ 4053:3625fd19b201

pull requests: add a 'Calculated' comment on current_changeset_status
author Mads Kiilerich <madski@unity3d.com>
date Wed, 12 Jun 2013 02:13:05 +0200
parents a7b7526c7f7c
children a2218bdbf45d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2244
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
2 """
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
3 rhodecode.controllers.pullrequests
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
5
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
6 pull requests controller for rhodecode for initializing pull requests
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
7
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
8 :created_on: May 7, 2012
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
9 :author: marcink
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
11 :license: GPLv3, see COPYING for more details.
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
12 """
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
13 # This program is free software: you can redistribute it and/or modify
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
14 # it under the terms of the GNU General Public License as published by
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
15 # the Free Software Foundation, either version 3 of the License, or
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
16 # (at your option) any later version.
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
17 #
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
18 # This program is distributed in the hope that it will be useful,
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
21 # GNU General Public License for more details.
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
22 #
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
23 # You should have received a copy of the GNU General Public License
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
25 import logging
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
26 import traceback
2711
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
27 import formencode
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
28
2489
a0adf8db1416 Enabled inline comments in pull-requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
29 from webob.exc import HTTPNotFound, HTTPForbidden
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
30 from collections import defaultdict
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
31 from itertools import groupby
2244
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
32
3941
3208aaefc9ca Moved all Mercurial imports into hgcompat from vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
33 from pylons import request, tmpl_context as c, url
3208aaefc9ca Moved all Mercurial imports into hgcompat from vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
34 from pylons.controllers.util import redirect
2244
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
35 from pylons.i18n.translation import _
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
36
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2533
diff changeset
37 from rhodecode.lib.compat import json
2244
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
38 from rhodecode.lib.base import BaseRepoController, render
2612
9364776d1331 Added autocomplete widget for pull request reviewers, in exchange of 90s style
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
39 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\
9364776d1331 Added autocomplete widget for pull request reviewers, in exchange of 90s style
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
40 NotAnonymous
3676
9d2db665ef31 pagination in pull-requests page + UI
Marcin Kuzminski <marcin@python-works.com>
parents: 3654
diff changeset
41 from rhodecode.lib.helpers import Page
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2395
diff changeset
42 from rhodecode.lib import helpers as h
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
43 from rhodecode.lib import diffs
3061
7727faad5baf fixed issue #671 commenting on pull requests sometimes used old JSON encoder and broke. This changeset replaces it's with RhodeCode json encoder to ensure all data is properly serializable
Marcin Kuzminski <marcin@python-works.com>
parents: 3023
diff changeset
44 from rhodecode.lib.utils import action_logger, jsonify
3718
b2575bdb847c diffs: drop diffs.differ
Mads Kiilerich <madski@unity3d.com>
parents: 3676
diff changeset
45 from rhodecode.lib.vcs.utils import safe_str
3061
7727faad5baf fixed issue #671 commenting on pull requests sometimes used old JSON encoder and broke. This changeset replaces it's with RhodeCode json encoder to ensure all data is properly serializable
Marcin Kuzminski <marcin@python-works.com>
parents: 3023
diff changeset
46 from rhodecode.lib.vcs.exceptions import EmptyRepositoryError
7727faad5baf fixed issue #671 commenting on pull requests sometimes used old JSON encoder and broke. This changeset replaces it's with RhodeCode json encoder to ensure all data is properly serializable
Marcin Kuzminski <marcin@python-works.com>
parents: 3023
diff changeset
47 from rhodecode.lib.diffs import LimitedDiffContainer
3941
3208aaefc9ca Moved all Mercurial imports into hgcompat from vcs
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
48 from rhodecode.model.db import PullRequest, ChangesetStatus, ChangesetComment
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2395
diff changeset
49 from rhodecode.model.pull_request import PullRequestModel
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2395
diff changeset
50 from rhodecode.model.meta import Session
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
51 from rhodecode.model.repo import RepoModel
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
52 from rhodecode.model.comment import ChangesetCommentsModel
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
53 from rhodecode.model.changeset_status import ChangesetStatusModel
2711
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
54 from rhodecode.model.forms import PullRequestForm
3676
9d2db665ef31 pagination in pull-requests page + UI
Marcin Kuzminski <marcin@python-works.com>
parents: 3654
diff changeset
55 from rhodecode.lib.utils2 import safe_int
2244
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
56
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
57 log = logging.getLogger(__name__)
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
58
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
59
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
60 class PullrequestsController(BaseRepoController):
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
61
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
62 def __before__(self):
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
63 super(PullrequestsController, self).__before__()
2612
9364776d1331 Added autocomplete widget for pull request reviewers, in exchange of 90s style
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
64 repo_model = RepoModel()
9364776d1331 Added autocomplete widget for pull request reviewers, in exchange of 90s style
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
65 c.users_array = repo_model.get_users_js()
9364776d1331 Added autocomplete widget for pull request reviewers, in exchange of 90s style
Marcin Kuzminski <marcin@python-works.com>
parents: 2608
diff changeset
66 c.users_groups_array = repo_model.get_users_groups_js()
2244
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
67
3813
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
68 def _get_repo_refs(self, repo, rev=None, branch=None, branch_rev=None):
3444
c12603d5ee13 pullrequests: refactor changeset selectors, tip is special and not a real tag
Mads Kiilerich <madski@unity3d.com>
parents: 3442
diff changeset
69 """return a structure with repo's interesting changesets, suitable for
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
70 the selectors in pullrequest.html
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
71
3813
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
72 rev: a revision that must be in the list somehow and selected by default
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
73 branch: a branch that must be in the list and selected by default - even if closed
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
74 branch_rev: a revision of which peers should be preferred and available."""
3515
5b3313a5c6fc pullrequest selection list: emphasize named branches that are neighbours
Mads Kiilerich <madski@unity3d.com>
parents: 3486
diff changeset
75 # list named branches that has been merged to this named branch - it should probably merge back
3598
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
76 peers = []
3719
3534e75b2d5b pullrequests: don't pass unicode strings to Mercurial
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
77
3534e75b2d5b pullrequests: don't pass unicode strings to Mercurial
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
78 if rev:
3534e75b2d5b pullrequests: don't pass unicode strings to Mercurial
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
79 rev = safe_str(rev)
3534e75b2d5b pullrequests: don't pass unicode strings to Mercurial
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
80
3813
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
81 if branch:
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
82 branch = safe_str(branch)
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
83
3515
5b3313a5c6fc pullrequest selection list: emphasize named branches that are neighbours
Mads Kiilerich <madski@unity3d.com>
parents: 3486
diff changeset
84 if branch_rev:
3719
3534e75b2d5b pullrequests: don't pass unicode strings to Mercurial
Mads Kiilerich <madski@unity3d.com>
parents: 3718
diff changeset
85 branch_rev = safe_str(branch_rev)
3515
5b3313a5c6fc pullrequest selection list: emphasize named branches that are neighbours
Mads Kiilerich <madski@unity3d.com>
parents: 3486
diff changeset
86 # not restricting to merge() would also get branch point and be better
5b3313a5c6fc pullrequest selection list: emphasize named branches that are neighbours
Mads Kiilerich <madski@unity3d.com>
parents: 3486
diff changeset
87 # (especially because it would get the branch point) ... but is currently too expensive
5b3313a5c6fc pullrequest selection list: emphasize named branches that are neighbours
Mads Kiilerich <madski@unity3d.com>
parents: 3486
diff changeset
88 otherbranches = {}
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
89 for i in repo._repo.revs(
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
90 "sort(parents(branch(id(%s)) and merge()) - branch(id(%s)))",
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
91 branch_rev, branch_rev):
3515
5b3313a5c6fc pullrequest selection list: emphasize named branches that are neighbours
Mads Kiilerich <madski@unity3d.com>
parents: 3486
diff changeset
92 cs = repo.get_changeset(i)
5b3313a5c6fc pullrequest selection list: emphasize named branches that are neighbours
Mads Kiilerich <madski@unity3d.com>
parents: 3486
diff changeset
93 otherbranches[cs.branch] = cs.raw_id
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
94 for abranch, node in otherbranches.iteritems():
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
95 selected = 'branch:%s:%s' % (abranch, node)
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
96 peers.append((selected, abranch))
3598
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
97
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
98 selected = None
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
99
3598
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
100 branches = []
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
101 for abranch, branchrev in repo.branches.iteritems():
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
102 n = 'branch:%s:%s' % (abranch, branchrev)
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
103 branches.append((n, abranch))
3598
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
104 if rev == branchrev:
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
105 selected = n
3813
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
106 if branch == abranch:
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
107 selected = n
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
108 branch = None
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
109 if branch: # branch not in list - it is probably closed
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
110 revs = repo._repo.revs('max(branch(%s))', branch)
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
111 if revs:
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
112 cs = repo.get_changeset(revs[0])
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
113 selected = 'branch:%s:%s' % (branch, cs.raw_id)
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
114 branches.append((selected, branch))
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
115
3598
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
116 bookmarks = []
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
117 for bookmark, bookmarkrev in repo.bookmarks.iteritems():
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
118 n = 'book:%s:%s' % (bookmark, bookmarkrev)
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
119 bookmarks.append((n, bookmark))
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
120 if rev == bookmarkrev:
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
121 selected = n
3811
3591b33e0c94 hg: use 'revset injection safe' repo.revs for revsets
Mads Kiilerich <madski@unity3d.com>
parents: 3785
diff changeset
122
3598
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
123 tags = []
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
124 for tag, tagrev in repo.tags.iteritems():
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
125 n = 'tag:%s:%s' % (tag, tagrev)
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
126 tags.append((n, tag))
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
127 if rev == tagrev and tag != 'tip': # tip is not a real tag - and its branch is better
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
128 selected = n
2244
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
129
3598
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
130 # prio 1: rev was selected as existing entry above
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
131
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
132 # prio 2: create special entry for rev; rev _must_ be used
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
133 specials = []
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
134 if rev and selected is None:
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
135 selected = 'rev:%s:%s' % (rev, rev)
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
136 specials = [(selected, '%s: %s' % (_("Changeset"), rev[:12]))]
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
137
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
138 # prio 3: most recent peer branch
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
139 if peers and not selected:
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
140 selected = peers[0][0][0]
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
141
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
142 # prio 4: tip revision
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
143 if not selected:
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
144 selected = 'tag:tip:%s' % repo.tags['tip']
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
145
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
146 groups = [(specials, _("Special")),
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
147 (peers, _("Peer branches")),
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
148 (bookmarks, _("Bookmarks")),
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
149 (branches, _("Branches")),
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
150 (tags, _("Tags")),
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
151 ]
7d774f09dba5 pullrequests: only create special select entry for a changeset if it has no symbolic name
Mads Kiilerich <madski@unity3d.com>
parents: 3597
diff changeset
152 return [g for g in groups if g[0]], selected
2849
2b672f04bfd9 fixed few issues with autoselection of revisions on pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2803
diff changeset
153
3104
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
154 def _get_is_allowed_change_status(self, pull_request):
3149
68f9c216377d white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3141
diff changeset
155 owner = self.rhodecode_user.user_id == pull_request.user_id
3104
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
156 reviewer = self.rhodecode_user.user_id in [x.user_id for x in
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
157 pull_request.reviewers]
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
158 return (self.rhodecode_user.admin or owner or reviewer)
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
159
2608
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
160 def _load_compare_data(self, pull_request, enable_comments=True):
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
161 """
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 Load context data needed for generating compare diff
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
163
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
164 :param pull_request:
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 """
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
166 org_repo = pull_request.org_repo
2711
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
167 (org_ref_type,
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
168 org_ref_name,
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
169 org_ref_rev) = pull_request.org_ref.split(':')
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
170
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
171 other_repo = org_repo
2711
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
172 (other_ref_type,
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
173 other_ref_name,
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
174 other_ref_rev) = pull_request.other_ref.split(':')
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
175
2720
0f7355d3c196 Load generated revs while switching to other sources of pull-requests.
Marcin Kuzminski <marcin@python-works.com>
parents: 2712
diff changeset
176 # despite opening revisions for bookmarks/branches/tags, we always
3484
75e563531350 compare: drop unused rev_start and rev_end
Mads Kiilerich <madski@unity3d.com>
parents: 3447
diff changeset
177 # convert this to rev to prevent changes after bookmark or branch change
2711
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
178 org_ref = ('rev', org_ref_rev)
1de45f582f9d added more validations when opening pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 2627
diff changeset
179 other_ref = ('rev', other_ref_rev)
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
180
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
181 c.org_repo = org_repo
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
182 c.other_repo = other_repo
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
183
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
184 c.fulldiff = fulldiff = request.GET.get('fulldiff')
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
185
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
186 c.cs_ranges = [org_repo.get_changeset(x) for x in pull_request.revisions]
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
187
2803
0b2214604c74 Fixed status of changesets in preview windows
Marcin Kuzminski <marcin@python-works.com>
parents: 2796
diff changeset
188 c.statuses = org_repo.statuses([x.raw_id for x in c.cs_ranges])
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
189
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
190 c.org_ref = org_ref[1]
3357
674a8fad3abc show links to files on compare data at other and org refs
Marcin Kuzminski <marcin@python-works.com>
parents: 3330
diff changeset
191 c.org_ref_type = org_ref[0]
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
192 c.other_ref = other_ref[1]
3357
674a8fad3abc show links to files on compare data at other and org refs
Marcin Kuzminski <marcin@python-works.com>
parents: 3330
diff changeset
193 c.other_ref_type = other_ref[0]
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
194
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
195 diff_limit = self.cut_off_limit if not fulldiff else None
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
196
3739
41b0e2b92283 pullrequests: fix reversed diff
Mads Kiilerich <madski@unity3d.com>
parents: 3720
diff changeset
197 # we swap org/other ref since we run a simple diff on one repo
3812
4324d6899e55 diff: cleanup of variables and logging in compare and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 3811
diff changeset
198 log.debug('running diff between %s and %s in %s'
4324d6899e55 diff: cleanup of variables and logging in compare and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 3811
diff changeset
199 % (other_ref, org_ref, org_repo.scm_instance.path))
4324d6899e55 diff: cleanup of variables and logging in compare and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 3811
diff changeset
200 txtdiff = org_repo.scm_instance.get_diff(rev1=safe_str(other_ref[1]), rev2=safe_str(org_ref[1]))
3015
16af24982e30 Multiple changes for compare system
Marcin Kuzminski <marcin@python-works.com>
parents: 2995
diff changeset
201
3812
4324d6899e55 diff: cleanup of variables and logging in compare and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 3811
diff changeset
202 diff_processor = diffs.DiffProcessor(txtdiff or '', format='gitdiff',
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
203 diff_limit=diff_limit)
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
204 _parsed = diff_processor.prepare()
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
205
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
206 c.limited_diff = False
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
207 if isinstance(_parsed, LimitedDiffContainer):
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
208 c.limited_diff = True
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
209
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
210 c.files = []
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
211 c.changes = {}
3825
3306bdd95f11 bring back accidentally deleted context variables with lines added
Marcin Kuzminski <marcin@python-works.com>
parents: 3821
diff changeset
212 c.lines_added = 0
3306bdd95f11 bring back accidentally deleted context variables with lines added
Marcin Kuzminski <marcin@python-works.com>
parents: 3821
diff changeset
213 c.lines_deleted = 0
3306bdd95f11 bring back accidentally deleted context variables with lines added
Marcin Kuzminski <marcin@python-works.com>
parents: 3821
diff changeset
214
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
215 for f in _parsed:
3023
c2a206162062 Basic implementation of cherry picking changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3015
diff changeset
216 st = f['stats']
3821
ce4b7023a492 diff parser: redefined operations stats for changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3813
diff changeset
217 c.lines_added += st['added']
ce4b7023a492 diff parser: redefined operations stats for changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3813
diff changeset
218 c.lines_deleted += st['deleted']
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
219 fid = h.FID('', f['filename'])
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
220 c.files.append([fid, f['operation'], f['filename'], f['stats']])
3812
4324d6899e55 diff: cleanup of variables and logging in compare and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 3811
diff changeset
221 htmldiff = diff_processor.as_html(enable_comments=enable_comments,
4324d6899e55 diff: cleanup of variables and logging in compare and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 3811
diff changeset
222 parsed_lines=[f])
4324d6899e55 diff: cleanup of variables and logging in compare and pullrequests
Mads Kiilerich <madski@unity3d.com>
parents: 3811
diff changeset
223 c.changes[fid] = [f['operation'], f['filename'], htmldiff]
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
224
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
225 @LoginRequired()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
226 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
227 'repository.admin')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
228 def show_all(self, repo_name):
4024
73ef2a5d3042 pull requests: make it possible control display of closed PRs and whether it is PRs to or from repo
Mads Kiilerich <madski@unity3d.com>
parents: 3978
diff changeset
229 c.from_ = request.GET.get('from_') or ''
73ef2a5d3042 pull requests: make it possible control display of closed PRs and whether it is PRs to or from repo
Mads Kiilerich <madski@unity3d.com>
parents: 3978
diff changeset
230 c.closed = request.GET.get('closed') or ''
73ef2a5d3042 pull requests: make it possible control display of closed PRs and whether it is PRs to or from repo
Mads Kiilerich <madski@unity3d.com>
parents: 3978
diff changeset
231 c.pull_requests = PullRequestModel().get_all(repo_name, from_=c.from_, closed=c.closed)
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
232 c.repo_name = repo_name
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
233 p = safe_int(request.GET.get('page', 1), 1)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
234
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
235 c.pullrequests_pager = Page(c.pull_requests, page=p, items_per_page=10)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
236
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
237 c.pullrequest_data = render('/pullrequests/pullrequest_data.html')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
238
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
239 if request.environ.get('HTTP_X_PARTIAL_XHR'):
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
240 return c.pullrequest_data
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
241
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
242 return render('/pullrequests/pullrequest_show_all.html')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
243
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
244 @LoginRequired()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
245 @NotAnonymous()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
246 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
247 'repository.admin')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
248 def index(self):
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
249 org_repo = c.rhodecode_db_repo
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
250
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
251 if org_repo.scm_instance.alias != 'hg':
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
252 log.error('Review not available for GIT REPOS')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
253 raise HTTPNotFound
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
254
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
255 try:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
256 org_repo.scm_instance.get_changeset()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
257 except EmptyRepositoryError, e:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
258 h.flash(h.literal(_('There are no changesets yet')),
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
259 category='warning')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
260 redirect(url('summary_home', repo_name=org_repo.repo_name))
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
261
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
262 org_rev = request.GET.get('rev_end')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
263 # rev_start is not directly useful - its parent could however be used
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
264 # as default for other and thus give a simple compare view
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
265 #other_rev = request.POST.get('rev_start')
3813
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
266 branch = request.GET.get('branch')
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
267
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
268 c.org_repos = []
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
269 c.org_repos.append((org_repo.repo_name, org_repo.repo_name))
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
270 c.default_org_repo = org_repo.repo_name
3813
dca89d578c70 pull requests: use branch name when creating PRs from a changelog with branch filter
Mads Kiilerich <madski@unity3d.com>
parents: 3812
diff changeset
271 c.org_refs, c.default_org_ref = self._get_repo_refs(org_repo.scm_instance, rev=org_rev, branch=branch)
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
272
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
273 c.other_repos = []
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
274 other_repos_info = {}
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
275
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
276 def add_other_repo(repo, branch_rev=None):
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
277 if repo.repo_name in other_repos_info: # shouldn't happen
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
278 return
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
279 c.other_repos.append((repo.repo_name, repo.repo_name))
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
280 other_refs, selected_other_ref = self._get_repo_refs(repo.scm_instance, branch_rev=branch_rev)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
281 other_repos_info[repo.repo_name] = {
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
282 'user': dict(user_id=repo.user.user_id,
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
283 username=repo.user.username,
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
284 firstname=repo.user.firstname,
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
285 lastname=repo.user.lastname,
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
286 gravatar_link=h.gravatar_url(repo.user.email, 14)),
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
287 'description': repo.description.split('\n', 1)[0],
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
288 'revs': h.select('other_ref', selected_other_ref, other_refs, class_='refs')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
289 }
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
290
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
291 # add org repo to other so we can open pull request against peer branches on itself
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
292 add_other_repo(org_repo, branch_rev=org_rev)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
293 c.default_other_repo = org_repo.repo_name
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
294
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
295 # gather forks and add to this list ... even though it is rare to
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
296 # request forks to pull from their parent
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
297 for fork in org_repo.forks:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
298 add_other_repo(fork)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
299
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
300 # add parents of this fork also, but only if it's not empty
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
301 if org_repo.parent and org_repo.parent.scm_instance.revisions:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
302 add_other_repo(org_repo.parent)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
303 c.default_other_repo = org_repo.parent.repo_name
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
304
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
305 c.default_other_repo_info = other_repos_info[c.default_other_repo]
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
306 c.other_repos_info = json.dumps(other_repos_info)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
307
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
308 return render('/pullrequests/pullrequest.html')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
309
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
310 @LoginRequired()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
311 @NotAnonymous()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
312 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
313 'repository.admin')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
314 def create(self, repo_name):
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
315 repo = RepoModel()._get_repo(repo_name)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
316 try:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
317 _form = PullRequestForm(repo.repo_id)().to_python(request.POST)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
318 except formencode.Invalid, errors:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
319 log.error(traceback.format_exc())
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
320 if errors.error_dict.get('revisions'):
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
321 msg = 'Revisions: %s' % errors.error_dict['revisions']
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
322 elif errors.error_dict.get('pullrequest_title'):
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
323 msg = _('Pull request requires a title with min. 3 chars')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
324 else:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
325 msg = _('Error creating pull request')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
326
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
327 h.flash(msg, 'error')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
328 return redirect(url('pullrequest_home', repo_name=repo_name))
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
329
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
330 org_repo = _form['org_repo']
3978
4f31439c90d3 pull requests: use org_ref with correct symbolic name instead of fake one
Mads Kiilerich <madski@unity3d.com>
parents: 3960
diff changeset
331 org_ref = _form['org_ref'] # will end with merge_rev but have symbolic name
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
332 other_repo = _form['other_repo']
3978
4f31439c90d3 pull requests: use org_ref with correct symbolic name instead of fake one
Mads Kiilerich <madski@unity3d.com>
parents: 3960
diff changeset
333 other_ref = 'rev:ancestor:%s' % _form['ancestor_rev'] # could be calculated from other_ref ...
3785
7d8154837174 create a list out of generator.
Marcin Kuzminski <marcin@python-works.com>
parents: 3749
diff changeset
334 revisions = [x for x in reversed(_form['revisions'])]
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
335 reviewers = _form['review_members']
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
336
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
337 title = _form['pullrequest_title']
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
338 description = _form['pullrequest_desc']
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
339 try:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
340 pull_request = PullRequestModel().create(
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
341 self.rhodecode_user.user_id, org_repo, org_ref, other_repo,
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
342 other_ref, revisions, reviewers, title, description
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
343 )
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
344 Session().commit()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
345 h.flash(_('Successfully opened new pull request'),
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
346 category='success')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
347 except Exception:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
348 h.flash(_('Error occurred during sending pull request'),
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
349 category='error')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
350 log.error(traceback.format_exc())
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
351 return redirect(url('pullrequest_home', repo_name=repo_name))
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
352
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
353 return redirect(url('pullrequest_show', repo_name=other_repo,
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
354 pull_request_id=pull_request.pull_request_id))
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
355
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
356 @LoginRequired()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
357 @NotAnonymous()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
358 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
359 'repository.admin')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
360 @jsonify
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
361 def update(self, repo_name, pull_request_id):
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
362 pull_request = PullRequest.get_or_404(pull_request_id)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
363 if pull_request.is_closed():
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
364 raise HTTPForbidden()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
365 #only owner or admin can update it
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
366 owner = pull_request.author.user_id == c.rhodecode_user.user_id
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
367 if h.HasPermissionAny('hg.admin', 'repository.admin')() or owner:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
368 reviewers_ids = map(int, filter(lambda v: v not in [None, ''],
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
369 request.POST.get('reviewers_ids', '').split(',')))
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
370
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
371 PullRequestModel().update_reviewers(pull_request_id, reviewers_ids)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
372 Session().commit()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
373 return True
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
374 raise HTTPForbidden()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
375
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
376 @LoginRequired()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
377 @NotAnonymous()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
378 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
379 'repository.admin')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
380 @jsonify
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
381 def delete(self, repo_name, pull_request_id):
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
382 pull_request = PullRequest.get_or_404(pull_request_id)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
383 #only owner can delete it !
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
384 if pull_request.author.user_id == c.rhodecode_user.user_id:
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
385 PullRequestModel().delete(pull_request)
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
386 Session().commit()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
387 h.flash(_('Successfully deleted pull request'),
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
388 category='success')
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
389 return redirect(url('admin_settings_my_account', anchor='pullrequests'))
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
390 raise HTTPForbidden()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
391
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
392 @LoginRequired()
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
393 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
394 'repository.admin')
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2395
diff changeset
395 def show(self, repo_name, pull_request_id):
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
396 repo_model = RepoModel()
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
397 c.users_array = repo_model.get_users_js()
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
398 c.users_groups_array = repo_model.get_users_groups_js()
2496
fddd8e3fc157 use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents: 2489
diff changeset
399 c.pull_request = PullRequest.get_or_404(pull_request_id)
3104
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
400 c.allowed_to_change_status = self._get_is_allowed_change_status(c.pull_request)
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
401 cc_model = ChangesetCommentsModel()
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
402 cs_model = ChangesetStatusModel()
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
403 _cs_statuses = cs_model.get_statuses(c.pull_request.org_repo,
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
404 pull_request=c.pull_request,
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
405 with_revisions=True)
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
406
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
407 cs_statuses = defaultdict(list)
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
408 for st in _cs_statuses:
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
409 cs_statuses[st.author.username] += [st]
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
410
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
411 c.pull_request_reviewers = []
2712
7224882c4059 new summary for opened pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2711
diff changeset
412 c.pull_request_pending_reviewers = []
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
413 for o in c.pull_request.reviewers:
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
414 st = cs_statuses.get(o.user.username, None)
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
415 if st:
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
416 sorter = lambda k: k.version
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
417 st = [(x, list(y)[0])
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
418 for x, y in (groupby(sorted(st, key=sorter), sorter))]
2712
7224882c4059 new summary for opened pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2711
diff changeset
419 else:
7224882c4059 new summary for opened pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2711
diff changeset
420 c.pull_request_pending_reviewers.append(o.user)
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
421 c.pull_request_reviewers.append([o.user, st])
2444
b45e9fd75ac0 data checks
Marcin Kuzminski <marcin@python-works.com>
parents: 2443
diff changeset
422
b45e9fd75ac0 data checks
Marcin Kuzminski <marcin@python-works.com>
parents: 2443
diff changeset
423 # pull_requests repo_name we opened it against
b45e9fd75ac0 data checks
Marcin Kuzminski <marcin@python-works.com>
parents: 2443
diff changeset
424 # ie. other_repo must match
b45e9fd75ac0 data checks
Marcin Kuzminski <marcin@python-works.com>
parents: 2443
diff changeset
425 if repo_name != c.pull_request.other_repo.repo_name:
b45e9fd75ac0 data checks
Marcin Kuzminski <marcin@python-works.com>
parents: 2443
diff changeset
426 raise HTTPNotFound
b45e9fd75ac0 data checks
Marcin Kuzminski <marcin@python-works.com>
parents: 2443
diff changeset
427
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
428 # load compare data into template context
2608
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
429 enable_comments = not c.pull_request.is_closed()
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
430 self._load_compare_data(c.pull_request, enable_comments=enable_comments)
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
431
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
432 # inline comments
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
433 c.inline_cnt = 0
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
434 c.inline_comments = cc_model.get_inline_comments(
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
435 c.rhodecode_db_repo.repo_id,
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
436 pull_request=pull_request_id)
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
437 # count inline comments
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
438 for __, lines in c.inline_comments:
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
439 for comments in lines.values():
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
440 c.inline_cnt += len(comments)
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
441 # comments
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
442 c.comments = cc_model.get_comments(c.rhodecode_db_repo.repo_id,
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
443 pull_request=pull_request_id)
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
444
4053
3625fd19b201 pull requests: add a 'Calculated' comment on current_changeset_status
Mads Kiilerich <madski@unity3d.com>
parents: 4052
diff changeset
445 # (badly named) pull-request status calculation based on reviewer votes
4052
a7b7526c7f7c pullrequests: drop unused status calculation introduced in 0b2214604c74
Mads Kiilerich <madski@unity3d.com>
parents: 4024
diff changeset
446 c.current_changeset_status = cs_model.calculate_status(
a7b7526c7f7c pullrequests: drop unused status calculation introduced in 0b2214604c74
Mads Kiilerich <madski@unity3d.com>
parents: 4024
diff changeset
447 c.pull_request_reviewers,
2803
0b2214604c74 Fixed status of changesets in preview windows
Marcin Kuzminski <marcin@python-works.com>
parents: 2796
diff changeset
448 )
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
449 c.changeset_statuses = ChangesetStatus.STATUSES
2803
0b2214604c74 Fixed status of changesets in preview windows
Marcin Kuzminski <marcin@python-works.com>
parents: 2796
diff changeset
450
3442
b3680a200f75 compare: cleanup of as_form handling
Mads Kiilerich <madski@unity3d.com>
parents: 3430
diff changeset
451 c.as_form = False
3486
2053053e0882 compare/pullrequest: introduce merge parameter
Mads Kiilerich <madski@unity3d.com>
parents: 3485
diff changeset
452 c.ancestor = None # there is one - but right here we don't know which
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2395
diff changeset
453 return render('/pullrequests/pullrequest_show.html')
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
454
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
455 @LoginRequired()
2627
6bd62617b99f Opening pull request shouldn't be accessible by anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents: 2614
diff changeset
456 @NotAnonymous()
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
457 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
458 'repository.admin')
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
459 @jsonify
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
460 def comment(self, repo_name, pull_request_id):
2608
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
461 pull_request = PullRequest.get_or_404(pull_request_id)
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
462 if pull_request.is_closed():
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
463 raise HTTPForbidden()
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
464
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
465 status = request.POST.get('changeset_status')
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
466 change_status = request.POST.get('change_changeset_status')
2796
bf3c976d02ec always post text about status changes of code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 2769
diff changeset
467 text = request.POST.get('text')
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3394
diff changeset
468 close_pr = request.POST.get('save_close')
3104
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
469
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
470 allowed_to_change_status = self._get_is_allowed_change_status(pull_request)
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
471 if status and change_status and allowed_to_change_status:
3654
ec6354949623 Fix a lot of casings - use standard casing in most places
Mads Kiilerich <madski@unity3d.com>
parents: 3631
diff changeset
472 _def = (_('Status change -> %s')
2796
bf3c976d02ec always post text about status changes of code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 2769
diff changeset
473 % ChangesetStatus.get_status_lbl(status))
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3394
diff changeset
474 if close_pr:
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3394
diff changeset
475 _def = _('Closing with') + ' ' + _def
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3394
diff changeset
476 text = text or _def
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
477 comm = ChangesetCommentsModel().create(
2796
bf3c976d02ec always post text about status changes of code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 2769
diff changeset
478 text=text,
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2533
diff changeset
479 repo=c.rhodecode_db_repo.repo_id,
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2533
diff changeset
480 user=c.rhodecode_user.user_id,
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
481 pull_request=pull_request_id,
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
482 f_path=request.POST.get('f_path'),
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
483 line_no=request.POST.get('line'),
2478
8eab81115660 white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2444
diff changeset
484 status_change=(ChangesetStatus.get_status_lbl(status)
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3394
diff changeset
485 if status and change_status
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3394
diff changeset
486 and allowed_to_change_status else None),
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3394
diff changeset
487 closing_pr=close_pr
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
488 )
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
489
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
490 action_logger(self.rhodecode_user,
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
491 'user_commented_pull_request:%s' % pull_request_id,
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
492 c.rhodecode_db_repo, self.ip_addr, self.sa)
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
493
3104
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
494 if allowed_to_change_status:
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
495 # get status if set !
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
496 if status and change_status:
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
497 ChangesetStatusModel().set_status(
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
498 c.rhodecode_db_repo.repo_id,
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
499 status,
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
500 c.rhodecode_user.user_id,
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
501 comm,
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
502 pull_request=pull_request_id
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
503 )
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
504
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3394
diff changeset
505 if close_pr:
3104
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
506 if status in ['rejected', 'approved']:
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
507 PullRequestModel().close_pull_request(pull_request_id)
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
508 action_logger(self.rhodecode_user,
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
509 'user_closed_pull_request:%s' % pull_request_id,
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
510 c.rhodecode_db_repo, self.ip_addr, self.sa)
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
511 else:
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
512 h.flash(_('Closing pull request on other statuses than '
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
513 'rejected or approved forbidden'),
c77d5c6358eb Implemented #670 Implementation of Roles in Pull Request
Marcin Kuzminski <marcin@python-works.com>
parents: 3103
diff changeset
514 category='warning')
2608
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
515
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2533
diff changeset
516 Session().commit()
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
517
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
518 if not request.environ.get('HTTP_X_PARTIAL_XHR'):
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
519 return redirect(h.url('pullrequest_show', repo_name=repo_name,
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
520 pull_request_id=pull_request_id))
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
521
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
522 data = {
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
523 'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))),
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
524 }
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
525 if comm:
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
526 c.co = comm
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
527 data.update(comm.get_dict())
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
528 data.update({'rendered_text':
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
529 render('changeset/changeset_comment_block.html')})
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2442
diff changeset
530
2444
b45e9fd75ac0 data checks
Marcin Kuzminski <marcin@python-works.com>
parents: 2443
diff changeset
531 return data
2489
a0adf8db1416 Enabled inline comments in pull-requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
532
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
533 @LoginRequired()
2627
6bd62617b99f Opening pull request shouldn't be accessible by anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents: 2614
diff changeset
534 @NotAnonymous()
3749
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
535 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
b950b884ab87 auth decorators are not used anymore on __before__
Marcin Kuzminski <marcin@python-works.com>
parents: 3748
diff changeset
536 'repository.admin')
2489
a0adf8db1416 Enabled inline comments in pull-requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
537 @jsonify
a0adf8db1416 Enabled inline comments in pull-requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
538 def delete_comment(self, repo_name, comment_id):
a0adf8db1416 Enabled inline comments in pull-requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
539 co = ChangesetComment.get(comment_id)
2608
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
540 if co.pull_request.is_closed():
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
541 #don't allow deleting comments on closed pull request
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
542 raise HTTPForbidden()
58c529332e7e Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents: 2570
diff changeset
543
3141
a45191e7c7bb access control: fix owner checks - they were always true
Mads Kiilerich <madski@unity3d.com>
parents: 3123
diff changeset
544 owner = co.author.user_id == c.rhodecode_user.user_id
2489
a0adf8db1416 Enabled inline comments in pull-requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
545 if h.HasPermissionAny('hg.admin', 'repository.admin')() or owner:
a0adf8db1416 Enabled inline comments in pull-requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
546 ChangesetCommentsModel().delete(comment=co)
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2533
diff changeset
547 Session().commit()
2489
a0adf8db1416 Enabled inline comments in pull-requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
548 return True
a0adf8db1416 Enabled inline comments in pull-requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2487
diff changeset
549 else:
2614
3f50a5e8fc4d Added editing of pull-request reviewers.
Marcin Kuzminski <marcin@python-works.com>
parents: 2612
diff changeset
550 raise HTTPForbidden()