Re: [PATCH] formatter: add context manager interface for convenience

2016-08-30 Thread Augie Fackler
On Wed, Aug 31, 2016 at 12:05:58AM +0900, Yuya Nishihara wrote:
> # HG changeset patch
> # User Yuya Nishihara 
> # Date 1472396405 -32400
> #  Mon Aug 29 00:00:05 2016 +0900
> # Node ID 41fea255bd1cda8d0f482b2582aec8a29f86c303
> # Parent  90af59b40d8a007fb8811daf0c3e64aca43aa6b0
> formatter: add context manager interface for convenience

Nice, queued.

>
> And port "hg files" to test it.
>
> As you can see, extra indent is necessary to port to this API. I don't think
> we should switch every fm.formatter() call to "with" statement.

Agreed, but for simple cases it's a nice readability and correctness win.

>
> diff --git a/mercurial/commands.py b/mercurial/commands.py
> --- a/mercurial/commands.py
> +++ b/mercurial/commands.py
> @@ -3963,15 +3963,11 @@ def files(ui, repo, *pats, **opts):
>  end = '\n'
>  if opts.get('print0'):
>  end = '\0'
> -fm = ui.formatter('files', opts)
>  fmt = '%s' + end
>
>  m = scmutil.match(ctx, pats, opts)
> -ret = cmdutil.files(ui, ctx, m, fm, fmt, opts.get('subrepos'))
> -
> -fm.end()
> -
> -return ret
> +with ui.formatter('files', opts) as fm:
> +return cmdutil.files(ui, ctx, m, fm, fmt, opts.get('subrepos'))
>
>  @command('^forget', walkopts, _('[OPTION]... FILE...'), inferrepo=True)
>  def forget(ui, repo, *pats, **opts):
> diff --git a/mercurial/formatter.py b/mercurial/formatter.py
> --- a/mercurial/formatter.py
> +++ b/mercurial/formatter.py
> @@ -52,6 +52,11 @@ class baseformatter(object):
>  self._item = None
>  # function to convert node to string suitable for this output
>  self.hexfunc = hex
> +def __enter__(self):
> +return self
> +def __exit__(self, exctype, excvalue, traceback):
> +if exctype is None:
> +self.end()
>  def __nonzero__(self):
>  '''return False if we're not doing real templating so we can
>  skip extra work'''
> ___
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


Re: [PATCH] formatter: add context manager interface for convenience

2016-08-30 Thread David Soria Parra
On Wed, Aug 31, 2016 at 12:05:58AM +0900, Yuya Nishihara wrote:
> # HG changeset patch
> # User Yuya Nishihara 
> # Date 1472396405 -32400
> #  Mon Aug 29 00:00:05 2016 +0900
> # Node ID 41fea255bd1cda8d0f482b2582aec8a29f86c303
> # Parent  90af59b40d8a007fb8811daf0c3e64aca43aa6b0
> formatter: add context manager interface for convenience
> 
> And port "hg files" to test it.
> 
> As you can see, extra indent is necessary to port to this API. I don't think
> we should switch every fm.formatter() call to "with" statement.
> 

LGTM
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


[PATCH] formatter: add context manager interface for convenience

2016-08-30 Thread Yuya Nishihara
# HG changeset patch
# User Yuya Nishihara 
# Date 1472396405 -32400
#  Mon Aug 29 00:00:05 2016 +0900
# Node ID 41fea255bd1cda8d0f482b2582aec8a29f86c303
# Parent  90af59b40d8a007fb8811daf0c3e64aca43aa6b0
formatter: add context manager interface for convenience

And port "hg files" to test it.

As you can see, extra indent is necessary to port to this API. I don't think
we should switch every fm.formatter() call to "with" statement.

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -3963,15 +3963,11 @@ def files(ui, repo, *pats, **opts):
 end = '\n'
 if opts.get('print0'):
 end = '\0'
-fm = ui.formatter('files', opts)
 fmt = '%s' + end
 
 m = scmutil.match(ctx, pats, opts)
-ret = cmdutil.files(ui, ctx, m, fm, fmt, opts.get('subrepos'))
-
-fm.end()
-
-return ret
+with ui.formatter('files', opts) as fm:
+return cmdutil.files(ui, ctx, m, fm, fmt, opts.get('subrepos'))
 
 @command('^forget', walkopts, _('[OPTION]... FILE...'), inferrepo=True)
 def forget(ui, repo, *pats, **opts):
diff --git a/mercurial/formatter.py b/mercurial/formatter.py
--- a/mercurial/formatter.py
+++ b/mercurial/formatter.py
@@ -52,6 +52,11 @@ class baseformatter(object):
 self._item = None
 # function to convert node to string suitable for this output
 self.hexfunc = hex
+def __enter__(self):
+return self
+def __exit__(self, exctype, excvalue, traceback):
+if exctype is None:
+self.end()
 def __nonzero__(self):
 '''return False if we're not doing real templating so we can
 skip extra work'''
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel