Mercurial > kallithea
comparison rhodecode/controllers/changeset.py @ 636:ffd07396d315 beta
Fixes for raw_id, needed for git
Renamed hg controller to home
css html changes
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 26 Oct 2010 03:20:32 +0200 |
parents | 7e536d1af60d |
children | c8bd0e6cc3da |
comparison
equal
deleted
inserted
replaced
635:fd63782c4426 | 636:ffd07396d315 |
---|---|
35 import traceback | 35 import traceback |
36 | 36 |
37 log = logging.getLogger(__name__) | 37 log = logging.getLogger(__name__) |
38 | 38 |
39 class ChangesetController(BaseController): | 39 class ChangesetController(BaseController): |
40 | 40 |
41 @LoginRequired() | 41 @LoginRequired() |
42 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | 42 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
43 'repository.admin') | 43 'repository.admin') |
44 def __before__(self): | 44 def __before__(self): |
45 super(ChangesetController, self).__before__() | 45 super(ChangesetController, self).__before__() |
46 | 46 |
47 def index(self, revision): | 47 def index(self, revision): |
48 hg_model = HgModel() | 48 hg_model = HgModel() |
49 cut_off_limit = 1024 * 250 | 49 cut_off_limit = 1024 * 250 |
50 | 50 |
51 def wrap_to_table(str): | 51 def wrap_to_table(str): |
52 | 52 |
53 return '''<table class="code-difftable"> | 53 return '''<table class="code-difftable"> |
54 <tr class="line"> | 54 <tr class="line"> |
55 <td class="lineno new"></td> | 55 <td class="lineno new"></td> |
56 <td class="code"><pre>%s</pre></td> | 56 <td class="code"><pre>%s</pre></td> |
57 </tr> | 57 </tr> |
58 </table>''' % str | 58 </table>''' % str |
59 | 59 |
60 try: | 60 try: |
61 c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) | 61 c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) |
62 except RepositoryError: | 62 except RepositoryError: |
63 log.error(traceback.format_exc()) | 63 log.error(traceback.format_exc()) |
64 return redirect(url('hg_home')) | 64 return redirect(url('home')) |
65 else: | 65 else: |
66 try: | 66 try: |
67 c.changeset_old = c.changeset.parents[0] | 67 c.changeset_old = c.changeset.parents[0] |
68 except IndexError: | 68 except IndexError: |
69 c.changeset_old = None | 69 c.changeset_old = None |
70 c.changes = [] | 70 c.changes = [] |
71 | 71 |
72 #=================================================================== | 72 #=================================================================== |
73 # ADDED FILES | 73 # ADDED FILES |
74 #=================================================================== | 74 #=================================================================== |
75 c.sum_added = 0 | 75 c.sum_added = 0 |
76 for node in c.changeset.added: | 76 for node in c.changeset.added: |
77 | 77 |
78 filenode_old = FileNode(node.path, '', EmptyChangeset()) | 78 filenode_old = FileNode(node.path, '', EmptyChangeset()) |
79 if filenode_old.is_binary or node.is_binary: | 79 if filenode_old.is_binary or node.is_binary: |
80 diff = wrap_to_table(_('binary file')) | 80 diff = wrap_to_table(_('binary file')) |
81 else: | 81 else: |
82 c.sum_added += node.size | 82 c.sum_added += node.size |
83 if c.sum_added < cut_off_limit: | 83 if c.sum_added < cut_off_limit: |
84 f_udiff = differ.get_udiff(filenode_old, node) | 84 f_udiff = differ.get_udiff(filenode_old, node) |
85 diff = differ.DiffProcessor(f_udiff).as_html() | 85 diff = differ.DiffProcessor(f_udiff).as_html() |
86 | 86 |
87 else: | 87 else: |
88 diff = wrap_to_table(_('Changeset is to big and was cut' | 88 diff = wrap_to_table(_('Changeset is to big and was cut' |
89 ' off, see raw changeset instead')) | 89 ' off, see raw changeset instead')) |
90 | 90 |
91 cs1 = None | 91 cs1 = None |
92 cs2 = node.last_changeset.short_id | 92 cs2 = node.last_changeset.raw_id |
93 c.changes.append(('added', node, diff, cs1, cs2)) | 93 c.changes.append(('added', node, diff, cs1, cs2)) |
94 | 94 |
95 #=================================================================== | 95 #=================================================================== |
96 # CHANGED FILES | 96 # CHANGED FILES |
97 #=================================================================== | 97 #=================================================================== |
98 c.sum_removed = 0 | 98 c.sum_removed = 0 |
99 for node in c.changeset.changed: | 99 for node in c.changeset.changed: |
100 try: | 100 try: |
101 filenode_old = c.changeset_old.get_node(node.path) | 101 filenode_old = c.changeset_old.get_node(node.path) |
102 except ChangesetError: | 102 except ChangesetError: |
103 filenode_old = FileNode(node.path, '', EmptyChangeset()) | 103 filenode_old = FileNode(node.path, '', EmptyChangeset()) |
104 | 104 |
105 if filenode_old.is_binary or node.is_binary: | 105 if filenode_old.is_binary or node.is_binary: |
106 diff = wrap_to_table(_('binary file')) | 106 diff = wrap_to_table(_('binary file')) |
107 else: | 107 else: |
108 | 108 |
109 if c.sum_removed < cut_off_limit: | 109 if c.sum_removed < cut_off_limit: |
110 f_udiff = differ.get_udiff(filenode_old, node) | 110 f_udiff = differ.get_udiff(filenode_old, node) |
111 diff = differ.DiffProcessor(f_udiff).as_html() | 111 diff = differ.DiffProcessor(f_udiff).as_html() |
112 if diff: | 112 if diff: |
113 c.sum_removed += len(diff) | 113 c.sum_removed += len(diff) |
114 else: | 114 else: |
115 diff = wrap_to_table(_('Changeset is to big and was cut' | 115 diff = wrap_to_table(_('Changeset is to big and was cut' |
116 ' off, see raw changeset instead')) | 116 ' off, see raw changeset instead')) |
117 | 117 |
118 | 118 |
119 cs1 = filenode_old.last_changeset.short_id | 119 cs1 = filenode_old.last_changeset.raw_id |
120 cs2 = node.last_changeset.short_id | 120 cs2 = node.last_changeset.raw_id |
121 c.changes.append(('changed', node, diff, cs1, cs2)) | 121 c.changes.append(('changed', node, diff, cs1, cs2)) |
122 | 122 |
123 #=================================================================== | 123 #=================================================================== |
124 # REMOVED FILES | 124 # REMOVED FILES |
125 #=================================================================== | 125 #=================================================================== |
126 for node in c.changeset.removed: | 126 for node in c.changeset.removed: |
127 c.changes.append(('removed', node, None, None, None)) | 127 c.changes.append(('removed', node, None, None, None)) |
128 | 128 |
129 return render('changeset/changeset.html') | 129 return render('changeset/changeset.html') |
130 | 130 |
131 def raw_changeset(self, revision): | 131 def raw_changeset(self, revision): |
132 | 132 |
133 hg_model = HgModel() | 133 hg_model = HgModel() |
134 method = request.GET.get('diff', 'show') | 134 method = request.GET.get('diff', 'show') |
135 try: | 135 try: |
136 c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) | 136 c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) |
137 except RepositoryError: | 137 except RepositoryError: |
138 log.error(traceback.format_exc()) | 138 log.error(traceback.format_exc()) |
139 return redirect(url('hg_home')) | 139 return redirect(url('home')) |
140 else: | 140 else: |
141 try: | 141 try: |
142 c.changeset_old = c.changeset.parents[0] | 142 c.changeset_old = c.changeset.parents[0] |
143 except IndexError: | 143 except IndexError: |
144 c.changeset_old = None | 144 c.changeset_old = None |
145 c.changes = [] | 145 c.changes = [] |
146 | 146 |
147 for node in c.changeset.added: | 147 for node in c.changeset.added: |
148 filenode_old = FileNode(node.path, '') | 148 filenode_old = FileNode(node.path, '') |
149 if filenode_old.is_binary or node.is_binary: | 149 if filenode_old.is_binary or node.is_binary: |
150 diff = _('binary file') | 150 diff = _('binary file') |
151 else: | 151 else: |
152 f_udiff = differ.get_udiff(filenode_old, node) | 152 f_udiff = differ.get_udiff(filenode_old, node) |
153 diff = differ.DiffProcessor(f_udiff).raw_diff() | 153 diff = differ.DiffProcessor(f_udiff).raw_diff() |
154 | 154 |
155 cs1 = None | 155 cs1 = None |
156 cs2 = node.last_changeset.short_id | 156 cs2 = node.last_changeset.raw_id |
157 c.changes.append(('added', node, diff, cs1, cs2)) | 157 c.changes.append(('added', node, diff, cs1, cs2)) |
158 | 158 |
159 for node in c.changeset.changed: | 159 for node in c.changeset.changed: |
160 filenode_old = c.changeset_old.get_node(node.path) | 160 filenode_old = c.changeset_old.get_node(node.path) |
161 if filenode_old.is_binary or node.is_binary: | 161 if filenode_old.is_binary or node.is_binary: |
162 diff = _('binary file') | 162 diff = _('binary file') |
163 else: | 163 else: |
164 f_udiff = differ.get_udiff(filenode_old, node) | 164 f_udiff = differ.get_udiff(filenode_old, node) |
165 diff = differ.DiffProcessor(f_udiff).raw_diff() | 165 diff = differ.DiffProcessor(f_udiff).raw_diff() |
166 | 166 |
167 cs1 = filenode_old.last_changeset.short_id | 167 cs1 = filenode_old.last_changeset.raw_id |
168 cs2 = node.last_changeset.short_id | 168 cs2 = node.last_changeset.raw_id |
169 c.changes.append(('changed', node, diff, cs1, cs2)) | 169 c.changes.append(('changed', node, diff, cs1, cs2)) |
170 | 170 |
171 response.content_type = 'text/plain' | 171 response.content_type = 'text/plain' |
172 if method == 'download': | 172 if method == 'download': |
173 response.content_disposition = 'attachment; filename=%s.patch' % revision | 173 response.content_disposition = 'attachment; filename=%s.patch' % revision |
174 parent = True if len(c.changeset.parents) > 0 else False | 174 parent = True if len(c.changeset.parents) > 0 else False |
175 c.parent_tmpl = 'Parent %s' % c.changeset.parents[0].raw_id if parent else '' | 175 c.parent_tmpl = 'Parent %s' % c.changeset.parents[0].raw_id if parent else '' |
176 | 176 |
177 c.diffs = '' | 177 c.diffs = '' |
178 for x in c.changes: | 178 for x in c.changes: |
179 c.diffs += x[2] | 179 c.diffs += x[2] |
180 | 180 |
181 return render('changeset/raw_changeset.html') | 181 return render('changeset/raw_changeset.html') |