annotate rhodecode/controllers/changelog.py @ 1345:3bce31f026b8 beta

#47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods. Added new db unique key for Group
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 23 May 2011 02:22:00 +0200
parents 1188920ae12c
children 5f878edbee00
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
1 # -*- coding: utf-8 -*-
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
2 """
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
3 rhodecode.controllers.changelog
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
5
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
6 changelog controller for rhodecode
1130
1cecc7db3106 fixed some limits in changesets and changelogs
Marcin Kuzminski <marcin@python-works.com>
parents: 1109
diff changeset
7
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
8 :created_on: Apr 21, 2010
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
9 :author: marcink
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1130
diff changeset
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
11 :license: GPLv3, see COPYING for more details.
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
12 """
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
13 # This program is free software: you can redistribute it and/or modify
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
14 # it under the terms of the GNU General Public License as published by
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
15 # the Free Software Foundation, either version 3 of the License, or
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
16 # (at your option) any later version.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1130
diff changeset
17 #
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
18 # This program is distributed in the hope that it will be useful,
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
21 # GNU General Public License for more details.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1130
diff changeset
22 #
252
3782a6d698af licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 245
diff changeset
23 # You should have received a copy of the GNU General Public License
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
25
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
26 import logging
592
0a48c1ec04fc #37 fixed json imports for python2.5
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
27
608
101e07f82f22 fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
28 try:
101e07f82f22 fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
29 import json
101e07f82f22 fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
30 except ImportError:
101e07f82f22 fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
31 #python 2.5 compatibility
101e07f82f22 fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
32 import simplejson as json
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
33
318
fdf9f6ee5217 Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
Marcin Kuzminski <marcin@python-works.com>
parents: 291
diff changeset
34 from mercurial.graphmod import colored, CHANGESET, revisions as graph_rev
fdf9f6ee5217 Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
Marcin Kuzminski <marcin@python-works.com>
parents: 291
diff changeset
35 from pylons import request, session, tmpl_context as c
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
36
547
1e757ac98988 renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 361
diff changeset
37 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
38 from rhodecode.lib.base import BaseRepoController, render
1098
91ddd4db4614 Added dedicated repo pager to support reversed new way slicing method of vcs and get_changesets method
Marcin Kuzminski <marcin@python-works.com>
parents: 1083
diff changeset
39 from rhodecode.lib.helpers import RepoPage
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 699
diff changeset
40
318
fdf9f6ee5217 Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
Marcin Kuzminski <marcin@python-works.com>
parents: 291
diff changeset
41 log = logging.getLogger(__name__)
93
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
42
1212
50e41777675d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
43
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
44 class ChangelogController(BaseRepoController):
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
45
192
f191f99f59c9 full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents: 142
diff changeset
46 @LoginRequired()
318
fdf9f6ee5217 Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
Marcin Kuzminski <marcin@python-works.com>
parents: 291
diff changeset
47 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
48 'repository.admin')
93
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
49 def __before__(self):
192
f191f99f59c9 full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents: 142
diff changeset
50 super(ChangelogController, self).__before__()
1130
1cecc7db3106 fixed some limits in changesets and changelogs
Marcin Kuzminski <marcin@python-works.com>
parents: 1109
diff changeset
51 c.affected_files_cut_off = 60
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
52
93
aec4c0071cb3 added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
53 def index(self):
213
Marcin Kuzminski <marcin@python-works.com>
parents: 211
diff changeset
54 limit = 100
Marcin Kuzminski <marcin@python-works.com>
parents: 211
diff changeset
55 default = 20
192
f191f99f59c9 full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents: 142
diff changeset
56 if request.params.get('size'):
211
a3a7c3e03b76 version bump. Bugfix when changelog parameter was not an int. Added limit for 100 changelogs to view at once.
Marcin Kuzminski <marcin@python-works.com>
parents: 196
diff changeset
57 try:
a3a7c3e03b76 version bump. Bugfix when changelog parameter was not an int. Added limit for 100 changelogs to view at once.
Marcin Kuzminski <marcin@python-works.com>
parents: 196
diff changeset
58 int_size = int(request.params.get('size'))
a3a7c3e03b76 version bump. Bugfix when changelog parameter was not an int. Added limit for 100 changelogs to view at once.
Marcin Kuzminski <marcin@python-works.com>
parents: 196
diff changeset
59 except ValueError:
a3a7c3e03b76 version bump. Bugfix when changelog parameter was not an int. Added limit for 100 changelogs to view at once.
Marcin Kuzminski <marcin@python-works.com>
parents: 196
diff changeset
60 int_size = default
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
61 int_size = int_size if int_size <= limit else limit
211
a3a7c3e03b76 version bump. Bugfix when changelog parameter was not an int. Added limit for 100 changelogs to view at once.
Marcin Kuzminski <marcin@python-works.com>
parents: 196
diff changeset
62 c.size = int_size
192
f191f99f59c9 full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents: 142
diff changeset
63 session['changelog_size'] = c.size
f191f99f59c9 full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents: 142
diff changeset
64 session.save()
142
f7218849798a Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 127
diff changeset
65 else:
282
237470e64bb8 switched filters into webhelpers for easy of usage.
Marcin Kuzminski <marcin@python-works.com>
parents: 276
diff changeset
66 c.size = int(session.get('changelog_size', default))
192
f191f99f59c9 full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents: 142
diff changeset
67
f191f99f59c9 full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents: 142
diff changeset
68 p = int(request.params.get('page', 1))
1106
5cbaeda8ec6f fixed percentage indicator of build stats,added branch filter to changelog controller
Marcin Kuzminski <marcin@python-works.com>
parents: 1098
diff changeset
69 branch_name = request.params.get('branch', None)
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1038
diff changeset
70 c.total_cs = len(c.rhodecode_repo)
1212
50e41777675d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
71 c.pagination = RepoPage(c.rhodecode_repo, page=p,
50e41777675d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
72 item_count=c.total_cs, items_per_page=c.size,
50e41777675d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
73 branch_name=branch_name)
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
74
1109
41a695e604ba small fixes, and optimization for changelog graph
Marcin Kuzminski <marcin@python-works.com>
parents: 1106
diff changeset
75 self._graph(c.rhodecode_repo, c.total_cs, c.size, p)
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
76
142
f7218849798a Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 127
diff changeset
77 return render('changelog/changelog.html')
f7218849798a Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 127
diff changeset
78
1109
41a695e604ba small fixes, and optimization for changelog graph
Marcin Kuzminski <marcin@python-works.com>
parents: 1106
diff changeset
79 def _graph(self, repo, repo_size, size, p):
1083
9b2c21245198 DAG fixes for vcs 0.2.0
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
80 """
9b2c21245198 DAG fixes for vcs 0.2.0
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
81 Generates a DAG graph for mercurial
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1130
diff changeset
82
1083
9b2c21245198 DAG fixes for vcs 0.2.0
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
83 :param repo: repo instance
9b2c21245198 DAG fixes for vcs 0.2.0
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
84 :param size: number of commits to show
9b2c21245198 DAG fixes for vcs 0.2.0
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
85 :param p: page number
9b2c21245198 DAG fixes for vcs 0.2.0
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
86 """
1281
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
87 if not repo.revisions:
699
52da7cba88a6 Code refactor for auth func, preparing for ldap support
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
88 c.jsdata = json.dumps([])
52da7cba88a6 Code refactor for auth func, preparing for ldap support
Marcin Kuzminski <marcin@python-works.com>
parents: 691
diff changeset
89 return
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
90
1109
41a695e604ba small fixes, and optimization for changelog graph
Marcin Kuzminski <marcin@python-works.com>
parents: 1106
diff changeset
91 revcount = min(repo_size, size)
322
46b7d108ea7a made graphg ticker, and fixes a paging bug caused grapgh disaligment
Marcin Kuzminski <marcin@python-works.com>
parents: 318
diff changeset
92 offset = 1 if p == 1 else ((p - 1) * revcount + 1)
1331
1188920ae12c fixed error when given page in pagination was out of range in changelog view
Marcin Kuzminski <marcin@python-works.com>
parents: 1281
diff changeset
93 try:
1188920ae12c fixed error when given page in pagination was out of range in changelog view
Marcin Kuzminski <marcin@python-works.com>
parents: 1281
diff changeset
94 rev_start = repo.revisions.index(repo.revisions[(-1 * offset)])
1188920ae12c fixed error when given page in pagination was out of range in changelog view
Marcin Kuzminski <marcin@python-works.com>
parents: 1281
diff changeset
95 except IndexError:
1188920ae12c fixed error when given page in pagination was out of range in changelog view
Marcin Kuzminski <marcin@python-works.com>
parents: 1281
diff changeset
96 rev_start = repo.revisions.index(repo.revisions[-1])
1083
9b2c21245198 DAG fixes for vcs 0.2.0
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
97 rev_end = max(0, rev_start - revcount)
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
98
1331
1188920ae12c fixed error when given page in pagination was out of range in changelog view
Marcin Kuzminski <marcin@python-works.com>
parents: 1281
diff changeset
99
288
ab1afe7444f3 Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents: 282
diff changeset
100 data = []
1281
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
101 if repo.alias == 'git':
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
102 for _ in xrange(rev_end, rev_start):
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
103 vtx = [0, 1]
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
104 edges = [[0, 0, 1]]
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
105 data.append(['', vtx, edges])
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
106
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
107 elif repo.alias == 'hg':
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
108 dag = graph_rev(repo._repo, rev_start, rev_end)
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
109 c.dag = tree = list(colored(dag))
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
110 for (id, type, ctx, vtx, edges) in tree:
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
111 if type != CHANGESET:
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
112 continue
0d3706ccf129 small fixes for git support
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
113 data.append(['', vtx, edges])
142
f7218849798a Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents: 127
diff changeset
114
636
ffd07396d315 Fixes for raw_id, needed for git
Marcin Kuzminski <marcin@python-works.com>
parents: 629
diff changeset
115 c.jsdata = json.dumps(data)