${h.link_to(h.wrap_paragraphs(c.changeset.message),h.url('changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}
% if len(c.changeset.affected_files) <= c.affected_files_cut_off:
${len(c.changeset.removed)}
${len(c.changeset.changed)}
${len(c.changeset.added)}
% else:
!
!
!
% endif
%if len(c.changeset.parents)>1:
${_('merge')}
%endif
%if c.changeset.parents:
%for p_cs in reversed(c.changeset.parents):
${_('Parent')} ${p_cs.revision}: ${h.link_to(h.short_id(p_cs.raw_id),
h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
%endfor
%else:
${_('No parents')}
%endif
${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}
%for tag in c.changeset.tags:
${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}
%endfor
${_('%s files affected with %s additions and %s deletions.') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
%for change,filenode,diff,cs1,cs2,stat in c.changes:
%if change != 'removed':
${h.link_to(h.safe_unicode(filenode.path),c.anchor_url(filenode.changeset.raw_id,filenode.path))}
%else:
${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=h.FID('',filenode.path)))}
%endif
${h.fancy_file_stats(stat)}
%endfor
% if c.cut_off:
${_('Changeset was too big and was cut off...')}
% endif