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