diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -685,6 +685,14 @@
             if tostrip:
                 repair.delayedstrip(repo.ui, repo, tostrip, operation)
 
+def showchanges(replacements, fm):
+    """ output the hash changes using formatter instance which is passed.
+    """
+    nodesdict = {short(pred): [short(s) for s in succs]
+                for pred, succs in replacements.iteritems()}
+    fm.write('hashchanges', '%s\n',
+            fm.formatdict(nodesdict, fmt='%r --> %r', sep='\n'))
+
 def addremove(repo, matcher, prefix, opts=None, dry_run=None, similarity=None):
     if opts is None:
         opts = {}