D1938: ui: Improve ui.write performance when not coloring on Windows

yuja (Yuya Nishihara) phabricator at mercurial-scm.org
Sat Feb 3 07:55:38 UTC 2018


yuja requested changes to this revision.
yuja added inline comments.
This revision now requires changes to proceed.

INLINE COMMENTS

> cmdutil.py:1593
>      else:
>          def write(s, **kw):
>              fp.write(s)

We no longer need this `write()` wrapper because no labeling is required if fp is given.

> cmdutil.py:1620
>      else:
> -        for chunk, label in patch.diffui(repo, node1, node2, match,
> -                                         changes, opts=diffopts, prefix=prefix,
> -                                         relroot=relroot,
> -                                         hunksfilterfn=hunksfilterfn):
> +        chunksiter = patch.diffui(repo, node1, node2, match, changes,
> +                                  opts=diffopts, prefix=prefix,

If we don't care labels, we can simply use `patch.diff()` and `.diffstat()` instead of `patch.diffui()` and `.diffstatui()` respectively.

> cmdutil.py:1624
> +
> +    from itertools import izip_longest
> +    def grouper(iterable, n):

Please move the import line to top.

> cmdutil.py:1629
> +
> +    if fp is None and ui.writenolabels():
> +        for block in grouper(chunksiter, 512):

`grouper()` could be replaced by `util.chunkbuffer()` over chunks of bytes.

  if nolabel:
      chunksiter = patch.diff()
      util.chunkbuffer(chunksiter)
  elif batchable:
      chunksiter = patch.diffui()
      util.chunkbuffer(ui.label(chunk, label) for chunk, label in chunksiter)

> ui.py:884
> +        if self._buffers and not opts.get(r'prompt', False):
> +            if not self._bufferapplylabels:
> +                return True

Perhaps we can simply make _colormode public instead of adding
these functions?

If ui is buffered, batchable state wouldn't matter as all write()s
will be combined into a string.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D1938

To: joerg.sonnenberger, #hg-reviewers, yuja
Cc: yuja, lothiraldan, mercurial-devel


More information about the Mercurial-devel mailing list