diff --git a/kallithea/lib/vcs/backends/git/changeset.py b/kallithea/lib/vcs/backends/git/changeset.py --- a/kallithea/lib/vcs/backends/git/changeset.py +++ b/kallithea/lib/vcs/backends/git/changeset.py @@ -552,3 +552,5 @@ class GitChangeset(BaseChangeset): return [] return RemovedFileNodesGenerator([n for n in self._get_paths_for_status('deleted')], self) + + extra = {} diff --git a/kallithea/lib/vcs/backends/hg/changeset.py b/kallithea/lib/vcs/backends/hg/changeset.py --- a/kallithea/lib/vcs/backends/hg/changeset.py +++ b/kallithea/lib/vcs/backends/hg/changeset.py @@ -384,3 +384,7 @@ class MercurialChangeset(BaseChangeset): Returns list of removed ``FileNode`` objects. """ return RemovedFileNodesGenerator([n for n in self.status[2]], self) + + @LazyProperty + def extra(self): + return self._ctx.extra() diff --git a/kallithea/templates/changeset/changeset.html b/kallithea/templates/changeset/changeset.html --- a/kallithea/templates/changeset/changeset.html +++ b/kallithea/templates/changeset/changeset.html @@ -116,6 +116,18 @@ ${self.repo_context_bar('changelog', c.c ${h.person(c.changeset.author,'username_and_name')} - ${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))} +
+ %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))} +
+ %endif
${h.urlify_commit(c.changeset.message, c.repo_name)}