Martin von Zweigbergk <martinvonz@google.com> [Wed, 16 Jan 2019 16:55:52 -0800] rev 41269
bdiff: drop duplicate definition of splitnewlines()
It was added in 29dd37a418aa (bdiff: write a native version of
splitnewlines, 2018-01-25).
Differential Revision: https://phab.mercurial-scm.org/D5618
Matt Harbison <matt_harbison@yahoo.com> [Wed, 16 Jan 2019 21:54:16 -0500] rev 41268
tests: also skip remotefilelog *.py tests on Windows
Otherwise, the buildbot won't even be green on stable with the RC. This should
have gone with 0800d9e6e216. Previous discussion in this thread:
https://www.mercurial-scm.org/pipermail/mercurial-devel/2018-November/125421.html
Pulkit Goyal <pulkit@yandex-team.ru> [Wed, 16 Jan 2019 23:44:08 +0530] rev 41267
py3: add 10 more passing tests caught by ratchet
Thanks to Augie who fixed these tests recently.
Differential Revision: https://phab.mercurial-scm.org/D5616
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 10:56:39 -0500] rev 41266
remotefilelog: import Queue on Python 2, and queue on Python 3
Differential Revision: https://phab.mercurial-scm.org/D5599
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:57:20 -0500] rev 41265
py3: all fastannotate tests now pass
Differential Revision: https://phab.mercurial-scm.org/D5615
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:56:43 -0500] rev 41264
fastannotate: adapt to buffer() going a way in Python 3
There's probably something more efficient I could do here, but I'm disinclined
to spend much time on this at the moment.
Differential Revision: https://phab.mercurial-scm.org/D5614
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:56:08 -0500] rev 41263
fastannotate: use pycompat.maplist instead of map
Differential Revision: https://phab.mercurial-scm.org/D5613
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:55:49 -0500] rev 41262
fastannotate: slice strings to get single character
Behaves identically on Python 3 and Python 2.
Differential Revision: https://phab.mercurial-scm.org/D5612
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:55:01 -0500] rev 41261
fastannotate: fix isinstance checks to be against bytes instead of str
Differential Revision: https://phab.mercurial-scm.org/D5611
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:33:43 -0500] rev 41260
absorb: add a pycompat.bytestr() to fix --edit-lines functionality on Python 3
Differential Revision: https://phab.mercurial-scm.org/D5610
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:03:04 -0500] rev 41259
remotefilelog: fix some bytes/str portability issues for Python 3
A few remotefilelog tests still fail on Python 3, but it's a much better story
now.
Differential Revision: https://phab.mercurial-scm.org/D5609
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:02:20 -0500] rev 41258
shallowutil: fsdecode the bytes group name before passing to os
Differential Revision: https://phab.mercurial-scm.org/D5608
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:01:45 -0500] rev 41257
shallowutil: slice off a byte instead of subscripting
This behaves identically on Python 2 and 3.
Differential Revision: https://phab.mercurial-scm.org/D5607
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:01:16 -0500] rev 41256
remotefilelog: check against bytes type instead of buffer and coerce to bytes
Fixes Python 3 compat here.
Differential Revision: https://phab.mercurial-scm.org/D5606
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 11:00:10 -0500] rev 41255
remotefilelog: use list comprehension instead of filter for py3 portability
Differential Revision: https://phab.mercurial-scm.org/D5605
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 10:59:32 -0500] rev 41254
tests: fix up uses of xrange in remotefilelog tests for py3
Differential Revision: https://phab.mercurial-scm.org/D5604
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 10:59:09 -0500] rev 41253
tests: add missing b prefixes in remotefilelog-getflogheads.py
# skip-blame just b prefixes
Differential Revision: https://phab.mercurial-scm.org/D5603
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 10:58:31 -0500] rev 41252
tests: make python oneliner portable to python 3 in remotefilelog test
Differential Revision: https://phab.mercurial-scm.org/D5602
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 10:58:09 -0500] rev 41251
remotefilelog: implement __bool__ as well as __nonzero__ for py3
Differential Revision: https://phab.mercurial-scm.org/D5601
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 10:57:38 -0500] rev 41250
remotefilelog: fix logging in retry decorator
This still fails with an error about no exception being available to
re-raise, but so it goes.
Differential Revision: https://phab.mercurial-scm.org/D5600
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 10:56:15 -0500] rev 41249
basepack: avoid 'rbe' mode in Python 3
Differential Revision: https://phab.mercurial-scm.org/D5598
Augie Fackler <augie@google.com> [Wed, 16 Jan 2019 10:55:42 -0500] rev 41248
remotefilelog: do file IO in terms of bytes
Differential Revision: https://phab.mercurial-scm.org/D5597
Georges Racinet <georges.racinet@octobus.net> [Fri, 30 Nov 2018 14:35:57 +0100] rev 41247
rust-cpython: using MissingAncestors from Python code
As precedently done with LazyAncestors on cpython.rs, we test for the
presence of the 'rustext' module.
incrementalmissingrevs() has two callers within the Mercurial core:
`setdiscovery.partialdiscovery` and the `only()` revset.
This move shows a significant discovery performance improvement
in cases where the baseline is slow: using perfdiscovery on the PyPy
repos, prepared with `contrib/discovery-helper <repo> 50 100`, we
get averaged medians of 403ms with the Rust version vs 742ms without
(about 45% better).
But there are still indications that performance can be worse in cases
the baseline is fast, possibly due to the conversion from Python to
Rust and back becoming the bottleneck. We could measure this on
mozilla-central in cases were the delta is just a few changesets.
This requires confirmation, but if that's the reason, then an
upcoming `partialdiscovery` fully in Rust should solve the problem.
Differential Revision: https://phab.mercurial-scm.org/D5551
Georges Racinet <georges.racinet@octobus.net> [Mon, 14 Jan 2019 17:07:39 +0100] rev 41246
rust: MissingAncestors.basesheads()
This new API method on `MissingAncestors` leverages directly the
Rust implementation for relative heads of a set, and also
lowers the cost of returning the results to Python in the context of
discovery.
These interchange costs can probably be further reduced by implementing
the `partialdiscovery` class in Rust, but that will be investigated in the
5.0 development cycle.
Differential Revision: https://phab.mercurial-scm.org/D5584
Georges Racinet <georges.racinet@octobus.net> [Mon, 14 Jan 2019 18:52:01 +0100] rev 41245
discovery: using the new basesheads()
Our ultimate goal is to switch eventually to a Rust implementation, but
this move actually seems to increase the performance in a pure Python
build.
What follows is a quick measurement done on PyPy on repos prepared with
`contrib/discovery-helper.sh 50 100`.
Before:
! wall 0.894384 comb 0.890000 user 0.890000 sys 0.000000 (best of 11)
! wall 0.971199 comb 0.970000 user 0.950000 sys 0.020000 (max of 11)
! wall 0.927993 comb 0.925455 user 0.919091 sys 0.006364 (avg of 11)
! wall 0.921619 comb 0.920000 user 0.910000 sys 0.010000 (median of 11)
After:
! wall 0.614278 comb 0.610000 user 0.610000 sys 0.000000 (best of 14)
! wall 0.789459 comb 0.790000 user 0.770000 sys 0.020000 (max of 14)
! wall 0.722765 comb 0.720000 user 0.715714 sys 0.004286 (avg of 14)
! wall 0.734448 comb 0.720000 user 0.720000 sys 0.000000 (median of 14)
Differential Revision: https://phab.mercurial-scm.org/D5583
Georges Racinet <georges.racinet@octobus.net> [Mon, 14 Jan 2019 18:36:09 +0100] rev 41244
ancestor: incrementalmissingancestors.basesheads()
This new method will avoid the need to access the `bases` attribute directly
in `setdiscovery`, and to prefilter `nullrev` before passing it to the
`heads()` revset.
Being a method, it can transparently be reimplemented in a Rust (or any native)
version.
Differential Revision: https://phab.mercurial-scm.org/D5582
Georges Racinet <georges.racinet@octobus.net> [Mon, 14 Jan 2019 17:46:14 +0100] rev 41243
rust-cpython: set conversion for MissingAncestors.bases()
Also I hope that the separate `py_set()` helper will help transition
to proper `PySet` support in `rust-cpython`
Took the opportunity to replace explict for loop with iteration
and collect().
Differential Revision: https://phab.mercurial-scm.org/D5581
Georges Racinet on ishtar.racinet.fr <georges@racinet.fr> [Mon, 14 Jan 2019 10:07:48 +0100] rev 41242
rust: dagop.headrevs() Rust counterparts
This introduces two Rust implementations for `mercurial.dagop.headrevs`.
The algorithm is identical to the Python version.
Depending on the caller, one or the other could be the most practical, or
the most performant, by minimizing the amount of memory copy and allocations.
Differential Revision: https://phab.mercurial-scm.org/D5580
Georges Racinet <georges.racinet@octobus.net> [Mon, 14 Jan 2019 20:42:25 +0100] rev 41241
rust: factorized testing Graphs
it will useful to use these outside of `ancestors`, too.
Differential Revision: https://phab.mercurial-scm.org/D5579
Georges Racinet <georges.racinet@octobus.net> [Sat, 12 Jan 2019 16:57:04 +0100] rev 41240
rust-cpython: moved generic conversion fn out of ancestors module
This will allow to use it easily from other submodules
Differential Revision: https://phab.mercurial-scm.org/D5578