Mercurial > kallithea
changeset 1257:0a2a10a1912f beta
Implemented --stat for changelog
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Thu, 14 Apr 2011 00:43:23 +0200 |
parents | c93234e9ac36 |
children | 3954bdaf6243 |
files | rhodecode/controllers/changeset.py rhodecode/lib/helpers.py rhodecode/public/css/style.css rhodecode/templates/changeset/changeset.html |
diffstat | 4 files changed, 100 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/controllers/changeset.py Wed Apr 13 00:39:15 2011 +0200 +++ b/rhodecode/controllers/changeset.py Thu Apr 14 00:43:23 2011 +0200 @@ -86,6 +86,8 @@ c.changes = OrderedDict() c.sum_added = 0 c.sum_removed = 0 + c.lines_added = 0 + c.lines_deleted = 0 c.cut_off = False for changeset in c.cs_ranges: @@ -106,9 +108,8 @@ c.sum_added += node.size if c.sum_added < self.cut_off_limit: f_gitdiff = differ.get_gitdiff(filenode_old, node) - diff = differ.DiffProcessor(f_gitdiff, - format='gitdiff').as_html() - + d = differ.DiffProcessor(f_gitdiff, format='gitdiff') + diff = d.as_html() else: diff = wrap_to_table(_('Changeset is to big and ' 'was cut off, see raw ' @@ -118,8 +119,11 @@ cs1 = None cs2 = node.last_changeset.raw_id - c.changes[changeset.raw_id].append(('added', node, - diff, cs1, cs2)) + st = d.stat() + c.lines_added += st[0] + c.lines_deleted += st[1] + c.changes[changeset.raw_id].append(('added', node, diff, + cs1, cs2, st)) #================================================================== # CHANGED FILES @@ -138,9 +142,10 @@ if c.sum_removed < self.cut_off_limit: f_gitdiff = differ.get_gitdiff(filenode_old, node) - diff = differ.DiffProcessor(f_gitdiff, - format='gitdiff')\ - .as_html() + d = differ.DiffProcessor(f_gitdiff, + format='gitdiff') + diff = d.as_html() + if diff: c.sum_removed += len(diff) else: @@ -152,8 +157,11 @@ cs1 = filenode_old.last_changeset.raw_id cs2 = node.last_changeset.raw_id - c.changes[changeset.raw_id].append(('changed', node, - diff, cs1, cs2)) + st = d.stat() + c.lines_added += st[0] + c.lines_deleted += st[1] + c.changes[changeset.raw_id].append(('changed', node, diff, + cs1, cs2, st)) #================================================================== # REMOVED FILES @@ -161,7 +169,7 @@ if not c.cut_off: for node in changeset.removed: c.changes[changeset.raw_id].append(('removed', node, None, - None, None)) + None, None, None)) if len(c.cs_ranges) == 1: c.changeset = c.cs_ranges[0]
--- a/rhodecode/lib/helpers.py Wed Apr 13 00:39:15 2011 +0200 +++ b/rhodecode/lib/helpers.py Thu Apr 14 00:43:23 2011 +0200 @@ -622,7 +622,8 @@ suf = '' if len(nodes) > 30: suf = '<br/>' + _(' and %s more') % (len(nodes) - 30) - return literal(pref + '<br/> '.join([safe_unicode(x.path) for x in nodes[:30]]) + suf) + return literal(pref + '<br/> '.join([safe_unicode(x.path) + for x in nodes[:30]]) + suf) else: return ': ' + _('No Files') @@ -635,6 +636,56 @@ return repo_name else: def make_link(group): - return link_to(group.group_name, url('repos_group', id=group.group_id)) + return link_to(group.group_name, url('repos_group', + id=group.group_id)) return literal(' » '.join(map(make_link, groups)) + \ " » " + repo_name) + + +def fancy_file_stats(stats): + a, d, t = stats[0], stats[1], stats[0] + stats[1] + width = 100 + unit = float(width) / t + + a_p = max(9, unit * a) if a > 0 else 0# needs > 9% to be visible + d_p = max(9, unit * d) if d > 0 else 0 # needs > 9% to be visible + p_sum = a_p + d_p + + if p_sum > width: + #adjust the percentage to be == 100% since we adjusted to 9 + if a_p > d_p: + a_p = a_p - (p_sum - width) + else: + d_p = d_p - (p_sum - width) + + a_v = a if a > 0 else '' + d_v = d if d > 0 else '' + + + def cgen(l_type): + mapping = {'tr':'top-right-rounded-corner', + 'tl':'top-left-rounded-corner', + 'br':'bottom-right-rounded-corner', + 'bl':'bottom-left-rounded-corner'} + map_getter = lambda x:mapping[x] + + if l_type == 'a' and d_v: + #case when added and deleted are present + return ' '.join(map(map_getter, ['tl', 'bl'])) + + if l_type == 'a' and not d_v: + return ' '.join(map(map_getter, ['tr', 'br', 'tl', 'bl'])) + + if l_type == 'd' and a_v: + return ' '.join(map(map_getter, ['tr', 'br'])) + + if l_type == 'd' and not a_v: + return ' '.join(map(map_getter, ['tr', 'br', 'tl', 'bl'])) + + + + d_a = '<div class="added %s" style="width:%s%%">%s</div>' % (cgen('a'), + a_p, a_v) + d_d = '<div class="deleted %s" style="width:%s%%">%s</div>' % (cgen('d'), + d_p, d_v) + return literal('<div style="width:%spx">%s%s</div>' % (width, d_a, d_d))
--- a/rhodecode/public/css/style.css Wed Apr 13 00:39:15 2011 +0200 +++ b/rhodecode/public/css/style.css Thu Apr 14 00:43:23 2011 +0200 @@ -1546,6 +1546,24 @@ font-weight: bold; } +.cs_files .node{ +float: left; +} +.cs_files .changes{ +float: right; +} +.cs_files .changes .added{ +background-color: #BBFFBB; +float: left; +text-align: center; +font-size: 90%; +} +.cs_files .changes .deleted{ +background-color: #FF8888; +float: left; +text-align: center; +font-size: 90%; +} .cs_files .cs_added { background:url("../images/icons/page_white_add.png") no-repeat scroll 3px; height:16px;
--- a/rhodecode/templates/changeset/changeset.html Wed Apr 13 00:39:15 2011 +0200 +++ b/rhodecode/templates/changeset/changeset.html Thu Apr 14 00:43:23 2011 +0200 @@ -86,10 +86,16 @@ </span> </div> </div> - <span style="font-size:1.1em;font-weight: bold">${_('Files affected (%s)' % len(c.changeset.affected_files))}</span> + <span style="font-size:1.1em;font-weight: bold"> + ${_('%s files affected with %s additions and %s deletions.') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)} + </span> <div class="cs_files"> - %for change,filenode,diff,cs1,cs2 in c.changes: - <div class="cs_${change}">${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=h.repo_name_slug('C%s' % h.safe_unicode(filenode.path))))}</div> + %for change,filenode,diff,cs1,cs2,stat in c.changes: + <div class="cs_${change}"> + <div class="node">${h.link_to(h.safe_unicode(filenode.path), + h.url.current(anchor=h.repo_name_slug('C%s' % h.safe_unicode(filenode.path))))}</div> + <div class="changes">${h.fancy_file_stats(stat)}</div> + </div> %endfor % if c.cut_off: ${_('Changeset was to big and was cut off...')} @@ -99,7 +105,7 @@ </div> - %for change,filenode,diff,cs1,cs2 in c.changes: + %for change,filenode,diff,cs1,cs2,stat in c.changes: %if change !='removed': <div style="clear:both;height:10px"></div> <div class="diffblock">