##// END OF EJS Templates
backported redirection loop fix from beta ref: 222e9432298e
marcink -
r3804:b95f383f default
parent child Browse files
Show More
@@ -1,121 +1,125
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
33 33 import rhodecode.lib.helpers as h
34 34 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
35 35 from rhodecode.lib.base import BaseRepoController, render
36 36 from rhodecode.lib.helpers import RepoPage
37 37 from rhodecode.lib.compat import json
38 38 from rhodecode.lib.graphmod import _colored, _dagwalker
39 from rhodecode.lib.vcs.exceptions import RepositoryError, ChangesetDoesNotExistError
39 from rhodecode.lib.vcs.exceptions import RepositoryError, ChangesetDoesNotExistError,\
40 EmptyRepositoryError
40 41 from rhodecode.lib.utils2 import safe_int
41 42
42 43 log = logging.getLogger(__name__)
43 44
44 45
45 46 class ChangelogController(BaseRepoController):
46 47
47 48 @LoginRequired()
48 49 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
49 50 'repository.admin')
50 51 def __before__(self):
51 52 super(ChangelogController, self).__before__()
52 53 c.affected_files_cut_off = 60
53 54
54 55 def index(self):
55 56 limit = 100
56 57 default = 20
57 58 if request.GET.get('size'):
58 59 c.size = max(min(safe_int(request.GET.get('size')), limit), 1)
59 60 session['changelog_size'] = c.size
60 61 session.save()
61 62 else:
62 63 c.size = int(session.get('changelog_size', default))
63 64 # min size must be 1
64 65 c.size = max(c.size, 1)
65 66 p = safe_int(request.GET.get('page', 1), 1)
66 67 branch_name = request.GET.get('branch', None)
67 68 try:
68 69 if branch_name:
69 70 collection = [z for z in
70 71 c.rhodecode_repo.get_changesets(start=0,
71 72 branch_name=branch_name)]
72 73 c.total_cs = len(collection)
73 74 else:
74 75 collection = c.rhodecode_repo
75 76 c.total_cs = len(c.rhodecode_repo)
76 77
77 78 c.pagination = RepoPage(collection, page=p, item_count=c.total_cs,
78 79 items_per_page=c.size, branch=branch_name)
79 80 collection = list(c.pagination)
80 81 page_revisions = [x.raw_id for x in collection]
81 82 c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
82 83 c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
84 except (EmptyRepositoryError), e:
85 h.flash(str(e), category='warning')
86 return redirect(url('summary_home', repo_name=c.repo_name))
83 87 except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
84 88 log.error(traceback.format_exc())
85 89 h.flash(str(e), category='error')
86 90 return redirect(url('changelog_home', repo_name=c.repo_name))
87 91
88 92 self._graph(c.rhodecode_repo, collection, c.total_cs, c.size, p)
89 93
90 94 c.branch_name = branch_name
91 95 c.branch_filters = [('', _('All Branches'))] + \
92 96 [(k, k) for k in c.rhodecode_repo.branches.keys()]
93 97
94 98 return render('changelog/changelog.html')
95 99
96 100 def changelog_details(self, cs):
97 101 if request.environ.get('HTTP_X_PARTIAL_XHR'):
98 102 c.cs = c.rhodecode_repo.get_changeset(cs)
99 103 return render('changelog/changelog_details.html')
100 104
101 105 def _graph(self, repo, collection, repo_size, size, p):
102 106 """
103 107 Generates a DAG graph for mercurial
104 108
105 109 :param repo: repo instance
106 110 :param size: number of commits to show
107 111 :param p: page number
108 112 """
109 113 if not collection:
110 114 c.jsdata = json.dumps([])
111 115 return
112 116
113 117 data = []
114 118 revs = [x.revision for x in collection]
115 119
116 120 dag = _dagwalker(repo, revs, repo.alias)
117 121 dag = _colored(dag)
118 122 for (id, type, ctx, vtx, edges) in dag:
119 123 data.append(['', vtx, edges])
120 124
121 125 c.jsdata = json.dumps(data)
General Comments 0
You need to be logged in to leave comments. Login now