comparison rhodecode/controllers/changeset.py @ 1130:1cecc7db3106 beta

fixed some limits in changesets and changelogs
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 13 Mar 2011 13:38:07 +0100
parents ce4287e3e3c9
children 461f5acc7bbb
comparison
equal deleted inserted replaced
1129:fe7fa9942015 1130:1cecc7db3106
50 @LoginRequired() 50 @LoginRequired()
51 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', 51 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
52 'repository.admin') 52 'repository.admin')
53 def __before__(self): 53 def __before__(self):
54 super(ChangesetController, self).__before__() 54 super(ChangesetController, self).__before__()
55 c.affected_files_cut_off = 60
55 56
56 def index(self, revision): 57 def index(self, revision):
57 58
58 def wrap_to_table(str): 59 def wrap_to_table(str):
59 60
64 </tr> 65 </tr>
65 </table>''' % str 66 </table>''' % str
66 67
67 #get ranges of revisions if preset 68 #get ranges of revisions if preset
68 rev_range = revision.split('...')[:2] 69 rev_range = revision.split('...')[:2]
69 range_limit = 50 70
70 try: 71 try:
71 if len(rev_range) == 2: 72 if len(rev_range) == 2:
72 rev_start = rev_range[0] 73 rev_start = rev_range[0]
73 rev_end = rev_range[1] 74 rev_end = rev_range[1]
74 rev_ranges = c.rhodecode_repo.get_changesets(start=rev_start, 75 rev_ranges = c.rhodecode_repo.get_changesets(start=rev_start,
84 return redirect(url('home')) 85 return redirect(url('home'))
85 86
86 c.changes = OrderedDict() 87 c.changes = OrderedDict()
87 c.sum_added = 0 88 c.sum_added = 0
88 c.sum_removed = 0 89 c.sum_removed = 0
89 90 c.cut_off = False
90 91
91 for changeset in c.cs_ranges: 92 for changeset in c.cs_ranges:
92 c.changes[changeset.raw_id] = [] 93 c.changes[changeset.raw_id] = []
93 try: 94 try:
94 changeset_parent = changeset.parents[0] 95 changeset_parent = changeset.parents[0]
110 diff = differ.DiffProcessor(f_gitdiff, format='gitdiff').as_html() 111 diff = differ.DiffProcessor(f_gitdiff, format='gitdiff').as_html()
111 112
112 else: 113 else:
113 diff = wrap_to_table(_('Changeset is to big and was cut' 114 diff = wrap_to_table(_('Changeset is to big and was cut'
114 ' off, see raw changeset instead')) 115 ' off, see raw changeset instead'))
116 c.cut_off = True
117 break
115 118
116 cs1 = None 119 cs1 = None
117 cs2 = node.last_changeset.raw_id 120 cs2 = node.last_changeset.raw_id
118 c.changes[changeset.raw_id].append(('added', node, diff, cs1, cs2)) 121 c.changes[changeset.raw_id].append(('added', node, diff, cs1, cs2))
119 122
120 #================================================================== 123 #==================================================================
121 # CHANGED FILES 124 # CHANGED FILES
122 #================================================================== 125 #==================================================================
123 for node in changeset.changed: 126 if not c.cut_off:
124 try: 127 for node in changeset.changed:
125 filenode_old = changeset_parent.get_node(node.path) 128 try:
126 except ChangesetError: 129 filenode_old = changeset_parent.get_node(node.path)
127 filenode_old = FileNode(node.path, '', EmptyChangeset()) 130 except ChangesetError:
128 131 filenode_old = FileNode(node.path, '', EmptyChangeset())
129 if filenode_old.is_binary or node.is_binary: 132
130 diff = wrap_to_table(_('binary file')) 133 if filenode_old.is_binary or node.is_binary:
131 else: 134 diff = wrap_to_table(_('binary file'))
132
133 if c.sum_removed < self.cut_off_limit:
134 f_gitdiff = differ.get_gitdiff(filenode_old, node)
135 diff = differ.DiffProcessor(f_gitdiff, format='gitdiff').as_html()
136 if diff:
137 c.sum_removed += len(diff)
138 else: 135 else:
139 diff = wrap_to_table(_('Changeset is to big and was cut' 136
140 ' off, see raw changeset instead')) 137 if c.sum_removed < self.cut_off_limit:
141 138 f_gitdiff = differ.get_gitdiff(filenode_old, node)
142 139 diff = differ.DiffProcessor(f_gitdiff, format='gitdiff').as_html()
143 cs1 = filenode_old.last_changeset.raw_id 140 if diff:
144 cs2 = node.last_changeset.raw_id 141 c.sum_removed += len(diff)
145 c.changes[changeset.raw_id].append(('changed', node, diff, cs1, cs2)) 142 else:
143 diff = wrap_to_table(_('Changeset is to big and was cut'
144 ' off, see raw changeset instead'))
145 c.cut_off = True
146 break
147
148 cs1 = filenode_old.last_changeset.raw_id
149 cs2 = node.last_changeset.raw_id
150 c.changes[changeset.raw_id].append(('changed', node, diff, cs1, cs2))
146 151
147 #================================================================== 152 #==================================================================
148 # REMOVED FILES 153 # REMOVED FILES
149 #================================================================== 154 #==================================================================
150 for node in changeset.removed: 155 if not c.cut_off:
151 c.changes[changeset.raw_id].append(('removed', node, None, None, None)) 156 for node in changeset.removed:
157 c.changes[changeset.raw_id].append(('removed', node, None, None, None))
152 158
153 if len(c.cs_ranges) == 1: 159 if len(c.cs_ranges) == 1:
154 c.changeset = c.cs_ranges[0] 160 c.changeset = c.cs_ranges[0]
155 c.changes = c.changes[c.changeset.raw_id] 161 c.changes = c.changes[c.changeset.raw_id]
156 162
178 filenode_old = FileNode(node.path, '') 184 filenode_old = FileNode(node.path, '')
179 if filenode_old.is_binary or node.is_binary: 185 if filenode_old.is_binary or node.is_binary:
180 diff = _('binary file') + '\n' 186 diff = _('binary file') + '\n'
181 else: 187 else:
182 f_gitdiff = differ.get_gitdiff(filenode_old, node) 188 f_gitdiff = differ.get_gitdiff(filenode_old, node)
183 diff = differ.DiffProcessor(f_gitdiff).raw_diff() 189 diff = differ.DiffProcessor(f_gitdiff, format='gitdiff').raw_diff()
184 190
185 cs1 = None 191 cs1 = None
186 cs2 = node.last_changeset.raw_id 192 cs2 = node.last_changeset.raw_id
187 c.changes.append(('added', node, diff, cs1, cs2)) 193 c.changes.append(('added', node, diff, cs1, cs2))
188 194
190 filenode_old = c.changeset_parent.get_node(node.path) 196 filenode_old = c.changeset_parent.get_node(node.path)
191 if filenode_old.is_binary or node.is_binary: 197 if filenode_old.is_binary or node.is_binary:
192 diff = _('binary file') 198 diff = _('binary file')
193 else: 199 else:
194 f_gitdiff = differ.get_gitdiff(filenode_old, node) 200 f_gitdiff = differ.get_gitdiff(filenode_old, node)
195 diff = differ.DiffProcessor(f_gitdiff).raw_diff() 201 diff = differ.DiffProcessor(f_gitdiff, format='gitdiff').raw_diff()
196 202
197 cs1 = filenode_old.last_changeset.raw_id 203 cs1 = filenode_old.last_changeset.raw_id
198 cs2 = node.last_changeset.raw_id 204 cs2 = node.last_changeset.raw_id
199 c.changes.append(('changed', node, diff, cs1, cs2)) 205 c.changes.append(('changed', node, diff, cs1, cs2))
200 206