[PATCH 2 of 2] profiling: allow logging profile to the blackbox
Durham Goode
durham at fb.com
Mon Sep 7 14:11:16 CDT 2015
# HG changeset patch
# User Durham Goode <durham at fb.com>
# Date 1441651256 25200
# Mon Sep 07 11:40:56 2015 -0700
# Node ID d72ff051c6c6dee945690b0e5554a0450820e93e
# Parent 2cd61d6e66c1034c97b7095fdf1d7908dd437b26
profiling: allow logging profile to the blackbox
This allows specifying '--config profiling.output=blackbox' which will log the
profile output to the blackbox (if enabled). This is useful for doing profiling
on the server since it allows us to record the command, it's result, any
exceptions, and it's profile, all in one spot. And we get log rotation for
free.
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -1021,7 +1021,10 @@ def _runcommand(ui, options, cmd, cmdfun
output = ui.config('profiling', 'output')
- if output:
+ if output == 'blackbox':
+ import StringIO
+ fp = StringIO.StringIO()
+ elif output:
path = ui.expandpath(output)
fp = open(path, 'wb')
else:
@@ -1036,6 +1039,10 @@ def _runcommand(ui, options, cmd, cmdfun
return statprofile(ui, checkargs, fp)
finally:
if output:
+ if output == 'blackbox':
+ val = "Profile:\n%s" % fp.getvalue()
+ val = val.replace('%', '%%')
+ ui.log('profile', val)
fp.close()
else:
return checkargs()
diff --git a/tests/test-profile.t b/tests/test-profile.t
--- a/tests/test-profile.t
+++ b/tests/test-profile.t
@@ -14,6 +14,9 @@ test --profile
$ hg --profile --config profiling.output=../out st
$ grep CallCount ../out > /dev/null || cat ../out
+ $ hg --profile --config profiling.output=blackbox --config extensions.blackbox= st
+ $ grep CallCount .hg/blackbox.log > /dev/null || cat .hg/blackbox.log
+
$ hg --profile --config profiling.format=text st 2>../out
$ grep CallCount ../out > /dev/null || cat ../out
More information about the Mercurial-devel
mailing list