[PATCH 1 of 6] profile: upgrade the "profile" context manager to a full class
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Mon Jun 12 11:06:25 EDT 2017
On 06/12/2017 03:33 PM, Yuya Nishihara wrote:
> On Fri, 09 Jun 2017 13:32:57 +0100, Pierre-Yves David wrote:
>> # HG changeset patch
>> # User Pierre-Yves David <pierre-yves.david at octobus.net>
>> # Date 1496882328 -3600
>> # Thu Jun 08 01:38:48 2017 +0100
>> # Node ID a3a4b52464f3dbaf533f62bca7512f42c6a6d449
>> # Parent 3ef319e9505f376775c91b2ab7d89ac9ac4343e9
>> # EXP-Topic profile
>> # Available At https://www.mercurial-scm.org/repo/users/marmoute/mercurial/
>> # hg pull https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ -r a3a4b52464f3
>> profile: upgrade the "profile" context manager to a full class
>
> Generally looks good. Queued, thanks.
>
>> + def __enter__(self):
>> + profiler = encoding.environ.get('HGPROF')
>> + proffn = None
>> + if profiler is None:
>> + profiler = self._ui.config('profiling', 'type', default='stat')
>> + if profiler not in ('ls', 'stat', 'flame'):
>> + # try load profiler from extension with the same name
>> + proffn = _loadprofiler(self._ui, profiler)
>> + if proffn is None:
>> + self._ui.warn(_("unrecognized profiler '%s' - ignored\n")
>> + % profiler)
>> + profiler = 'stat'
>>
>> - if output == 'blackbox':
>> - fp = util.stringio()
>> - elif output:
>> - path = ui.expandpath(output)
>> - fp = open(path, 'wb')
>> - else:
>> - fp = ui.ferr
>> + self._output = self._ui.config('profiling', 'output')
>>
>> - try:
>> + if self._output == 'blackbox':
>> + self._fp = util.stringio()
>> + elif self._output:
>> + path = self._ui.expandpath(self._output)
>> + self._fp = open(path, 'wb')
>> + else:
>> + self._fp = self._ui.ferr
>> +
>> if proffn is not None:
>> pass
>> elif profiler == 'ls':
>> @@ -179,18 +185,21 @@ def profile(ui):
>> else:
>> proffn = statprofile
>>
>> - with proffn(ui, fp):
>> - yield
>> + self._profiler = proffn(self._ui, self._fp)
>> + self._profiler.__enter__()
>
> Nit: Perhaps the output file should be closed if the initialization of
> self._profiler failed.
That is not a nit, this is a good semantic catch. I'll follow up with a
fix. Thanks.
Cheers,
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list