diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -627,7 +627,7 @@ def diffordiffstat(ui, repo, diffopts, n # subpath. The best we can do is to ignore it. tempnode2 = None submatch = matchmod.narrowmatcher(subpath, match) - sub.diff(diffopts, tempnode2, submatch, changes=changes, + sub.diff(ui, diffopts, tempnode2, submatch, changes=changes, stat=stat, fp=fp, prefix=prefix) class changeset_printer(object): diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -330,7 +330,7 @@ class abstractsubrepo(object): def status(self, rev2, **opts): return [], [], [], [], [], [], [] - def diff(self, diffopts, node2, match, prefix, **opts): + def diff(self, ui, diffopts, node2, match, prefix, **opts): pass def outgoing(self, ui, dest, opts): @@ -437,14 +437,14 @@ class hgsubrepo(abstractsubrepo): % (inst, subrelpath(self))) return [], [], [], [], [], [], [] - def diff(self, diffopts, node2, match, prefix, **opts): + def diff(self, ui, diffopts, node2, match, prefix, **opts): try: node1 = node.bin(self._state[1]) # We currently expect node2 to come from substate and be # in hex format if node2 is not None: node2 = node.bin(node2) - cmdutil.diffordiffstat(self._repo.ui, self._repo, diffopts, + cmdutil.diffordiffstat(ui, self._repo, diffopts, node1, node2, match, prefix=os.path.join(prefix, self._path), listsubrepos=True, **opts) diff --git a/tests/test-diff-color.t b/tests/test-diff-color.t --- a/tests/test-diff-color.t +++ b/tests/test-diff-color.t @@ -125,6 +125,38 @@ qrecord c \x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m (esc) + $ hg qpop -a + popping patch + patch queue now empty + #endif +issue3712: test colorization of subrepo diff + + $ hg init sub + $ echo b > sub/b + $ hg -R sub commit -Am 'create sub' + adding b + $ echo 'sub = sub' > .hgsub + $ hg add .hgsub + $ hg commit -m 'add subrepo sub' + $ echo aa >> a + $ echo bb >> sub/b + + $ hg diff --color=always -S + \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc) + \x1b[0;31;1m--- a/a\x1b[0m (esc) + \x1b[0;32;1m+++ b/a\x1b[0m (esc) + \x1b[0;35m@@ -7,3 +7,4 @@\x1b[0m (esc) + a + c + c + \x1b[0;32m+aa\x1b[0m (esc) + \x1b[0;1mdiff --git a/sub/b b/sub/b\x1b[0m (esc) + \x1b[0;31;1m--- a/sub/b\x1b[0m (esc) + \x1b[0;32;1m+++ b/sub/b\x1b[0m (esc) + \x1b[0;35m@@ -1,1 +1,2 @@\x1b[0m (esc) + b + \x1b[0;32m+bb\x1b[0m (esc) + $ cd ..