${h.gravatar_div(h.email_or_none(c.changeset.author), size=20)}
${h.person(c.changeset.author,'full_name_and_username')} - ${h.age(c.changeset.date,True)} ${h.fmt_date(c.changeset.date)}
${h.email_or_none(c.changeset.author)}
<% rev = c.changeset.extra.get('source') %>
%if rev:
${_('Grafted from:')} ${h.link_to(h.short_id(rev),h.url('changeset_home',repo_name=c.repo_name,revision=rev), class_="changeset_hash")}
%endif
<% rev = c.changeset.extra.get('transplant_source', '').encode('hex') %>
%if rev:
${_('Transplanted from:')} ${h.link_to(h.short_id(rev),h.url('changeset_home',repo_name=c.repo_name,revision=rev), class_="changeset_hash")}
%endif
% if hasattr(c.changeset, 'successors') and c.changeset.successors:
% for i, s in enumerate(c.changeset.successors):
<%
comma = ""
if i != len(c.changeset.successors)-1:
comma = ", "
%>
${s}${comma}
% endfor
% endif
% if hasattr(c.changeset, 'precursors') and c.changeset.precursors:
% for i, s in enumerate(c.changeset.precursors):
<%
comma = ""
if i != len(c.changeset.precursors)-1:
comma = ", "
%>
${s}${comma}
% endfor
% endif
${h.urlify_text(c.changeset.message, c.repo_name)}