Mercurial > kallithea
comparison rhodecode/controllers/compare.py @ 2847:1cd0a0c05f42 beta
swap the select values with revisions dynamically when switching the repos on pull request view
- fix the partial ajax request that should never do redirect
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 19 Sep 2012 00:03:43 +0200 |
parents | 2b6939a77052 |
children | 5fba3778431c |
comparison
equal
deleted
inserted
replaced
2846:620669b2a88b | 2847:1cd0a0c05f42 |
---|---|
37 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | 37 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
38 from rhodecode.lib import diffs | 38 from rhodecode.lib import diffs |
39 | 39 |
40 from rhodecode.model.db import Repository | 40 from rhodecode.model.db import Repository |
41 from rhodecode.model.pull_request import PullRequestModel | 41 from rhodecode.model.pull_request import PullRequestModel |
42 from webob.exc import HTTPBadRequest | |
42 | 43 |
43 log = logging.getLogger(__name__) | 44 log = logging.getLogger(__name__) |
44 | 45 |
45 | 46 |
46 class CompareController(BaseRepoController): | 47 class CompareController(BaseRepoController): |
49 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | 50 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
50 'repository.admin') | 51 'repository.admin') |
51 def __before__(self): | 52 def __before__(self): |
52 super(CompareController, self).__before__() | 53 super(CompareController, self).__before__() |
53 | 54 |
54 def __get_cs_or_redirect(self, rev, repo, redirect_after=True): | 55 def __get_cs_or_redirect(self, rev, repo, redirect_after=True, |
56 partial=False): | |
55 """ | 57 """ |
56 Safe way to get changeset if error occur it redirects to changeset with | 58 Safe way to get changeset if error occur it redirects to changeset with |
57 proper message | 59 proper message. If partial is set then don't do redirect raise Exception |
60 instead | |
58 | 61 |
59 :param rev: revision to fetch | 62 :param rev: revision to fetch |
60 :param repo: repo instance | 63 :param repo: repo instance |
61 """ | 64 """ |
62 | 65 |
71 redirect(url('summary_home', repo_name=repo.repo_name)) | 74 redirect(url('summary_home', repo_name=repo.repo_name)) |
72 | 75 |
73 except RepositoryError, e: | 76 except RepositoryError, e: |
74 log.error(traceback.format_exc()) | 77 log.error(traceback.format_exc()) |
75 h.flash(str(e), category='warning') | 78 h.flash(str(e), category='warning') |
76 redirect(h.url('summary_home', repo_name=repo.repo_name)) | 79 if not partial: |
80 redirect(h.url('summary_home', repo_name=repo.repo_name)) | |
81 raise HTTPBadRequest() | |
77 | 82 |
78 def index(self, org_ref_type, org_ref, other_ref_type, other_ref): | 83 def index(self, org_ref_type, org_ref, other_ref_type, other_ref): |
79 | 84 |
80 org_repo = c.rhodecode_db_repo.repo_name | 85 org_repo = c.rhodecode_db_repo.repo_name |
81 org_ref = (org_ref_type, org_ref) | 86 org_ref = (org_ref_type, org_ref) |
95 raise HTTPNotFound | 100 raise HTTPNotFound |
96 | 101 |
97 if c.org_repo.scm_instance.alias != 'hg': | 102 if c.org_repo.scm_instance.alias != 'hg': |
98 log.error('Review not available for GIT REPOS') | 103 log.error('Review not available for GIT REPOS') |
99 raise HTTPNotFound | 104 raise HTTPNotFound |
100 | 105 partial = request.environ.get('HTTP_X_PARTIAL_XHR') |
101 self.__get_cs_or_redirect(rev=org_ref, repo=org_repo) | 106 self.__get_cs_or_redirect(rev=org_ref, repo=org_repo, partial=partial) |
102 self.__get_cs_or_redirect(rev=other_ref, repo=other_repo) | 107 self.__get_cs_or_redirect(rev=other_ref, repo=other_repo, partial=partial) |
103 | 108 |
104 c.cs_ranges, discovery_data = PullRequestModel().get_compare_data( | 109 c.cs_ranges, discovery_data = PullRequestModel().get_compare_data( |
105 org_repo, org_ref, other_repo, other_ref | 110 org_repo, org_ref, other_repo, other_ref |
106 ) | 111 ) |
107 | 112 |
108 c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in | 113 c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in |
109 c.cs_ranges]) | 114 c.cs_ranges]) |
110 c.target_repo = c.repo_name | 115 c.target_repo = c.repo_name |
111 # defines that we need hidden inputs with changesets | 116 # defines that we need hidden inputs with changesets |
112 c.as_form = request.GET.get('as_form', False) | 117 c.as_form = request.GET.get('as_form', False) |
113 if request.environ.get('HTTP_X_PARTIAL_XHR'): | 118 if partial: |
114 return render('compare/compare_cs.html') | 119 return render('compare/compare_cs.html') |
115 | 120 |
116 c.org_ref = org_ref[1] | 121 c.org_ref = org_ref[1] |
117 c.other_ref = other_ref[1] | 122 c.other_ref = other_ref[1] |
118 # diff needs to have swapped org with other to generate proper diff | 123 # diff needs to have swapped org with other to generate proper diff |