Jun Wu <quark@fb.com> [Wed, 27 Sep 2017 18:07:48 -0700] rev 34358
config: use copy-on-write to improve copy performance
Previously, chg's `verify` call could take 30+ms loading and checking new
config files. With one socket redirection, that adds up to around 70ms,
which is a lot for fast commands (ex. `bookmark --hidden`).
When investigating closer, A lot of time was spent on actually spent on ui
copying, which is mainly about `config.config` and `dict` copying.
This patch makes that 20x faster by adopting copy-on-write. The
copy-on-write is performed at config section level.
Before:
In [1]: %timeit ui.copy()
100 loops, best of 3: 2.32 ms per loop
After:
In [1]: %timeit ui.copy()
10000 loops, best of 3: 128 us per loop
2ms may look not that bad, but it adds up pretty quickly with multiple
calls. A typical chg run may call it 4 times, which is about 10ms.
Differential Revision: https://phab.mercurial-scm.org/D808
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 18:19:14 +0530] rev 34357
py3: whitelist 15 more tests passing on Python 3
We have reached the count of 75 tests passing on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D858
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 15:48:08 +0530] rev 34356
py3: use pycompat.bytestr instead of str
Differential Revision: https://phab.mercurial-scm.org/D855
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 15:45:15 +0530] rev 34355
py3: explicitly convert dict.keys() and dict.items() into a list
Differential Revision: https://phab.mercurial-scm.org/D853
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 18:02:53 +0530] rev 34354
py3: use '%d' instead of '%s' for integers
Differential Revision: https://phab.mercurial-scm.org/D856
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 15:46:36 +0530] rev 34353
py3: use pycompat.strkwargs() before passing a dict as keyword argument
Differential Revision: https://phab.mercurial-scm.org/D854
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 05:22:22 +0530] rev 34352
py3: return False early while checking whether None is a key in lazymanifest
In this patch we returns False early if we are trying to check whether None is a
key in lazymanifest. The reason I added a diff is that on Python 3, it goes into
the lazy manifest code an returns a TypeError. I checked with Durham that
whether None can be a possible key in lazymanifest and he said "no". So it's
safe to have this if statement.
This fixes `hg merge` on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D852
Martin von Zweigbergk <martinvonz@google.com> [Fri, 29 Sep 2017 14:49:05 -0700] rev 34351
dirstate: use keyword arguments to clarify status()'s callers
The arguments are especially non-obvious because the order is
different from dirstate.walk().
Differential Revision: https://phab.mercurial-scm.org/D847
Martin von Zweigbergk <martinvonz@google.com> [Fri, 29 Sep 2017 14:19:36 -0700] rev 34350
dirstate: use keyword arguments to clarify walk()'s callers
The arguments are especially non-obvious because the order is
different from dirstate.status().
Differential Revision: https://phab.mercurial-scm.org/D846
Martin von Zweigbergk <martinvonz@google.com> [Fri, 29 Sep 2017 14:23:41 -0700] rev 34349
perf: remove fallbacks to ancient versions of dirstate.walk()
If the call to dirstate.walk() failed, we would try to fall back to
older versions. These were removed in d3d1d39da2fa (walk: remove
cmdutil.walk, 2008-05-12) and f8299c84b5b6 (dirstate: fold statwalk
and walk, 2008-06-26). We don't care about testing performance of
versions that old versions at this point, so let's clean up.
Differential Revision: https://phab.mercurial-scm.org/D845