diff mercurial/debugcommands.py @ 46782:67a2ecea8bd9

debugdiscovery: also integrate the discovery output in the json one We add a way for formatter to informs code that free output is unwanted, and we incorporate it in the json output. Differential Revision: https://phab.mercurial-scm.org/D10224
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 15 Mar 2021 17:09:42 +0100
parents 3a8cf5b9c820
children b6ac612445e0
line wrap: on
line diff
--- a/mercurial/debugcommands.py	Mon Mar 15 16:55:03 2021 +0100
+++ b/mercurial/debugcommands.py	Mon Mar 15 17:09:42 2021 +0100
@@ -9,6 +9,7 @@
 
 import codecs
 import collections
+import contextlib
 import difflib
 import errno
 import glob
@@ -1089,8 +1090,21 @@
 
     remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches, revs=None)
     localrevs = opts[b'rev']
-    with util.timedcm('debug-discovery') as t:
-        common, hds = doit(localrevs, remoterevs)
+
+    fm = ui.formatter(b'debugdiscovery', opts)
+    if fm.strict_format:
+
+        @contextlib.contextmanager
+        def may_capture_output():
+            ui.pushbuffer()
+            yield
+            data[b'output'] = ui.popbuffer()
+
+    else:
+        may_capture_output = util.nullcontextmanager
+    with may_capture_output():
+        with util.timedcm('debug-discovery') as t:
+            common, hds = doit(localrevs, remoterevs)
 
     # compute all statistics
     heads_common = set(common)
@@ -1141,7 +1155,6 @@
     data[b'nb-ini_und-common'] = len(common_initial_undecided)
     data[b'nb-ini_und-missing'] = len(missing_initial_undecided)
 
-    fm = ui.formatter(b'debugdiscovery', opts)
     fm.startitem()
     fm.data(**pycompat.strkwargs(data))
     # display discovery summary