Thu, 08 Jun 2023 14:28:21 +0200 revlog: avoid possible collision between directory and temporary index stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 14:28:21 +0200] rev 50662
revlog: avoid possible collision between directory and temporary index Since 6.4, we create a temporary index file to write the split data without overwriting the inline version too early. However, the store encoding does not prevent these new `.i.s` file to collide with a directory with the same name. While the odds for such a collision to happens are fairly low, the collision would prevent Mercurial from working. The store encoding have a mitigation solution in place to prevent such collisions from happening for `.i` and `.d` files, but not for other extensions. We cannot update this encoding scheme to solve the issue since it would diverge from older version of Mercurial. Instead, we create an alternative directory tree dedicated to such files. The use of the `.i` extension combined with store encoding will prevent collisions there.
Thu, 08 Jun 2023 11:08:19 +0200 revlog: move the computation of the split_index path in a property stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 11:08:19 +0200] rev 50661
revlog: move the computation of the split_index path in a property This is about to become more complex, so we gather the logic in a single place.
Mon, 05 Jun 2023 16:43:27 +0200 rust-dirstate: fall back to v1 if reading v2 failed stable
Raphaël Gomès <rgomes@octobus.net> [Mon, 05 Jun 2023 16:43:27 +0200] rev 50660
rust-dirstate: fall back to v1 if reading v2 failed This will help us not fail when a v1 dirstate is present on disk while a v2 was expected (which could happen with a racy/interrupted upgrade).
Mon, 05 Jun 2023 17:29:52 +0200 dirstate: add test showing dirstate version mismatch causes an error stable
Raphaël Gomès <rgomes@octobus.net> [Mon, 05 Jun 2023 17:29:52 +0200] rev 50659
dirstate: add test showing dirstate version mismatch causes an error We should fall back to trying dirstate v1 when v2 fails to read.
Mon, 05 Jun 2023 16:30:25 +0200 rust-dirstate: rename `has_dirstate_v2` to `use_dirstate_v2` stable
Raphaël Gomès <rgomes@octobus.net> [Mon, 05 Jun 2023 16:30:25 +0200] rev 50658
rust-dirstate: rename `has_dirstate_v2` to `use_dirstate_v2` It is closer to the right semantics. I added a docstring to better explain the reasonning. In the next patch(es), I will address the underlying issue of finding the "wrong" version of the dirstate on disk.
Mon, 05 Jun 2023 03:11:26 +0200 delta-find: fix pulled-delta-reuse-policy=forced behavior stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 05 Jun 2023 03:11:26 +0200] rev 50657
delta-find: fix pulled-delta-reuse-policy=forced behavior The code that select delta still has too many oportunity to discard the delta is has been forcibly asked to reuse. However is is fairly easy to use a dedicated fastpath for this case. So we do so. Cleaning other code that tries to enforce that policy will be done on default.
Thu, 08 Jun 2023 03:49:44 +0200 delta-find: display more information about the search in some case stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 03:49:44 +0200] rev 50656
delta-find: display more information about the search in some case This will be useful to access the effect of the delta reuse policy.
Thu, 08 Jun 2023 03:05:10 +0200 deltafind: issue debug information when we fast-path rivial case too stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 03:05:10 +0200] rev 50655
deltafind: issue debug information when we fast-path rivial case too More debug options never hurts.
Thu, 08 Jun 2023 03:11:51 +0200 delta-find: gather the condition to blindly use a full snapshot together stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 03:11:51 +0200] rev 50654
delta-find: gather the condition to blindly use a full snapshot together We are about to make the `if` body bigger, so having only one of them is simpler/
Thu, 08 Jun 2023 02:49:10 +0200 delta-find: initialize the debug information much sooner (when possible) stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 02:49:10 +0200] rev 50653
delta-find: initialize the debug information much sooner (when possible) This help us to record debug information in alternative path.
Thu, 08 Jun 2023 02:42:28 +0200 delta-find: fix `parents` round detection stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 02:42:28 +0200] rev 50652
delta-find: fix `parents` round detection We should compare integer with integer, instead of bytes (node).
Thu, 08 Jun 2023 02:35:03 +0200 delta-find: intrduce a `_one_dbg_data` method stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 02:35:03 +0200] rev 50651
delta-find: intrduce a `_one_dbg_data` method This helps with the initialisation of the expected debug information.
Thu, 08 Jun 2023 01:52:35 +0200 delta-find: move final debug processing in a `_dbg_process_data` method stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 01:52:35 +0200] rev 50650
delta-find: move final debug processing in a `_dbg_process_data` method This will help us making sure we can call the necessary debugging code in alternative codepath.
Thu, 08 Jun 2023 01:19:01 +0200 delta-fine: use the `_debug_search` attribute directly stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 01:19:01 +0200] rev 50649
delta-fine: use the `_debug_search` attribute directly By adjusting the value at creation time, we can avoid the need to use and intermediate variable.
Thu, 08 Jun 2023 01:11:47 +0200 delta-find: move the `gather_debug` logic in a property stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 01:11:47 +0200] rev 50648
delta-find: move the `gather_debug` logic in a property This will make it simpler to get be reused in multiple places.
Thu, 08 Jun 2023 01:07:00 +0200 tests: check `pulled-delta-reuse-policy=forced` without general delta stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2023 01:07:00 +0200] rev 50647
tests: check `pulled-delta-reuse-policy=forced` without general delta If general delta is not available, the amount of delta we can reuse at all will be more limited. We check that application still work and does not corrupt the repository.
Wed, 31 May 2023 18:08:56 +0100 tree-manifest: allow `debugupgraderepo` to run on tree manifest repo
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 31 May 2023 18:08:56 +0100] rev 50646
tree-manifest: allow `debugupgraderepo` to run on tree manifest repo There does not seems to be anything wrong with running the current logic on them. So we remove the limitation.
Tue, 25 Apr 2023 15:28:40 +0200 bundles: clarify streaming v2 bundle usage stable
Mathias De Mare <mathias.de_mare@nokia.com> [Tue, 25 Apr 2023 15:28:40 +0200] rev 50645
bundles: clarify streaming v2 bundle usage This seems useful to clarify through the documentation (we were still using debugcreatestreamclonebundle, even though 'hg bundle' is already an option...).
Wed, 31 May 2023 16:04:16 +0100 stream-clone: update debugcreatestreamclonebundle helps
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 31 May 2023 16:04:16 +0100] rev 50644
stream-clone: update debugcreatestreamclonebundle helps People to stop using streamv1, so we should point them to alternative in the place where people might find it.
Thu, 25 May 2023 00:23:05 +0200 rewrite: simplify the `retained_extras` extra logic
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 25 May 2023 00:23:05 +0200] rev 50643
rewrite: simplify the `retained_extras` extra logic First, we move the definition of value outside of the rebase extensions, as this apply to all rebase-like operation and some live in other place (like evolve). Second we make it a simple set, so that it is easy for an extension to add a new value in it. Third, we move the associated logic in core too. That make it easily available to other extensions. Fourth we simplify it usage, as the verbose version of the filtering is just a handful on line long, we are just going to test all the value for updates, so the Projection overlay is not bringing much here. Note that, we make it a module level set, is a key is worth preserving it is probably worth preserving in all cases. This was already the behavior prior to this change.
Mon, 05 Jun 2023 11:07:08 +0200 revlog: fix a bug in revlog splitting stable
Arseniy Alekseyev <aalekseyev@janestreet.com> [Mon, 05 Jun 2023 11:07:08 +0200] rev 50642
revlog: fix a bug in revlog splitting Specifically, if the .i.s files are not added to the transaction, then a follow-up modification of such a file records it into transaction as non-empty, which is incorrect.
Mon, 29 May 2023 18:41:58 +0200 stream-clone: smoothly detect and handle a case were a revlog is split
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 18:41:58 +0200] rev 50641
stream-clone: smoothly detect and handle a case were a revlog is split This detect and handle the most common case for a race condition around stream and revlog splitting. The one were the revlog is split between the initial collection of data and the time were we start considering stream that data. In such case, we repatch an inlined version of that revlog together when this happens. This is necessary as stream-v2 promised a specific number of bytes and a specific number of files to the client. In stream-v3, we will have the opportunity to just send a split revlog instead. Getting a better version of the protocol for stream-v3 is still useful, but it is no longer a blocket to fix that race condition. Note that another, rarer race condition exist, were the revlog is split while we creating the revlog and extracing content from it. This can be dealt with later.
Mon, 29 May 2023 14:07:58 +0200 stream-clone: implement decidated `get_streams` method for revlog
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 14:07:58 +0200] rev 50640
stream-clone: implement decidated `get_streams` method for revlog For revlog, we can do better using the maximum linkrev expected. This approach open the way to dealing with a much larger set of non-trivial changes, like splitting of inline revlogs. We will actually tackle this issue in the next changesets (thanks to this one).
Sun, 28 May 2023 05:52:58 +0200 stream-clone: make it the responsability of the store entry to stream content
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 28 May 2023 05:52:58 +0200] rev 50639
stream-clone: make it the responsability of the store entry to stream content The store entry has more context, this will especially be true when it comes to revlogs. So we move the details of how to retrieve binary content to the StoreEntry. The stream clone code now focus on the protocol bits.
Mon, 29 May 2023 11:42:16 +0200 store: declare a `files` method on BaseStoreEntry
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 11:42:16 +0200] rev 50638
store: declare a `files` method on BaseStoreEntry This will help pytype to type check. We have to move `StoreFile` earlier in the file to use it in the type declaration.
Sun, 28 May 2023 05:23:46 +0200 revlog: add a `get_revlog` method
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 28 May 2023 05:23:46 +0200] rev 50637
revlog: add a `get_revlog` method This might seen weird, but I actually thing we have been needing this for a long time. There is multiple object that kind of pretend being revlogs while actually wrapping the actual revlog. Since multiple code needs to access the actuel revlog. See documentation for more details. Expect cleanup of various places one the current series is done.
Mon, 29 May 2023 04:26:39 +0200 stream-clone: drop the _emit_v2 function
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 04:26:39 +0200] rev 50636
stream-clone: drop the _emit_v2 function It has no user left.
Mon, 29 May 2023 04:24:39 +0200 stream-clone: directly use `_entries_walk` to generate stream-v2
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 04:24:39 +0200] rev 50635
stream-clone: directly use `_entries_walk` to generate stream-v2 This does not requires that much changes and will give us much more flexibility, like improving revlog handling to gracefully handle race situation.
Mon, 29 May 2023 04:12:30 +0200 stream-clone: pre-indent some code
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 04:12:30 +0200] rev 50634
stream-clone: pre-indent some code This make the next changeset clearer.
Sun, 28 May 2023 04:12:10 +0200 local-clone: perform the hardlink/copy based from _entries_walk returns
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 28 May 2023 04:12:10 +0200] rev 50633
local-clone: perform the hardlink/copy based from _entries_walk returns We previously used `_v2_walk`. However it is not bringing us much. So lets use the higher level function instead. This will offer us more flexibility with the `_v2_walk` function… like deleting it eventually.
Mon, 29 May 2023 04:24:29 +0200 store: cache the file_size when we get it from disk
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 04:24:29 +0200] rev 50632
store: cache the file_size when we get it from disk The point of caching `files` is to ensure consistency and avoiding redoing expensive work. So we cache the file_size once retrieved.
Sun, 28 May 2023 03:46:48 +0200 store: cache the `files()` return for store entries
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 28 May 2023 03:46:48 +0200] rev 50631
store: cache the `files()` return for store entries This make it more efficient to directly use the entries list to retrieve data in various location. It also make the entry record the file size it previously promissed to user code, especially the stream clone code.
Sat, 27 May 2023 04:22:18 +0200 stream-clone: introduce a richer TempCopyManager object
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2023 04:22:18 +0200] rev 50630
stream-clone: introduce a richer TempCopyManager object This replace the previous `copy` callable with a richer object that allow access to the backup path. This will simplify the user code as they won't need to keep and pass around the backup path explicitly.
Mon, 29 May 2023 13:29:01 +0200 store: properly compute the targer_id of manifestlog in no-fncache walk
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 13:29:01 +0200] rev 50629
store: properly compute the targer_id of manifestlog in no-fncache walk Creating RevlogStoreEntry is good, but we need to drop the final `00manifest` part to create something correct.
Mon, 29 May 2023 13:28:33 +0200 store: do not drop the final `/` when creating manifestlog instance
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 13:28:33 +0200] rev 50628
store: do not drop the final `/` when creating manifestlog instance This bug, inherited from the upgrade code leads to the acces/creation of broken revlog with name `DIRECTORY00manifest.i` instead of `DIRECTORY/00manifest.i` We fix it in its own changeset to preserve the "pure code movement" aspect of the previous changesets.
Sat, 27 May 2023 04:01:17 +0200 store: add a `get_revlog_instance` method on revlog entries
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2023 04:01:17 +0200] rev 50627
store: add a `get_revlog_instance` method on revlog entries The upgrade code needs this a lot, and the stream code is about to needs it too. So we start by moving the upgrade code in a more generic location.
Mon, 29 May 2023 02:22:20 +0200 stream-clone: add a test that highlight crash on revlog splitting
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 02:22:20 +0200] rev 50626
stream-clone: add a test that highlight crash on revlog splitting This has been a long running problem, we should have a tests for it.
Mon, 29 May 2023 01:38:59 +0200 stream-clone: remove unused code in test-clone-stream.t
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 01:38:59 +0200] rev 50625
stream-clone: remove unused code in test-clone-stream.t We are not using the extension we create inline, we are using `tests/testlib/ext-stream-clone-steps.py`. So let us deleted the unused version.
Mon, 29 May 2023 01:38:34 +0200 stream-clone: document the ext-stream-clone-steps.py utility extension
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 01:38:34 +0200] rev 50624
stream-clone: document the ext-stream-clone-steps.py utility extension This extension is useful, let us clarify how to use it.
Mon, 29 May 2023 12:15:10 +0200 test-treemanifest: cleanup the test to more easily show server side error
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2023 12:15:10 +0200] rev 50623
test-treemanifest: cleanup the test to more easily show server side error This made my life easier debugging.
Thu, 01 Jun 2023 22:32:21 +0100 test: make test-contrib-perf.t more robust stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 01 Jun 2023 22:32:21 +0100] rev 50622
test: make test-contrib-perf.t more robust Some code path are far too fast now. We raise de number to make sure the run keep to that floor.
Thu, 02 Feb 2023 17:26:10 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:26:10 +0100] rev 50621
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:37:51 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:37:51 +0100] rev 50620
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Fri, 03 Feb 2023 02:57:49 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 03 Feb 2023 02:57:49 +0100] rev 50619
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Fri, 03 Feb 2023 01:05:41 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 03 Feb 2023 01:05:41 +0100] rev 50618
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Fri, 03 Feb 2023 01:04:22 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 03 Feb 2023 01:04:22 +0100] rev 50617
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Fri, 03 Feb 2023 01:03:45 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 03 Feb 2023 01:03:45 +0100] rev 50616
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:38:14 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:38:14 +0100] rev 50615
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:38:04 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:38:04 +0100] rev 50614
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:37:44 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:37:44 +0100] rev 50613
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:37:37 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:37:37 +0100] rev 50612
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:37:31 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:37:31 +0100] rev 50611
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:37:25 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:37:25 +0100] rev 50610
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:37:11 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:37:11 +0100] rev 50609
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:37:02 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:37:02 +0100] rev 50608
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:36:55 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:36:55 +0100] rev 50607
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:36:47 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:36:47 +0100] rev 50606
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:36:38 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:36:38 +0100] rev 50605
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:36:32 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:36:32 +0100] rev 50604
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
Thu, 02 Feb 2023 17:36:25 +0100 safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 02 Feb 2023 17:36:25 +0100] rev 50603
safehasattr: pass attribute name as string instead of bytes This is a step toward replacing `util.safehasattr` usage with plain `hasattr`. The builtin function behave poorly in Python2 but this was fixed in Python3. These change are done one by one as they tend to have a small odd to trigger puzzling breackage.
(0) -30000 -10000 -3000 -1000 -300 -100 -60 +60 +100 +300 +1000 tip