Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 16 Jul 2021 17:29:16 +0200] rev 47934
dirstatemap: use the default code to handle "added" case
This one is very easy too.
Differential Revision: https://phab.mercurial-scm.org/D11328
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 16 Jul 2021 17:23:40 +0200] rev 47933
dirstatemap: use the default code to handle "removed" case
This one is very easy.
Differential Revision: https://phab.mercurial-scm.org/D11327
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 16 Jul 2021 17:20:17 +0200] rev 47932
dirstatemap: use the default code to handle "clean-p2" case
This simplify the conditionnal a bit since most of it is handled by the common
code.
Differential Revision: https://phab.mercurial-scm.org/D11326
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 16 Jul 2021 17:14:56 +0200] rev 47931
dirstatemap: use the default code to handle "p2-tracked" case
We juste have to do minor value adjustement and the default code will do the rest.
This kind of change highglight that "clean_p2" is probably not the right name,
for that value. However this is all thing to be figured out and cleaned up once
are done moving logic at lower level.
Differential Revision: https://phab.mercurial-scm.org/D11325
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 16 Jul 2021 17:10:52 +0200] rev 47930
dirstatemap: use the default code to handle "possibly_dirty" case
This case is quite simple too
Differential Revision: https://phab.mercurial-scm.org/D11324
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 16 Jul 2021 17:08:41 +0200] rev 47929
dirstatemap: use the default code to handle normal entry
This case is quite simple.
Differential Revision: https://phab.mercurial-scm.org/D11323
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 16 Jul 2021 17:03:39 +0200] rev 47928
dirstatemap: conclude `reset_state` with logic using the new __init__
Now the DirstateItem can deal with most of the logic related to its
initialization, our goal is to migrate the function to a more "unified" way were
minimal processing is done early before more generic code gets into play.
Nobody is calling this code yet, but this is about to change.
Differential Revision: https://phab.mercurial-scm.org/D11322
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 16 Jul 2021 16:29:16 +0200] rev 47927
dirstatemap: temporarily return early in `reset_state`
We are about to migrate `addfile` to the new `DirstateItem__init__` and having
these early return will the new series of patches to be clearer.
Differential Revision: https://phab.mercurial-scm.org/D11321
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 16 Jul 2021 16:52:53 +0200] rev 47926
dirstate-item: feed more information to `__init__`
Instead of processing the "rich" value at the `dirstatemap` level, we can now directly pass them to the DirstateItem object. This will make the object free to store whatever its want and to implements it logic whatever its want.
For now… we simply process the flag and store the same good old value. However
this pave the way for doing things differently once the rest of dirstatemap
code is updated.
Nobody call this code yet.
Differential Revision: https://phab.mercurial-scm.org/D11320
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 20 Aug 2021 22:35:52 +0200] rev 47925
rust-dirstatemap: temporarily use `from_v1_data` in `addfile`
We are about to change the `__init__` for `DirstateItem`. To make the
transition easier, we move existing caller to `DirstateItem.from_v1_data`.
The Rust dirstate map will need an overall once the durst settle anyway.
Differential Revision: https://phab.mercurial-scm.org/D11319
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 16 Jul 2021 16:30:52 +0200] rev 47924
dirstatemap: temporarily use `from_v1_data` in `addfile`
We are about to change the `__init__` for `DirstateItem`. To make the
transition easier, we move existing caller to `DirstateItem.from_v1_data`.
Differential Revision: https://phab.mercurial-scm.org/D11318
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 20 Aug 2021 18:11:49 +0200] rev 47923
dirstate-item: fix the declaration of the Cext `from_v1_meth`
This method is apparently not called from anywhere since the declaration was
garbage.
We will start calling it in the next changeset.
Differential Revision: https://phab.mercurial-scm.org/D11317
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 20 Aug 2021 22:30:30 +0200] rev 47922
dirstate-item: fix Cext declaration of dm_nonnormal and dm_otherparent
These are property, not method.
Differential Revision: https://phab.mercurial-scm.org/D11316
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 20 Aug 2021 11:27:01 +0200] rev 47921
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
All the other caller goes through `reset_state`, so we can safely have an
explicit method on `DirstateItem` object.
This means that all the logic to preserve the previous state (from p2, merged,
etc) is now properly encapsulated within the DirstateItem. This pave the way to
using different storage for these information.
Differential Revision: https://phab.mercurial-scm.org/D11315
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 20 Aug 2021 11:23:52 +0200] rev 47920
dirstate: forward `remove` call to newer `API`
The `_remove` method was only called in the deprecated `remove` function. We
merge the two and express it in terms of call to new API methods.
Differential Revision: https://phab.mercurial-scm.org/D11314
Raphaël Gomès <rgomes@octobus.net> [Wed, 25 Aug 2021 15:15:19 +0200] rev 47919
branching: merge stable into default
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Mon, 02 Aug 2021 08:05:13 -0400] rev 47918
store: return just one filename in walk functions
Various walk functions return `(revlog_type, decoded, encoded)` where
decoded could be None. But no-one cares about `encoded` and expects
`unencoded` to be present, except verify (because this can only happen
with old repo formats).
Simplify all this by either failing outright if a decoding a filename
fails (instead of almost certainly failing with a type error due to
treating None as a bytes), or skipping the filename but providing in
an out argument for hg verify.
Differential Revision: https://phab.mercurial-scm.org/D11248
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Sun, 01 Aug 2021 10:57:21 -0400] rev 47917
tests: rename test-clone-uncompressed.t
as clone --uncompressed is deprecated in favor of --stream
Differential Revision: https://phab.mercurial-scm.org/D11237
Valentin Gatien-Baron <vgatien-baron@janestreet.com> [Fri, 06 Aug 2021 16:27:17 -0400] rev 47916
debugrebuildfncache: add a cheaper option to rebuild the fncache
On my repository, debugrebuildfncache takes 5-10min with the lock.
With the flag added in this commit, it takes 10s. The tradeoff is that
it only recovers from certain kinds of corruptions. It is intended to
to recover faster from fncaches broken by a revlog split during a
transaction that ends up being rolled back.
Differential Revision: https://phab.mercurial-scm.org/D11265
Valentin Gatien-Baron <vgatien-baron@janestreet.com> [Fri, 06 Aug 2021 16:17:17 -0400] rev 47915
test: reduce noise, so the important bits stand out
Differential Revision: https://phab.mercurial-scm.org/D11264
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Tue, 24 Aug 2021 17:27:16 +0200] rev 47914
wireprotov1peer: update all rpcs to use the new batchable scheme
If desired, we could keep the future class and the function that
upgrades an old style rpc instead of a new style, for extensions.
Differential Revision: https://phab.mercurial-scm.org/D11212
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Tue, 24 Aug 2021 17:27:16 +0200] rev 47913
wireprotov1peer: simplify the way batchable rpcs are defined
The scheme with futures/generator is confusing due to the way
communication is done by side effects, especially with two different
"future" objects. Just returning a request and a function to read the
response is easier to understand.
There are tests failures with the largefiles extension due to it
aliasing one rpc to another one, which gets fixed in the next commit.
Differential Revision: https://phab.mercurial-scm.org/D11211
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 20 Aug 2021 11:23:41 +0200] rev 47912
dirstate: directly call the dirstatemap in `set_untracked`
This function is only called in two places: the deprecated "remove" method and
in the new `set_untracked` method.
So we simply inline the appropriate content in `set_untracked`, paving the way
to dropping the deprecated code and its associated function.
Differential Revision: https://phab.mercurial-scm.org/D11313
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 19 Aug 2021 17:42:55 +0200] rev 47911
resources: narrow the try:except clause to minimum
Otherwise this mind hides other import or attribute errors.
Differential Revision: https://phab.mercurial-scm.org/D11312
Matt Harbison <matt_harbison@yahoo.com> [Sun, 22 Aug 2021 16:32:06 -0400] rev 47910
merge with stable
Georges Racinet <georges.racinet@octobus.net> [Tue, 20 Jul 2021 17:20:19 +0200] rev 47909
hgwebdir: avoid systematic full garbage collection
Forcing a systematic full garbage collection upon each request
can serioulsy harm performance. This is reported as
https://bz.mercurial-scm.org/show_bug.cgi?id=6075
With this change we're performing the full collection according
to a new setting, `experimental.web.full-garbage-collection-rate`.
The default value is 1, which doesn't change the behavior and will
allow us to test on real use cases. If the value is 0, no full garbage
collection occurs.
Regardless of the value of the setting, a partial garbage collection
still occurs upon each request (not attempting to collect objects from
the oldest generation). This should be enough to take care of
reference cycles that have been created by the last request
(assessment of this requires changing the setting, not to be 1).
In my experience chasing memory leaks in Mercurial servers,
the full collection never reclaimed any memory, but this is with
Python 3 and biased towards small repositories.
On the other hand, as explained in the Python developer docs [1],
frequent full collections are very harmful in terms of performance if
lots of objects survive the collection, and hence stay in the
oldest generation. Note that `gc.collect()` is indeed trying to
collect the oldest generation [2]. This happens usually in two cases:
- unwanted lingering objects (i.e., an actual memory leak that
the GC cannot do anything about). Sadly, we have lots of those
these days.
- desireable long-term objects, typically in caches (not inner caches
carried by repositories, which should be collected with them). This
is a subject of interest for the Heptapod project.
In short, the flat rate that this change still permits is
probably a bad idea in most cases, and the default value can
be tweaked later on (or even be set to 0) according to experiments
in the wild.
The test is inspired from test-hgwebdir-paths.py
[1] https://devguide.python.org/garbage_collector/#collecting-the-oldest-generation
[2] https://docs.python.org/3/library/gc.html#gc.collect
Differential Revision: https://phab.mercurial-scm.org/D11204
Anton Shestakov <av6@dwimlabs.net> [Wed, 28 Jul 2021 13:45:07 +0300] rev 47908
obsolete: disable other evolution config options if createmarkers is off
We used to raise an abort in this case, but recent changes to local clone
command (377d8fc20e34) resulted in destrepo both caring about
experimental.evolution config options and not initializing extensions.
So imagine if you had evolve and allowdivergence enabled in your ~/.hgrc. Local
clone stopped working after 377d8fc20e34 because evolve sets
experimental.evolution=all, but only on srcrepo, for destrepo the extension is
not initialized. It's possible to make local cloning work by initializing
extensions for destrepo in some cases, but in other cases (e.g. allowdivergence
in ~/.hgrc, evolve extension in original-repo/.hg/hgrc) it would still fail.
In a discussion with Pierre-Yves David it was decided to simply force other
evolution options to be false if createmarkers is not enabled.
Differential Revision: https://phab.mercurial-scm.org/D11223
Anton Shestakov <av6@dwimlabs.net> [Wed, 28 Jul 2021 13:47:21 +0300] rev 47907
fix: use obsolete.isenabled() to check for experimental.allowdivergence
Now that obsolete.isenabled() can also check if divergence is allowed, let's
use it for consistency. Other experimental.evolution options are already
checked via this function.
Differential Revision: https://phab.mercurial-scm.org/D11222
Anton Shestakov <av6@dwimlabs.net> [Wed, 28 Jul 2021 13:45:41 +0300] rev 47906
rebase: use obsolete.isenabled() to check for experimental.allowdivergence
Now that obsolete.isenabled() can also check if divergence is allowed, let's
use it for consistency. Other experimental.evolution options are already
checked via this function.
Differential Revision: https://phab.mercurial-scm.org/D11221
Matt Harbison <matt_harbison@yahoo.com> [Fri, 30 Jul 2021 00:11:56 -0400] rev 47905
typing: add several assertions to dirstatemap to appease pytype
I think it's been mentioned in IRC that these can't be None in this case. This
fixes:
File "/mnt/c/Users/Matt/hg/mercurial/dirstatemap.py", line 213, in addfile: unsupported operand type(s) for &: 'None' and 'int' [unsupported-operands]
No attribute '__and__' on None or '__rand__' on int
Called from (traceback):
line 290, in reset_state
File "/mnt/c/Users/Matt/hg/mercurial/dirstatemap.py", line 214, in addfile: unsupported operand type(s) for &: 'None' and 'int' [unsupported-operands]
No attribute '__and__' on None or '__rand__' on int
Called from (traceback):
line 290, in reset_state
Differential Revision: https://phab.mercurial-scm.org/D11235