Mercurial > kallithea
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 |
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 | 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 | 54 limit = 100 |
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 | 71 c.pagination = RepoPage(c.rhodecode_repo, page=p, |
72 item_count=c.total_cs, items_per_page=c.size, | |
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) |