Fri, 16 Jul 2021 17:29:16 +0200 dirstatemap: use the default code to handle "added" case
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
Fri, 16 Jul 2021 17:23:40 +0200 dirstatemap: use the default code to handle "removed" case
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
Fri, 16 Jul 2021 17:20:17 +0200 dirstatemap: use the default code to handle "clean-p2" case
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
Fri, 16 Jul 2021 17:14:56 +0200 dirstatemap: use the default code to handle "p2-tracked" case
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
Fri, 16 Jul 2021 17:10:52 +0200 dirstatemap: use the default code to handle "possibly_dirty" case
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
Fri, 16 Jul 2021 17:08:41 +0200 dirstatemap: use the default code to handle normal entry
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
Fri, 16 Jul 2021 17:03:39 +0200 dirstatemap: conclude `reset_state` with logic using the new __init__
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
Fri, 16 Jul 2021 16:29:16 +0200 dirstatemap: temporarily return early in `reset_state`
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
Fri, 16 Jul 2021 16:52:53 +0200 dirstate-item: feed more information to `__init__`
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
Fri, 20 Aug 2021 22:35:52 +0200 rust-dirstatemap: temporarily use `from_v1_data` in `addfile`
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
Fri, 16 Jul 2021 16:30:52 +0200 dirstatemap: temporarily use `from_v1_data` in `addfile`
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
Fri, 20 Aug 2021 18:11:49 +0200 dirstate-item: fix the declaration of the Cext `from_v1_meth`
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
Fri, 20 Aug 2021 22:30:30 +0200 dirstate-item: fix Cext declaration of dm_nonnormal and dm_otherparent
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
Fri, 20 Aug 2021 11:27:01 +0200 dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
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
Fri, 20 Aug 2021 11:23:52 +0200 dirstate: forward `remove` call to newer `API`
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
Wed, 25 Aug 2021 15:15:19 +0200 branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net> [Wed, 25 Aug 2021 15:15:19 +0200] rev 47919
branching: merge stable into default
Mon, 02 Aug 2021 08:05:13 -0400 store: return just one filename in walk functions
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
Sun, 01 Aug 2021 10:57:21 -0400 tests: rename test-clone-uncompressed.t
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
Fri, 06 Aug 2021 16:27:17 -0400 debugrebuildfncache: add a cheaper option to rebuild the fncache
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
Fri, 06 Aug 2021 16:17:17 -0400 test: reduce noise, so the important bits stand out
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
Tue, 24 Aug 2021 17:27:16 +0200 wireprotov1peer: update all rpcs to use the new batchable scheme
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
Tue, 24 Aug 2021 17:27:16 +0200 wireprotov1peer: simplify the way batchable rpcs are defined
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
Fri, 20 Aug 2021 11:23:41 +0200 dirstate: directly call the dirstatemap in `set_untracked`
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
Thu, 19 Aug 2021 17:42:55 +0200 resources: narrow the try:except clause to minimum
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
Sun, 22 Aug 2021 16:32:06 -0400 merge with stable
Matt Harbison <matt_harbison@yahoo.com> [Sun, 22 Aug 2021 16:32:06 -0400] rev 47910
merge with stable
Tue, 20 Jul 2021 17:20:19 +0200 hgwebdir: avoid systematic full garbage collection
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
Wed, 28 Jul 2021 13:45:07 +0300 obsolete: disable other evolution config options if createmarkers is off
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
Wed, 28 Jul 2021 13:47:21 +0300 fix: use obsolete.isenabled() to check for experimental.allowdivergence
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
Wed, 28 Jul 2021 13:45:41 +0300 rebase: use obsolete.isenabled() to check for experimental.allowdivergence
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
Fri, 30 Jul 2021 00:11:56 -0400 typing: add several assertions to dirstatemap to appease pytype
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
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 tip