Mercurial > kallithea
annotate rhodecode/controllers/changelog.py @ 672:6f796f56a64c
Added tag v1.0.1 for changeset bee56f209c40
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 10 Nov 2010 19:25:44 +0100 |
parents | 79457e03ef68 |
children | 7e536d1af60d |
rev | line source |
---|---|
252
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
1 #!/usr/bin/env python |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
2 # encoding: utf-8 |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
3 # changelog controller for pylons |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
4 # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com> |
361 | 5 # |
252
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
6 # This program is free software; you can redistribute it and/or |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
7 # modify it under the terms of the GNU General Public License |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
8 # as published by the Free Software Foundation; version 2 |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
9 # of the License or (at your opinion) any later version of the license. |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
10 # |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
11 # 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
|
12 # 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
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
14 # GNU General Public License for more details. |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
15 # |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
16 # You should have received a copy of the GNU General Public License |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
17 # along with this program; if not, write to the Free Software |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
19 # MA 02110-1301, USA. |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
20 """ |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
21 Created on April 21, 2010 |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
22 changelog controller for pylons |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
23 @author: marcink |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
24 """ |
592
0a48c1ec04fc
#37 fixed json imports for python2.5
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
25 |
608
101e07f82f22
fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
26 try: |
101e07f82f22
fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
27 import json |
101e07f82f22
fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
28 except ImportError: |
101e07f82f22
fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
29 #python 2.5 compatibility |
101e07f82f22
fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
30 import simplejson as json |
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
|
31 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
|
32 from pylons import request, session, tmpl_context as c |
547
1e757ac98988
renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
361
diff
changeset
|
33 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
1e757ac98988
renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
361
diff
changeset
|
34 from rhodecode.lib.base import BaseController, render |
1e757ac98988
renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
361
diff
changeset
|
35 from rhodecode.model.hg_model import HgModel |
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
|
36 from webhelpers.paginate import Page |
fdf9f6ee5217
Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
291
diff
changeset
|
37 import logging |
fdf9f6ee5217
Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
291
diff
changeset
|
38 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
|
39 |
aec4c0071cb3
added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
40 class ChangelogController(BaseController): |
192
f191f99f59c9
full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents:
142
diff
changeset
|
41 |
f191f99f59c9
full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents:
142
diff
changeset
|
42 @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
|
43 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
fdf9f6ee5217
Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
Marcin Kuzminski <marcin@python-works.com>
parents:
291
diff
changeset
|
44 '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
|
45 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
|
46 super(ChangelogController, self).__before__() |
f191f99f59c9
full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents:
142
diff
changeset
|
47 |
93
aec4c0071cb3
added empty controllers for branches tags files graph, routing and test for them
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
48 def index(self): |
213 | 49 limit = 100 |
50 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
|
51 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
|
52 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
|
53 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
|
54 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
|
55 int_size = default |
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
|
56 int_size = int_size if int_size <= limit else limit |
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 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
|
58 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
|
59 session.save() |
142
f7218849798a
Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents:
127
diff
changeset
|
60 else: |
282
237470e64bb8
switched filters into webhelpers for easy of usage.
Marcin Kuzminski <marcin@python-works.com>
parents:
276
diff
changeset
|
61 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
|
62 |
276
5e59f29edf66
changed way of getting repository in changelog. + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
252
diff
changeset
|
63 changesets = HgModel().get_repo(c.repo_name) |
192
f191f99f59c9
full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents:
142
diff
changeset
|
64 |
f191f99f59c9
full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents:
142
diff
changeset
|
65 p = int(request.params.get('page', 1)) |
282
237470e64bb8
switched filters into webhelpers for easy of usage.
Marcin Kuzminski <marcin@python-works.com>
parents:
276
diff
changeset
|
66 c.total_cs = len(changesets) |
237470e64bb8
switched filters into webhelpers for easy of usage.
Marcin Kuzminski <marcin@python-works.com>
parents:
276
diff
changeset
|
67 c.pagination = Page(changesets, page=p, item_count=c.total_cs, |
192
f191f99f59c9
full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents:
142
diff
changeset
|
68 items_per_page=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
|
69 |
288
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
70 self._graph(changesets, c.size, p) |
142
f7218849798a
Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents:
127
diff
changeset
|
71 |
f7218849798a
Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents:
127
diff
changeset
|
72 return render('changelog/changelog.html') |
f7218849798a
Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents:
127
diff
changeset
|
73 |
f7218849798a
Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents:
127
diff
changeset
|
74 |
192
f191f99f59c9
full changelog caching, secured changelog with LoginRequired, some minor changes in graph
Marcin Kuzminski <marcin@python-works.com>
parents:
142
diff
changeset
|
75 def _graph(self, repo, size, p): |
288
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
76 revcount = size |
608
101e07f82f22
fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
77 if not repo.revisions:return json.dumps([]), 0 |
288
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
78 |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
79 max_rev = repo.revisions[-1] |
322
46b7d108ea7a
made graphg ticker, and fixes a paging bug caused grapgh disaligment
Marcin Kuzminski <marcin@python-works.com>
parents:
318
diff
changeset
|
80 offset = 1 if p == 1 else ((p - 1) * revcount + 1) |
288
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
81 rev_start = repo.revisions[(-1 * offset)] |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
82 |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
83 revcount = min(max_rev, revcount) |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
84 rev_end = max(0, rev_start - revcount) |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
85 dag = graph_rev(repo.repo, rev_start, rev_end) |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
86 |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
87 c.dag = tree = list(colored(dag)) |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
88 data = [] |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
89 for (id, type, ctx, vtx, edges) in tree: |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
90 if type != CHANGESET: |
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
91 continue |
291 | 92 data.append(('', vtx, edges)) |
288
ab1afe7444f3
Initial graph release.
Marcin Kuzminski <marcin@python-works.com>
parents:
282
diff
changeset
|
93 |
608
101e07f82f22
fixes #37 python import on json
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
94 c.jsdata = json.dumps(data) |
142
f7218849798a
Changeg graph to changelog, and changelog to shortlog
Marcin Kuzminski <marcin@python-works.com>
parents:
127
diff
changeset
|
95 |