Show More
@@ -24,6 +24,7 b'' | |||
|
24 | 24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
25 | 25 | import logging |
|
26 | 26 | import traceback |
|
27 | import formencode | |
|
27 | 28 | |
|
28 | 29 | from webob.exc import HTTPNotFound, HTTPForbidden |
|
29 | 30 | from collections import defaultdict |
@@ -48,6 +49,7 b' from rhodecode.model.meta import Session' | |||
|
48 | 49 | from rhodecode.model.repo import RepoModel |
|
49 | 50 | from rhodecode.model.comment import ChangesetCommentsModel |
|
50 | 51 | from rhodecode.model.changeset_status import ChangesetStatusModel |
|
52 | from rhodecode.model.forms import PullRequestForm | |
|
51 | 53 | |
|
52 | 54 | log = logging.getLogger(__name__) |
|
53 | 55 | |
@@ -138,18 +140,31 b' class PullrequestsController(BaseRepoCon' | |||
|
138 | 140 | |
|
139 | 141 | @NotAnonymous() |
|
140 | 142 | def create(self, repo_name): |
|
141 | req_p = request.POST | |
|
142 | org_repo = req_p['org_repo'] | |
|
143 | org_ref = req_p['org_ref'] | |
|
144 | other_repo = req_p['other_repo'] | |
|
145 | other_ref = req_p['other_ref'] | |
|
146 | revisions = req_p.getall('revisions') | |
|
147 | reviewers = req_p.getall('review_members') | |
|
143 | ||
|
144 | try: | |
|
145 | _form = PullRequestForm()().to_python(request.POST) | |
|
146 | except formencode.Invalid, errors: | |
|
147 | log.error(traceback.format_exc()) | |
|
148 | if errors.error_dict.get('revisions'): | |
|
149 | msg = _('Cannot open a pull request with ' | |
|
150 | 'empty list of changesets') | |
|
151 | elif errors.error_dict.get('pullrequest_title'): | |
|
152 | msg = _('Pull request requires a title with min. 3 chars') | |
|
153 | else: | |
|
154 | msg = _('error during creation of pull request') | |
|
148 | 155 | |
|
149 | #TODO: wrap this into a FORM !!! | |
|
156 | h.flash(msg, 'error') | |
|
157 | return redirect(url('pullrequest_home', repo_name=repo_name)) | |
|
150 | 158 | |
|
151 | title = req_p['pullrequest_title'] | |
|
152 | description = req_p['pullrequest_desc'] | |
|
159 | org_repo = _form['org_repo'] | |
|
160 | org_ref = _form['org_ref'] | |
|
161 | other_repo = _form['other_repo'] | |
|
162 | other_ref = _form['other_ref'] | |
|
163 | revisions = _form['revisions'] | |
|
164 | reviewers = _form['review_members'] | |
|
165 | ||
|
166 | title = _form['pullrequest_title'] | |
|
167 | description = _form['pullrequest_desc'] | |
|
153 | 168 | |
|
154 | 169 | try: |
|
155 | 170 | pull_request = PullRequestModel().create( |
@@ -163,7 +178,7 b' class PullrequestsController(BaseRepoCon' | |||
|
163 | 178 | h.flash(_('Error occurred during sending pull request'), |
|
164 | 179 | category='error') |
|
165 | 180 | log.error(traceback.format_exc()) |
|
166 |
return redirect(url(' |
|
|
181 | return redirect(url('pullrequest_home', repo_name=repo_name)) | |
|
167 | 182 | |
|
168 | 183 | return redirect(url('pullrequest_show', repo_name=other_repo, |
|
169 | 184 | pull_request_id=pull_request.pull_request_id)) |
@@ -190,12 +205,19 b' class PullrequestsController(BaseRepoCon' | |||
|
190 | 205 | """ |
|
191 | 206 | |
|
192 | 207 | org_repo = pull_request.org_repo |
|
193 | org_ref_type, org_ref_, org_ref = pull_request.org_ref.split(':') | |
|
208 | (org_ref_type, | |
|
209 | org_ref_name, | |
|
210 | org_ref_rev) = pull_request.org_ref.split(':') | |
|
211 | ||
|
194 | 212 | other_repo = pull_request.other_repo |
|
195 | other_ref_type, other_ref, other_ref_ = pull_request.other_ref.split(':') | |
|
213 | (other_ref_type, | |
|
214 | other_ref_name, | |
|
215 | other_ref_rev) = pull_request.other_ref.split(':') | |
|
196 | 216 | |
|
197 | org_ref = (org_ref_type, org_ref) | |
|
198 | other_ref = (other_ref_type, other_ref) | |
|
217 | # dispite opening revisions for bookmarks/branches/tags, we always | |
|
218 | # convert this to rev to prevent changes after book or branch change | |
|
219 | org_ref = ('rev', org_ref_rev) | |
|
220 | other_ref = ('rev', other_ref_rev) | |
|
199 | 221 | |
|
200 | 222 | c.org_repo = org_repo |
|
201 | 223 | c.other_repo = other_repo |
@@ -321,3 +321,22 b' def UserExtraEmailForm():' | |||
|
321 | 321 | email = All(v.UniqSystemEmail(), v.Email) |
|
322 | 322 | |
|
323 | 323 | return _UserExtraEmailForm |
|
324 | ||
|
325 | ||
|
326 | def PullRequestForm(): | |
|
327 | class _PullRequestForm(formencode.Schema): | |
|
328 | allow_extra_fields = True | |
|
329 | filter_extra_fields = True | |
|
330 | ||
|
331 | user = v.UnicodeString(strip=True, required=True) | |
|
332 | org_repo = v.UnicodeString(strip=True, required=True) | |
|
333 | org_ref = v.UnicodeString(strip=True, required=True) | |
|
334 | other_repo = v.UnicodeString(strip=True, required=True) | |
|
335 | other_ref = v.UnicodeString(strip=True, required=True) | |
|
336 | revisions = v.Set(required=True) | |
|
337 | review_members = v.Set(required=True) | |
|
338 | ||
|
339 | pullrequest_title = v.UnicodeString(strip=True, required=True, min=3) | |
|
340 | pullrequest_desc = v.UnicodeString(strip=True, required=False) | |
|
341 | ||
|
342 | return _PullRequestForm No newline at end of file |
@@ -9,9 +9,8 b' from pylons.i18n.translation import _' | |||
|
9 | 9 | from webhelpers.pylonslib.secure_form import authentication_token |
|
10 | 10 | |
|
11 | 11 | from formencode.validators import ( |
|
12 | UnicodeString, OneOf, Int, Number, Regex, Email, Bool, StringBoolean, Set | |
|
12 | UnicodeString, OneOf, Int, Number, Regex, Email, Bool, StringBoolean, Set, | |
|
13 | 13 | ) |
|
14 | ||
|
15 | 14 | from rhodecode.lib.utils import repo_name_slug |
|
16 | 15 | from rhodecode.model.db import RepoGroup, Repository, UsersGroup, User |
|
17 | 16 | from rhodecode.lib.exceptions import LdapImportError |
General Comments 0
You need to be logged in to leave comments.
Login now