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')