Kyle Lippincott <spectral@google.com> [Wed, 11 Jul 2018 13:02:06 -0700] rev 38662
removeemptydirs: add test for `hg split` inside a disappearing directory
Differential Revision: https://phab.mercurial-scm.org/D3927
Martijn Pieters <mj@zopatista.com> [Wed, 11 Jul 2018 14:28:13 +0100] rev 38661
fncache: avoid loading the filename cache when not actually modifying it
With time, fncache can become very large. The mozilla-central repo for example,
has a 31M and growing fncache file. Loading this file takes time (280ms for the
mozilla-central repository).
In many scenarios, we don't need to load fncache at all. For example, when
committing changes to existing files, or pushing such commits to another clone.
This patch detects when a name is added via store.vfs(), and only loads the
cache if a) the data metadata file doesn't already exist, or b) when opening
for appending, the data or metadata file exists but has size (a transaction
rollback leaves behind such files).
Benchmarks (run on Macos 10.13 on a 2017-model Macbook Pro with Core i7 2.9GHz
and flash drive), each test without and with patch run 5 times:
* committing to an existing file, against the mozilla-central repository.
Baseline real time average 2.3736, with patch 1.9884.
* unbundling a large changeset consisting *only* of existing-file modifications
(159 revisions, 1050 modifications, mozilla-central
4a250a0e4f29:
beea9ac7d823), into a clone limited to the ancestor revision of
that revset). Baseline real time average 1.5048, with patch 1.3108.
Sune Foldager <cryo@cyanite.org> [Wed, 11 Jul 2018 16:11:33 +0200] rev 38660
tests: add diff color trailing whitespace test
Augie Fackler <augie@google.com> [Wed, 11 Jul 2018 13:40:50 -0400] rev 38659
scmutil: fix shortesthexnodeidprefix on Python 3 for 0-prefixed nodes
This fixes test-bookmarks.t on Python 3 (which had regressed.)
Differential Revision: https://phab.mercurial-scm.org/D3926
Augie Fackler <augie@google.com> [Wed, 11 Jul 2018 12:36:37 -0400] rev 38658
tests: add missing b prefix in test-context.py
# skip-blame just a b prefix
Differential Revision: https://phab.mercurial-scm.org/D3925
Augie Fackler <augie@google.com> [Wed, 11 Jul 2018 11:43:22 -0400] rev 38657
manifest: just duplicate the definition of items as iteritems
The forwarding trick was failing test-check-interfaces on Python
3. Duplicating a line of code is easy enough I'm doing that rather
than try and figure out what's going on in any kind of detail.
Differential Revision: https://phab.mercurial-scm.org/D3924
Augie Fackler <augie@google.com> [Wed, 11 Jul 2018 11:41:14 -0400] rev 38656
tests: properly sort imports in test-nointerrupt.t
Somehow this was only detected in Python 3.
Differential Revision: https://phab.mercurial-scm.org/D3923
Augie Fackler <augie@google.com> [Wed, 11 Jul 2018 11:34:41 -0400] rev 38655
revlog: adjust doctest examples to be portable to Python 3
The range() builtin returns a special object rather than a list, but
we really wanted a list in these examples.
Differential Revision: https://phab.mercurial-scm.org/D3922
Augie Fackler <augie@google.com> [Wed, 11 Jul 2018 13:41:47 -0400] rev 38654
py3: whitelist 3 more passing tests caught with the ratchet
Differential Revision: https://phab.mercurial-scm.org/D3921
Yuya Nishihara <yuya@tcha.org> [Tue, 10 Jul 2018 22:55:30 +0900] rev 38653
grep: hide cryptic revision number by default
I believe nobody would want to see the "
2147483647:" prefix while grepping
working directory files.
The wdir revision is still visible if "-r wdir()" is specified since a revset
may point to more than one revisions, and it seems confusing to change the
visibility dynamically by the number of the matched revisions.
Differential Revision: https://phab.mercurial-scm.org/D3920
Yuya Nishihara <yuya@tcha.org> [Wed, 11 Jul 2018 22:06:04 +0900] rev 38652
grep: restore pre-
9ef10437bb88 behavior, enable wdir search by tweakdefaults
Unfortunately, python-hglib relies on the original grep behavior and is
documented as such. Even though we agreed to introduce the BC, we shouldn't
break existing libraries.
So this patch flips the default again and move the new default to
ui.tweakdefaults. We could instead use HGPLAIN to turn this flag off, but
that would be rather confusing as the old/new behaviors are quite different.
Differential Revision: https://phab.mercurial-scm.org/D3919
Yuya Nishihara <yuya@tcha.org> [Wed, 11 Jul 2018 21:51:47 +0900] rev 38651
grep: add config knob to enable/disable the default wdir search
This allows us to conditionally enable the new behavior to unbreak
python-hglib. See the next patch.
The config option is undocumented since the --all-files is still experimental
and isn't fully implemented. It can be moved to [experimental] if that's
preferred.
Differential Revision: https://phab.mercurial-scm.org/D3918
Yuya Nishihara <yuya@tcha.org> [Wed, 11 Jul 2018 21:35:31 +0900] rev 38650
grep: search working directory files by default if --all-files is specified
The default was -rtip:0 before, but "--all-files -rtip:0" would be the most
useless combination, and it isn't supported yet. Let's change the default to
something useful.
This isn't flagged as BC since --all-files isn't released.
Differential Revision: https://phab.mercurial-scm.org/D3917
Yuya Nishihara <yuya@tcha.org> [Wed, 11 Jul 2018 21:23:18 +0900] rev 38649
grep: reject --diff --all-files
This combination doesn't make any sense since --diff is the flag to search
change history, whereas --all-files is to include unmodified contents.
Differential Revision: https://phab.mercurial-scm.org/D3916
Yuya Nishihara <yuya@tcha.org> [Wed, 11 Jul 2018 21:15:52 +0900] rev 38648
grep: rename --allfiles to --all-files
This matches the config name to be added.
Note that we don't have to keep the old flag since it isn't released yet.
Differential Revision: https://phab.mercurial-scm.org/D3915
Boris Feld <boris.feld@octobus.net> [Wed, 11 Jul 2018 13:48:44 +0200] rev 38647
debugdeltachain: protect against 0 readsize
If you don't read any data, read density should be 1.
Paul Morelle <paul.morelle@octobus.net> [Thu, 21 Jun 2018 18:19:57 +0200] rev 38646
debugdeltachain: avoid division by zero when a chain is empty
The two ratios chainratio and extraratio are computed using dividers
that may be zero when the file is empty.
As the denominators are integers, the limit of the ratio "just before zero" is
the numerator value itself.
If the numerator itself is zero, the ratio value is still meaningful: in both
cases, a "good" value is a low ratio, and a size of zero is the optimal case.
Danny Hooper <hooper@google.com> [Mon, 09 Jul 2018 15:33:49 -0700] rev 38645
tests: prevent conflict markers in test case from triggering warnings
Broadly, having lines that begin with several '<' tends to trigger tools that
try to warn you about unresolved conflicts. It will save some headaches to
tweak this string literal to avoid that.
Differential Revision: https://phab.mercurial-scm.org/D3897
Boris Feld <boris.feld@octobus.net> [Tue, 10 Jul 2018 12:20:57 +0200] rev 38644
revlog: enforce chunk slicing down to a certain size
Limit maximum chunk size to 4x final size when reading a revision from a
revlog. We only apply this logic when the target size is known from the
revlog.
Ideally, revlog's delta chain would be written in a way that does not trigger
this extra slicing often. However, having this second guarantee that we won't
read unexpectedly large amounts of memory in all cases is important for the
future. Future delta chain building algorithms might have good reason to
create delta chain with such characteristics.
Including this code in core as soon as possible will make Mercurial 4.7
forward-compatible with such improvement.
Boris Feld <boris.feld@octobus.net> [Tue, 10 Jul 2018 11:57:33 +0200] rev 38643
revlog: postprocess chunk to slice them down to a certain size
After the density slicing is done, we enforce a maximum chunk size to avoid
memory consumption issue.
Boris Feld <boris.feld@octobus.net> [Wed, 11 Jul 2018 00:35:01 -0700] rev 38642
revlog: add function to slice chunk down to a given size
It is possible to encounter situations where the slicing based on density did
not achieve chunk smaller than the 4*textlength limit. To avoid extra memory
consumption in those cases, we need to be able to break down chunk to a given
size. Actual caller comes in the next changesets.
Boris Feld <boris.feld@octobus.net> [Tue, 10 Jul 2018 11:53:36 +0200] rev 38641
revlog: extract density based slicing into its own function
We are going to introduce another slicing step. We start by extracting the
existing one into its own function.
Boris Feld <boris.feld@octobus.net> [Tue, 10 Jul 2018 10:34:33 +0200] rev 38640
revlog: document and test _slicechunk
Boris Feld <boris.feld@octobus.net> [Tue, 10 Jul 2018 10:18:46 +0200] rev 38639
revlog: add a doctest for _segmentspan
Boris Feld <boris.feld@octobus.net> [Tue, 10 Jul 2018 10:04:44 +0200] rev 38638
revlog: add a doctest to _trimchunk
Boris Feld <boris.feld@octobus.net> [Tue, 10 Jul 2018 10:04:31 +0200] rev 38637
revlog: introduce a tiny mock of a revlog class
This will be used in various function doctest added in the next changesets.
The class seems small enough to live in the module directly.
Paul Morelle <paul.morelle@octobus.net> [Thu, 17 May 2018 15:10:36 +0200] rev 38636
revlog: _segmentspan computes the byte span of a segment
Refactor out this code to be used somewhere else in a next changeset
Boris Feld <boris.feld@octobus.net> [Tue, 10 Jul 2018 15:17:05 -0700] rev 38635
revlog: early return in _slicechunk when span is already small enough
If the full span is smaller than the minimum gap size we'll consider, we know we
won't do any slicing and we can return earlier.
Paul Morelle <paul.morelle@octobus.net> [Tue, 19 Jun 2018 15:03:58 +0200] rev 38634
revlog: early return in _slicechunk when density is already good
We don't need to do anything if we know we won't enter the second while loop.
Save the overhead of the first loop by returning earlier.
Boris Feld <boris.feld@octobus.net> [Tue, 10 Jul 2018 02:33:43 +0200] rev 38633
sparse-read: discard gap below 65K only
Testing on actual data shows that 65K is more efficient in both time and memory
than 256K.