##// END OF EJS Templates
fixes issue #502, float division error on setting maxsize of changelog to 0
marcink -
r2628:4548912f beta
parent child Browse files
Show More
@@ -1,124 +1,125 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.controllers.changelog
3 rhodecode.controllers.changelog
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
5
6 changelog controller for rhodecode
6 changelog controller for rhodecode
7
7
8 :created_on: Apr 21, 2010
8 :created_on: Apr 21, 2010
9 :author: marcink
9 :author: marcink
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
11 :license: GPLv3, see COPYING for more details.
11 :license: GPLv3, see COPYING for more details.
12 """
12 """
13 # This program is free software: you can redistribute it and/or modify
13 # This program is free software: you can redistribute it and/or modify
14 # it under the terms of the GNU General Public License as published by
14 # it under the terms of the GNU General Public License as published by
15 # the Free Software Foundation, either version 3 of the License, or
15 # the Free Software Foundation, either version 3 of the License, or
16 # (at your option) any later version.
16 # (at your option) any later version.
17 #
17 #
18 # This program is distributed in the hope that it will be useful,
18 # This program is distributed in the hope that it will be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 # GNU General Public License for more details.
21 # GNU General Public License for more details.
22 #
22 #
23 # You should have received a copy of the GNU General Public License
23 # You should have received a copy of the GNU General Public License
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25
25
26 import logging
26 import logging
27 import traceback
27 import traceback
28
28
29 from pylons import request, url, session, tmpl_context as c
29 from pylons import request, url, session, tmpl_context as c
30 from pylons.controllers.util import redirect
30 from pylons.controllers.util import redirect
31 from pylons.i18n.translation import _
31 from pylons.i18n.translation import _
32
32
33 import rhodecode.lib.helpers as h
33 import rhodecode.lib.helpers as h
34 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
34 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
35 from rhodecode.lib.base import BaseRepoController, render
35 from rhodecode.lib.base import BaseRepoController, render
36 from rhodecode.lib.helpers import RepoPage
36 from rhodecode.lib.helpers import RepoPage
37 from rhodecode.lib.compat import json
37 from rhodecode.lib.compat import json
38 from rhodecode.lib.graphmod import _colored, _dagwalker
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
40
41 log = logging.getLogger(__name__)
41 log = logging.getLogger(__name__)
42
42
43
43
44 class ChangelogController(BaseRepoController):
44 class ChangelogController(BaseRepoController):
45
45
46 @LoginRequired()
46 @LoginRequired()
47 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
47 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
48 'repository.admin')
48 'repository.admin')
49 def __before__(self):
49 def __before__(self):
50 super(ChangelogController, self).__before__()
50 super(ChangelogController, self).__before__()
51 c.affected_files_cut_off = 60
51 c.affected_files_cut_off = 60
52
52
53 def index(self):
53 def index(self):
54 limit = 100
54 limit = 100
55 default = 20
55 default = 20
56 if request.params.get('size'):
56 if request.params.get('size'):
57 try:
57 try:
58 int_size = int(request.params.get('size'))
58 int_size = int(request.params.get('size'))
59 except ValueError:
59 except ValueError:
60 int_size = default
60 int_size = default
61 int_size = int_size if int_size <= limit else limit
61 int_size = int_size if int_size <= limit else limit
62 c.size = int_size
62 c.size = int_size
63 session['changelog_size'] = c.size
63 session['changelog_size'] = c.size
64 session.save()
64 session.save()
65 else:
65 else:
66 c.size = int(session.get('changelog_size', default))
66 c.size = int(session.get('changelog_size', default))
67
67 # min size must be 1
68 c.size = max(c.size, 1)
68 p = int(request.params.get('page', 1))
69 p = int(request.params.get('page', 1))
69 branch_name = request.params.get('branch', None)
70 branch_name = request.params.get('branch', None)
70 try:
71 try:
71 if branch_name:
72 if branch_name:
72 collection = [z for z in
73 collection = [z for z in
73 c.rhodecode_repo.get_changesets(start=0,
74 c.rhodecode_repo.get_changesets(start=0,
74 branch_name=branch_name)]
75 branch_name=branch_name)]
75 c.total_cs = len(collection)
76 c.total_cs = len(collection)
76 else:
77 else:
77 collection = c.rhodecode_repo
78 collection = c.rhodecode_repo
78 c.total_cs = len(c.rhodecode_repo)
79 c.total_cs = len(c.rhodecode_repo)
79
80
80 c.pagination = RepoPage(collection, page=p, item_count=c.total_cs,
81 c.pagination = RepoPage(collection, page=p, item_count=c.total_cs,
81 items_per_page=c.size, branch=branch_name)
82 items_per_page=c.size, branch=branch_name)
82 collection = list(c.pagination)
83 collection = list(c.pagination)
83 page_revisions = [x.raw_id for x in collection]
84 page_revisions = [x.raw_id for x in collection]
84 c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
85 c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
85 c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
86 c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
86 except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
87 except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
87 log.error(traceback.format_exc())
88 log.error(traceback.format_exc())
88 h.flash(str(e), category='warning')
89 h.flash(str(e), category='warning')
89 return redirect(url('home'))
90 return redirect(url('home'))
90
91
91 self._graph(c.rhodecode_repo, collection, c.total_cs, c.size, p)
92 self._graph(c.rhodecode_repo, collection, c.total_cs, c.size, p)
92
93
93 c.branch_name = branch_name
94 c.branch_name = branch_name
94 c.branch_filters = [('', _('All Branches'))] + \
95 c.branch_filters = [('', _('All Branches'))] + \
95 [(k, k) for k in c.rhodecode_repo.branches.keys()]
96 [(k, k) for k in c.rhodecode_repo.branches.keys()]
96
97
97 return render('changelog/changelog.html')
98 return render('changelog/changelog.html')
98
99
99 def changelog_details(self, cs):
100 def changelog_details(self, cs):
100 if request.environ.get('HTTP_X_PARTIAL_XHR'):
101 if request.environ.get('HTTP_X_PARTIAL_XHR'):
101 c.cs = c.rhodecode_repo.get_changeset(cs)
102 c.cs = c.rhodecode_repo.get_changeset(cs)
102 return render('changelog/changelog_details.html')
103 return render('changelog/changelog_details.html')
103
104
104 def _graph(self, repo, collection, repo_size, size, p):
105 def _graph(self, repo, collection, repo_size, size, p):
105 """
106 """
106 Generates a DAG graph for mercurial
107 Generates a DAG graph for mercurial
107
108
108 :param repo: repo instance
109 :param repo: repo instance
109 :param size: number of commits to show
110 :param size: number of commits to show
110 :param p: page number
111 :param p: page number
111 """
112 """
112 if not collection:
113 if not collection:
113 c.jsdata = json.dumps([])
114 c.jsdata = json.dumps([])
114 return
115 return
115
116
116 data = []
117 data = []
117 revs = [x.revision for x in collection]
118 revs = [x.revision for x in collection]
118
119
119 dag = _dagwalker(repo, revs, repo.alias)
120 dag = _dagwalker(repo, revs, repo.alias)
120 dag = _colored(dag)
121 dag = _colored(dag)
121 for (id, type, ctx, vtx, edges) in dag:
122 for (id, type, ctx, vtx, edges) in dag:
122 data.append(['', vtx, edges])
123 data.append(['', vtx, edges])
123
124
124 c.jsdata = json.dumps(data)
125 c.jsdata = json.dumps(data)
General Comments 0
You need to be logged in to leave comments. Login now