[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