comparison rhodecode/controllers/compare.py @ 2854:d998cc84cf72 rhodecode-0.0.1.4.2

Merge branch beta into stable
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 19 Sep 2012 22:38:12 +0200
parents 1cd0a0c05f42
children 5fba3778431c
comparison
equal deleted inserted replaced
2829:026609c4ef02 2854:d998cc84cf72
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