Mercurial > public > src > rhodecode
comparison pylons_app/controllers/changeset.py @ 592:a99e23e6c1e8
fixes #13 large initial commits and changesets are cut of now to not freeze the application.
fixed _hex ! for raw changeset
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 05 Oct 2010 17:56:06 +0200 |
parents | d945c95ba4ac |
children | d8778cde98f0 |
comparison
equal
deleted
inserted
replaced
590:c8798599cf8d | 592:a99e23e6c1e8 |
---|---|
20 Created on April 25, 2010 | 20 Created on April 25, 2010 |
21 changeset controller for pylons | 21 changeset controller for pylons |
22 @author: marcink | 22 @author: marcink |
23 """ | 23 """ |
24 from pylons import tmpl_context as c, url, request, response | 24 from pylons import tmpl_context as c, url, request, response |
25 from pylons.i18n.translation import _ | |
25 from pylons.controllers.util import redirect | 26 from pylons.controllers.util import redirect |
26 from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | 27 from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
27 from pylons_app.lib.base import BaseController, render | 28 from pylons_app.lib.base import BaseController, render |
28 from pylons_app.model.hg_model import HgModel | 29 from pylons_app.model.hg_model import HgModel |
29 from vcs.exceptions import RepositoryError | 30 from vcs.exceptions import RepositoryError, ChangesetError |
30 from vcs.nodes import FileNode | 31 from vcs.nodes import FileNode |
31 from vcs.utils import diffs as differ | 32 from vcs.utils import diffs as differ |
32 import logging | 33 import logging |
33 import traceback | 34 import traceback |
34 | 35 |
42 def __before__(self): | 43 def __before__(self): |
43 super(ChangesetController, self).__before__() | 44 super(ChangesetController, self).__before__() |
44 | 45 |
45 def index(self, revision): | 46 def index(self, revision): |
46 hg_model = HgModel() | 47 hg_model = HgModel() |
48 cut_off_limit = 1024 * 100 | |
49 | |
50 def wrap_to_table(str): | |
51 | |
52 return '''<table class="code-difftable"> | |
53 <tr class="line"> | |
54 <td class="lineno new"></td> | |
55 <td class="code"><pre>%s</pre></td> | |
56 </tr> | |
57 </table>''' % str | |
58 | |
59 try: | |
60 c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) | |
61 except RepositoryError: | |
62 log.error(traceback.format_exc()) | |
63 return redirect(url('hg_home')) | |
64 else: | |
65 try: | |
66 c.changeset_old = c.changeset.parents[0] | |
67 except IndexError: | |
68 c.changeset_old = None | |
69 c.changes = [] | |
70 c.sum_added = 0 | |
71 for node in c.changeset.added: | |
72 | |
73 filenode_old = FileNode(node.path, '') | |
74 if filenode_old.is_binary or node.is_binary: | |
75 diff = wrap_to_table(_('binary file')) | |
76 else: | |
77 c.sum_added += len(node.content) | |
78 if c.sum_added < cut_off_limit: | |
79 f_udiff = differ.get_udiff(filenode_old, node) | |
80 diff = differ.DiffProcessor(f_udiff).as_html() | |
81 else: | |
82 diff = wrap_to_table(_('Changeset is to big see raw changeset')) | |
83 | |
84 cs1 = None | |
85 cs2 = node.last_changeset.short_id | |
86 c.changes.append(('added', node, diff, cs1, cs2)) | |
87 | |
88 c.sum_removed = 0 | |
89 for node in c.changeset.changed: | |
90 try: | |
91 filenode_old = c.changeset_old.get_node(node.path) | |
92 except ChangesetError: | |
93 filenode_old = FileNode(node.path, '') | |
94 | |
95 if filenode_old.is_binary or node.is_binary: | |
96 diff = wrap_to_table(_('binary file')) | |
97 else: | |
98 c.sum_removed += len(node.content) | |
99 if c.sum_removed < cut_off_limit: | |
100 f_udiff = differ.get_udiff(filenode_old, node) | |
101 diff = differ.DiffProcessor(f_udiff).as_html() | |
102 else: | |
103 diff = wrap_to_table(_('Changeset is to big see raw changeset')) | |
104 | |
105 cs1 = filenode_old.last_changeset.short_id | |
106 cs2 = node.last_changeset.short_id | |
107 c.changes.append(('changed', node, diff, cs1, cs2)) | |
108 | |
109 for node in c.changeset.removed: | |
110 c.changes.append(('removed', node, None, None, None)) | |
111 | |
112 return render('changeset/changeset.html') | |
113 | |
114 def raw_changeset(self, revision): | |
115 | |
116 hg_model = HgModel() | |
117 method = request.GET.get('diff', 'show') | |
47 try: | 118 try: |
48 c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) | 119 c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) |
49 except RepositoryError: | 120 except RepositoryError: |
50 log.error(traceback.format_exc()) | 121 log.error(traceback.format_exc()) |
51 return redirect(url('hg_home')) | 122 return redirect(url('hg_home')) |
57 c.changes = [] | 128 c.changes = [] |
58 | 129 |
59 for node in c.changeset.added: | 130 for node in c.changeset.added: |
60 filenode_old = FileNode(node.path, '') | 131 filenode_old = FileNode(node.path, '') |
61 if filenode_old.is_binary or node.is_binary: | 132 if filenode_old.is_binary or node.is_binary: |
62 diff = 'binary file' | 133 diff = _('binary file') |
63 else: | |
64 f_udiff = differ.get_udiff(filenode_old, node) | |
65 diff = differ.DiffProcessor(f_udiff).as_html() | |
66 | |
67 cs1 = None | |
68 cs2 = node.last_changeset.short_id | |
69 c.changes.append(('added', node, diff, cs1, cs2)) | |
70 | |
71 for node in c.changeset.changed: | |
72 filenode_old = c.changeset_old.get_node(node.path) | |
73 if filenode_old.is_binary or node.is_binary: | |
74 diff = 'binary file' | |
75 else: | |
76 f_udiff = differ.get_udiff(filenode_old, node) | |
77 diff = differ.DiffProcessor(f_udiff).as_html() | |
78 | |
79 cs1 = filenode_old.last_changeset.short_id | |
80 cs2 = node.last_changeset.short_id | |
81 c.changes.append(('changed', node, diff, cs1, cs2)) | |
82 | |
83 for node in c.changeset.removed: | |
84 c.changes.append(('removed', node, None, None, None)) | |
85 | |
86 return render('changeset/changeset.html') | |
87 | |
88 def raw_changeset(self,revision): | |
89 | |
90 hg_model = HgModel() | |
91 method = request.GET.get('diff','show') | |
92 try: | |
93 c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) | |
94 except RepositoryError: | |
95 log.error(traceback.format_exc()) | |
96 return redirect(url('hg_home')) | |
97 else: | |
98 try: | |
99 c.changeset_old = c.changeset.parents[0] | |
100 except IndexError: | |
101 c.changeset_old = None | |
102 c.changes = [] | |
103 | |
104 for node in c.changeset.added: | |
105 filenode_old = FileNode(node.path, '') | |
106 if filenode_old.is_binary or node.is_binary: | |
107 diff = 'binary file' | |
108 else: | 134 else: |
109 f_udiff = differ.get_udiff(filenode_old, node) | 135 f_udiff = differ.get_udiff(filenode_old, node) |
110 diff = differ.DiffProcessor(f_udiff).raw_diff() | 136 diff = differ.DiffProcessor(f_udiff).raw_diff() |
111 | 137 |
112 cs1 = None | 138 cs1 = None |
114 c.changes.append(('added', node, diff, cs1, cs2)) | 140 c.changes.append(('added', node, diff, cs1, cs2)) |
115 | 141 |
116 for node in c.changeset.changed: | 142 for node in c.changeset.changed: |
117 filenode_old = c.changeset_old.get_node(node.path) | 143 filenode_old = c.changeset_old.get_node(node.path) |
118 if filenode_old.is_binary or node.is_binary: | 144 if filenode_old.is_binary or node.is_binary: |
119 diff = 'binary file' | 145 diff = _('binary file') |
120 else: | 146 else: |
121 f_udiff = differ.get_udiff(filenode_old, node) | 147 f_udiff = differ.get_udiff(filenode_old, node) |
122 diff = differ.DiffProcessor(f_udiff).raw_diff() | 148 diff = differ.DiffProcessor(f_udiff).raw_diff() |
123 | 149 |
124 cs1 = filenode_old.last_changeset.short_id | 150 cs1 = filenode_old.last_changeset.short_id |
127 | 153 |
128 response.content_type = 'text/plain' | 154 response.content_type = 'text/plain' |
129 if method == 'download': | 155 if method == 'download': |
130 response.content_disposition = 'attachment; filename=%s.patch' % revision | 156 response.content_disposition = 'attachment; filename=%s.patch' % revision |
131 parent = True if len(c.changeset.parents) > 0 else False | 157 parent = True if len(c.changeset.parents) > 0 else False |
132 c.parent_tmpl = 'Parent %s' % c.changeset.parents[0]._hex if parent else '' | 158 c.parent_tmpl = 'Parent %s' % c.changeset.parents[0].raw_id if parent else '' |
133 | 159 |
134 c.diffs = '' | 160 c.diffs = '' |
135 for x in c.changes: | 161 for x in c.changes: |
136 c.diffs += x[2] | 162 c.diffs += x[2] |
137 | 163 |