profile: support --profile in alias and abbreviated version (--prof)
We now process the "--profile" a second time after alias has been processed and
the command argument fully parsed. If appropriate we enable profiling at that
time.
In these situation, the --profile will cover less than if the full --profile
flag was passed on the command line. This is better than the previous behavior
(flag ignored) and still fullfil multiple valid usecases.
--- a/mercurial/dispatch.py Fri Jun 09 11:42:45 2017 +0100
+++ b/mercurial/dispatch.py Fri Jun 09 12:36:07 2017 +0100
@@ -764,7 +764,7 @@
for ui_ in uis:
ui_.setconfig('profiling', 'enabled', 'true', '--profile')
- with profiling.maybeprofile(lui):
+ with profiling.maybeprofile(lui) as profiler:
# Configure extensions in phases: uisetup, extsetup, cmdtable, and
# reposetup. Programs like TortoiseHg will call _dispatch several
# times so we keep track of configured extensions in _loaded.
@@ -827,6 +827,8 @@
_("time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n") %
(t[4]-s[4], t[0]-s[0], t[2]-s[2], t[1]-s[1], t[3]-s[3]))
ui.atexit(print_time)
+ if options["profile"]:
+ profiler.start()
if options['verbose'] or options['debug'] or options['quiet']:
for opt in ('verbose', 'debug', 'quiet'):
--- a/tests/test-profile.t Fri Jun 09 11:42:45 2017 +0100
+++ b/tests/test-profile.t Fri Jun 09 12:36:07 2017 +0100
@@ -4,10 +4,24 @@
$ hg init a
$ cd a
-#if lsprof
test --profile
+ $ hg st --profile 2>&1 | grep Sample
+ Sample count: \d+ (re)
+
+Abreviated version
+
+ $ hg st --prof 2>&1 | grep Sample
+ Sample count: \d+ (re)
+
+In alias
+
+ $ hg --config "alias.profst=status --profile" profst 2>&1 | grep Sample
+ Sample count: \d+ (re)
+
+#if lsprof
+
$ prof='hg --config profiling.type=ls --profile'
$ $prof st 2>../out