##// END OF EJS Templates
fixed typo in __get_cs_or_redirect method
marcink -
r4035:4627bc2d default
parent child Browse files
Show More
@@ -1,214 +1,214
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.controllers.changelog
4 4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 5
6 6 changelog controller for rhodecode
7 7
8 8 :created_on: Apr 21, 2010
9 9 :author: marcink
10 10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
11 11 :license: GPLv3, see COPYING for more details.
12 12 """
13 13 # This program is free software: you can redistribute it and/or modify
14 14 # it under the terms of the GNU General Public License as published by
15 15 # the Free Software Foundation, either version 3 of the License, or
16 16 # (at your option) any later version.
17 17 #
18 18 # This program is distributed in the hope that it will be useful,
19 19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 21 # GNU General Public License for more details.
22 22 #
23 23 # You should have received a copy of the GNU General Public License
24 24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 25
26 26 import logging
27 27 import traceback
28 28
29 29 from pylons import request, url, session, tmpl_context as c
30 30 from pylons.controllers.util import redirect
31 31 from pylons.i18n.translation import _
32 32 from webob.exc import HTTPNotFound, HTTPBadRequest
33 33
34 34 import rhodecode.lib.helpers as h
35 35 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
36 36 from rhodecode.lib.base import BaseRepoController, render
37 37 from rhodecode.lib.helpers import RepoPage
38 38 from rhodecode.lib.compat import json
39 39 from rhodecode.lib.graphmod import _colored, _dagwalker
40 40 from rhodecode.lib.vcs.exceptions import RepositoryError, ChangesetDoesNotExistError,\
41 41 ChangesetError, NodeDoesNotExistError, EmptyRepositoryError
42 42 from rhodecode.lib.utils2 import safe_int
43 43
44 44
45 45 log = logging.getLogger(__name__)
46 46
47 47
48 48 def _load_changelog_summary():
49 49 p = safe_int(request.GET.get('page'), 1)
50 50 size = safe_int(request.GET.get('size'), 10)
51 51
52 52 def url_generator(**kw):
53 53 return url('changelog_summary_home',
54 54 repo_name=c.rhodecode_db_repo.repo_name, size=size, **kw)
55 55
56 56 collection = c.rhodecode_repo
57 57
58 58 c.repo_changesets = RepoPage(collection, page=p,
59 59 items_per_page=size,
60 60 url=url_generator)
61 61 page_revisions = [x.raw_id for x in list(c.repo_changesets)]
62 62 c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
63 63 c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
64 64
65 65
66 66 class ChangelogController(BaseRepoController):
67 67
68 68 def __before__(self):
69 69 super(ChangelogController, self).__before__()
70 70 c.affected_files_cut_off = 60
71 71
72 72 def __get_cs_or_redirect(self, rev, repo, redirect_after=True,
73 73 partial=False):
74 74 """
75 75 Safe way to get changeset if error occur it redirects to changeset with
76 76 proper message. If partial is set then don't do redirect raise Exception
77 77 instead
78 78
79 79 :param rev: revision to fetch
80 80 :param repo: repo instance
81 81 """
82 82
83 83 try:
84 84 return c.rhodecode_repo.get_changeset(rev)
85 85 except EmptyRepositoryError, e:
86 86 if not redirect_after:
87 87 return None
88 88 h.flash(h.literal(_('There are no changesets yet')),
89 89 category='warning')
90 90 redirect(url('changelog_home', repo_name=repo.repo_name))
91 91
92 92 except RepositoryError, e:
93 93 log.error(traceback.format_exc())
94 94 h.flash(str(e), category='warning')
95 95 if not partial:
96 96 redirect(h.url('changelog_home', repo_name=repo.repo_name))
97 97 raise HTTPBadRequest()
98 98
99 99 def _graph(self, repo, revs_int, repo_size, size, p):
100 100 """
101 101 Generates a DAG graph for repo
102 102
103 103 :param repo:
104 104 :param revs_int:
105 105 :param repo_size:
106 106 :param size:
107 107 :param p:
108 108 """
109 109 if not revs_int:
110 110 c.jsdata = json.dumps([])
111 111 return
112 112
113 113 data = []
114 114 revs = revs_int
115 115
116 116 dag = _dagwalker(repo, revs, repo.alias)
117 117 dag = _colored(dag)
118 118 for (id, type, ctx, vtx, edges) in dag:
119 119 data.append(['', vtx, edges])
120 120
121 121 c.jsdata = json.dumps(data)
122 122
123 123 @LoginRequired()
124 124 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
125 125 'repository.admin')
126 126 def index(self, repo_name, revision=None, f_path=None):
127 127 limit = 100
128 128 default = 20
129 129 if request.GET.get('size'):
130 130 c.size = max(min(safe_int(request.GET.get('size')), limit), 1)
131 131 session['changelog_size'] = c.size
132 132 session.save()
133 133 else:
134 134 c.size = int(session.get('changelog_size', default))
135 135 # min size must be 1
136 136 c.size = max(c.size, 1)
137 137 p = safe_int(request.GET.get('page', 1), 1)
138 138 branch_name = request.GET.get('branch', None)
139 139 if (branch_name and
140 140 branch_name not in c.rhodecode_repo.branches and
141 141 branch_name not in c.rhodecode_repo.closed_branches and
142 142 not revision):
143 143 return redirect(url('changelog_file_home', repo_name=c.repo_name,
144 144 revision=branch_name, f_path=f_path or ''))
145 145
146 146 c.changelog_for_path = f_path
147 147 try:
148 148
149 149 if f_path:
150 150 log.debug('generating changelog for path %s' % f_path)
151 151 # get the history for the file !
152 152 tip_cs = c.rhodecode_repo.get_changeset()
153 153 try:
154 154 collection = tip_cs.get_file_history(f_path)
155 155 except (NodeDoesNotExistError, ChangesetError):
156 156 #this node is not present at tip !
157 157 try:
158 cs = self.__get_css_or_redirect(revision, repo_name)
158 cs = self.__get_cs_or_redirect(revision, repo_name)
159 159 collection = cs.get_file_history(f_path)
160 160 except RepositoryError, e:
161 161 h.flash(str(e), category='warning')
162 162 redirect(h.url('changelog_home', repo_name=repo_name))
163 163 collection = list(reversed(collection))
164 164 else:
165 165 collection = c.rhodecode_repo.get_changesets(start=0,
166 166 branch_name=branch_name)
167 167 c.total_cs = len(collection)
168 168
169 169 c.pagination = RepoPage(collection, page=p, item_count=c.total_cs,
170 170 items_per_page=c.size, branch=branch_name,)
171 171 collection = list(c.pagination)
172 172 page_revisions = [x.raw_id for x in c.pagination]
173 173 c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
174 174 c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
175 175 except (EmptyRepositoryError), e:
176 176 h.flash(str(e), category='warning')
177 177 return redirect(url('summary_home', repo_name=c.repo_name))
178 178 except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
179 179 log.error(traceback.format_exc())
180 180 h.flash(str(e), category='error')
181 181 return redirect(url('changelog_home', repo_name=c.repo_name))
182 182
183 183 c.branch_name = branch_name
184 184 c.branch_filters = [('', _('All Branches'))] + \
185 185 [(k, k) for k in c.rhodecode_repo.branches.keys()]
186 186 if c.rhodecode_repo.closed_branches:
187 187 prefix = _('(closed)') + ' '
188 188 c.branch_filters += [('-', '-')] + \
189 189 [(k, prefix + k) for k in c.rhodecode_repo.closed_branches.keys()]
190 190 _revs = []
191 191 if not f_path:
192 192 _revs = [x.revision for x in c.pagination]
193 193 self._graph(c.rhodecode_repo, _revs, c.total_cs, c.size, p)
194 194
195 195 return render('changelog/changelog.html')
196 196
197 197 @LoginRequired()
198 198 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
199 199 'repository.admin')
200 200 def changelog_details(self, cs):
201 201 if request.environ.get('HTTP_X_PARTIAL_XHR'):
202 202 c.cs = c.rhodecode_repo.get_changeset(cs)
203 203 return render('changelog/changelog_details.html')
204 204 raise HTTPNotFound()
205 205
206 206 @LoginRequired()
207 207 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
208 208 'repository.admin')
209 209 def changelog_summary(self, repo_name):
210 210 if request.environ.get('HTTP_X_PARTIAL_XHR'):
211 211 _load_changelog_summary()
212 212
213 213 return render('changelog/changelog_summary_data.html')
214 214 raise HTTPNotFound()
General Comments 0
You need to be logged in to leave comments. Login now