Mon, 10 Aug 2020 15:47:21 +0530 mergestate: replace `addmergedother()` with generic `addcommitinfo()` (API)
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 10 Aug 2020 15:47:21 +0530] rev 45385
mergestate: replace `addmergedother()` with generic `addcommitinfo()` (API) Storing that a file is resolved for the other parent while merging is just one case of things we will like to store in the mergestate. There are more which we will like to store. This patch replaces `addmergedother()` with a much more generic `addcommitinfo()`. Doing this, we also blinding stores the same key value pair generated by the merge code instead of touching them. Differential Revision: https://phab.mercurial-scm.org/D8923
Mon, 10 Aug 2020 15:38:45 +0530 merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 10 Aug 2020 15:38:45 +0530] rev 45384
merge: introduce `addcommitinfo()` on mergeresult object This makes code little bit nicer as we directly update information in the mergeresult object instead of building up a dict first and then setting it. Differential Revision: https://phab.mercurial-scm.org/D8922
Mon, 10 Aug 2020 15:34:27 +0530 merge: use collections.defaultdict() for mergeresult.commitinfo
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 10 Aug 2020 15:34:27 +0530] rev 45383
merge: use collections.defaultdict() for mergeresult.commitinfo We will be storing info from mergeresult.commitinfo to mergestate._stateextras in upcoming patches, let's make them use same structure so that we don't have to make much efforts in transferring info from one to other. Differential Revision: https://phab.mercurial-scm.org/D8921
Mon, 10 Aug 2020 15:29:02 +0530 mergestate: use _stateextras instead of merge records for commit related info
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 10 Aug 2020 15:29:02 +0530] rev 45382
mergestate: use _stateextras instead of merge records for commit related info There is a set of information related to a merge which is needed on commit. We want to store such information in the mergestate so that we can read it while committing. For this purpose, we are using merge records and introduced a merge entry state for that. However this won't scale and is not clean way to implement this. This patch reworks the existing logic related to this to use _stateextras and read from it. Right now the information stored is not very descriptive but it will be in next patch. Using _stateextras also makes MERGE_RECORD_MERGED_OTHER useless and only to be kept for BC. Differential Revision: https://phab.mercurial-scm.org/D8920
Mon, 10 Aug 2020 15:09:44 +0530 mergestate: use collections.defaultdict(dict) for _stateextras
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 10 Aug 2020 15:09:44 +0530] rev 45381
mergestate: use collections.defaultdict(dict) for _stateextras I want to use this _stateextras more in upcoming patches to store some commit time related information. Using defaultdict will help in cleaner code around checking whether a file exists or not. Differential Revision: https://phab.mercurial-scm.org/D8919
Mon, 03 Aug 2020 23:41:50 -0700 hgweb: minimize scope of a try-block in staticfile()
Martin von Zweigbergk <martinvonz@google.com> [Mon, 03 Aug 2020 23:41:50 -0700] rev 45380
hgweb: minimize scope of a try-block in staticfile() I think the exceptions are only relevant for the `os.stat()` and `open()` calls, and maybe to the `fh.read()` call. Differential Revision: https://phab.mercurial-scm.org/D8936
Mon, 03 Aug 2020 23:38:50 -0700 hgweb: ignore web.templates config when guessing mime type for static content
Martin von Zweigbergk <martinvonz@google.com> [Mon, 03 Aug 2020 23:38:50 -0700] rev 45379
hgweb: ignore web.templates config when guessing mime type for static content Frozen binaries won't have a file-system path for static content, so I'd like to remove dependence on that. From the documentation, it seems like `mimetypes.guess_type()` only cares about the suffix, so I think it should be enough to pass in just path under the `web.templates` directory. Differential Revision: https://phab.mercurial-scm.org/D8935
Sat, 22 Aug 2020 16:03:44 -0700 hgweb: let staticfile() look up path from default location unless provided
Martin von Zweigbergk <martinvonz@google.com> [Sat, 22 Aug 2020 16:03:44 -0700] rev 45378
hgweb: let staticfile() look up path from default location unless provided This reduces duplication between the two callers. Differential Revision: https://phab.mercurial-scm.org/D8934
Mon, 03 Aug 2020 22:40:05 -0700 hgweb: handle None from templatedir() equally bad in webcommands.py
Martin von Zweigbergk <martinvonz@google.com> [Mon, 03 Aug 2020 22:40:05 -0700] rev 45377
hgweb: handle None from templatedir() equally bad in webcommands.py The following paragraph is based just on my reading of the code; I have not tried to test it. Before my recent work on templates in frozen binaries, it seems both `hgwebdir_mod.py` and `webcommands.py` would pass in an empty list into `staticfile()` when running in a frozen binary. That would then result in a variable in that function (`path`) not getting bound before its first use. I then changed that without thinking in D8786 so we passed a `None` value into the function, which made it break in another way (trying to iterate over `None`). Then I tried to fix it up in D8810, but I only changed `hgwebdir_mod.py` for some reason, and it still doesn't actually work in frozen binaries (which seems fair, since was broken before my changes too). This patch just replicates the half-assed "fix" from D8810 in `webcommands.py`, so they look more similar so I can start refactoring them in the same way. Differential Revision: https://phab.mercurial-scm.org/D8933
Thu, 13 Aug 2020 10:37:25 -0700 posixworker: avoid creating workers that end up getting no work
Martin von Zweigbergk <martinvonz@google.com> [Thu, 13 Aug 2020 10:37:25 -0700] rev 45376
posixworker: avoid creating workers that end up getting no work If `workers` (the detected or configured number of CPUs) is greater than the number of work items, then some of the workers end up getting 0 work items. Let's not create such workers. Differential Revision: https://phab.mercurial-scm.org/D8927
Mon, 10 Aug 2020 21:46:47 -0700 revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com> [Mon, 10 Aug 2020 21:46:47 -0700] rev 45375
revert: remove dangerous `parents` argument from `cmdutil.revert()` As we found out the hard way (thanks to spectral@ for figuring it out!), `cmdutil.revert()`'s `parents` argument must be `repo.dirstate.parents()` or things may go wrong. We had an extension that passed in the target commit as the first parent. The `hg split` command from the evolve extension seems to have made the same mistake, but I haven't looked carefully. The problem is that `cmdutil._performrevert()` calls `dirstate.normal()` on reverted files if the commit to revert to equals the first parent. So if you pass in `ctx=foo` and `parents=(foo.node(), nullid)`, then `dirstate.normal()` will be called for the revert files, even though they might not be clean in the working copy. There doesn't seem to be any reason, other than a tiny performance benefit, to passing the `parents` around instead of looking them up again in `cmdutil._performrevert()`, so that's what this patch does. Differential Revision: https://phab.mercurial-scm.org/D8925
Mon, 10 Aug 2020 18:08:15 -0700 requirements: introduce a set of working directory specific requirements
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 10 Aug 2020 18:08:15 -0700] rev 45374
requirements: introduce a set of working directory specific requirements Some requirements like the SPARSE_REQUIREMENT is working directory specific and cannot be shared. We add a set which will contain all these requirements. This is not the best we can do, I think having a rich requirement class will be much better but that will be out of scope for this series. Differential Revision: https://phab.mercurial-scm.org/D8924
Sat, 08 Aug 2020 16:37:59 +0530 localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 08 Aug 2020 16:37:59 +0530] rev 45373
localrepo: move requirements constant to requirements module We now have a dedicated module for requirements constant, let's move the ones in localrepo there. Differential Revision: https://phab.mercurial-scm.org/D8918
Sat, 08 Aug 2020 16:24:12 +0530 requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 08 Aug 2020 16:24:12 +0530] rev 45372
requirements: introduce new requirements related module It was not clear where all requirements should and related APIs should be, this patch introduces a requirements module which will have all exitsing requirements and related APIs. Differential Revision: https://phab.mercurial-scm.org/D8917
Sat, 08 Aug 2020 15:48:17 +0530 repository: introduce constant for treemanifest requirement and use it
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 08 Aug 2020 15:48:17 +0530] rev 45371
repository: introduce constant for treemanifest requirement and use it In future we will like to much cleaner logic around which requirement is for working copy and which can go in store. To start with that, we first need to de-clutter the requirement values spread around and replace them with constants. Differential Revision: https://phab.mercurial-scm.org/D8916
Tue, 21 Jul 2020 22:13:54 +0200 tests: make flag parsing test more future safe
Joerg Sonnenberger <joerg@bec.de> [Tue, 21 Jul 2020 22:13:54 +0200] rev 45370
tests: make flag parsing test more future safe The revlog format contains a number of feature flags, e.g. if general deltas are active. When testing that unknown flags are rejected, use bits that are not immediately following the currently used bits. Differential Revision: https://phab.mercurial-scm.org/D8782
Tue, 28 Jul 2020 09:58:28 -0700 rename: add support for --at-rev, which marks as copy and removes the source
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Jul 2020 09:58:28 -0700] rev 45369
rename: add support for --at-rev, which marks as copy and removes the source I had previously only added support for `--at-rev` to `hg cp`, but not to `hg mv`. This patch adds that support. Just like for `hg cp`, it marks the destination as copied from the source, and doesn't care if the source file still exists (because it only supports the `-A` mode, aka "don't touch files" mode). It works whether or not the source file still exists. This matches the behavior of `hg mv -A` in the working copy. Differential Revision: https://phab.mercurial-scm.org/D8840
Fri, 24 Jul 2020 15:03:14 -0700 tests: make test-install.t work on debian systems
Kyle Lippincott <spectral@google.com> [Fri, 24 Jul 2020 15:03:14 -0700] rev 45368
tests: make test-install.t work on debian systems Debian systems, at least as of their version of python3.8 on my machine, have rewritten some logic in ensurepip to make it not use the wheels in pip._bundled, but instead to use wheels installed in /usr/share/python-wheels. It copies these wheels into the virtual environment when it's created, and installenv/bin/pip is able to see them and use them, so it thinks that 'wheel' is installed, and that it can build the mercurial wheel instead of just installing it. For some reason, when it subprocesses to run `python3 setup.py bdist_wheel`, it setup.py does *not* have the 'wheel' wheel available, and we get an error message. Differential Revision: https://phab.mercurial-scm.org/D8813
Fri, 24 Jul 2020 10:34:04 +0200 rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net> [Fri, 24 Jul 2020 10:34:04 +0200] rev 45367
rhg: handle broken pipe error for stderr Differential Revision: https://phab.mercurial-scm.org/D8871
Fri, 24 Jul 2020 17:24:10 +0200 rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net> [Fri, 24 Jul 2020 17:24:10 +0200] rev 45366
rhg: extract function handle_stdout_error Avoid repeating the logic of handling stdout write errors. Differential Revision: https://phab.mercurial-scm.org/D8870
Fri, 17 Jul 2020 17:24:54 +0200 rhg: add a limited `rhg files` subcommand
Antoine Cezar <antoine.cezar@octobus.net> [Fri, 17 Jul 2020 17:24:54 +0200] rev 45365
rhg: add a limited `rhg files` subcommand Differential Revision: https://phab.mercurial-scm.org/D8869
Wed, 29 Jul 2020 10:21:17 +0200 rhg: add a `Files` `Command` to prepare the `rhg files` subcommand
Antoine Cezar <antoine.cezar@octobus.net> [Wed, 29 Jul 2020 10:21:17 +0200] rev 45364
rhg: add a `Files` `Command` to prepare the `rhg files` subcommand Differential Revision: https://phab.mercurial-scm.org/D8868
Wed, 29 Jul 2020 15:49:44 +0200 rhg: simplify `FindRootError` handling
Antoine Cezar <antoine.cezar@octobus.net> [Wed, 29 Jul 2020 15:49:44 +0200] rev 45363
rhg: simplify `FindRootError` handling Differential Revision: https://phab.mercurial-scm.org/D8867
Wed, 29 Jul 2020 10:26:17 +0200 rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net> [Wed, 29 Jul 2020 10:26:17 +0200] rev 45362
rhg: add buffered stdout writing possibility Improve batch stdout writing performance. At some point line buffered output should be introduced. Differential Revision: https://phab.mercurial-scm.org/D8866
Mon, 20 Jul 2020 18:14:52 +0200 rhg: ask the error message from `CommandError`
Antoine Cezar <antoine.cezar@octobus.net> [Mon, 20 Jul 2020 18:14:52 +0200] rev 45361
rhg: ask the error message from `CommandError` Avoid repeating the display of the same error messages in different commands. Differential Revision: https://phab.mercurial-scm.org/D8865
Tue, 21 Jul 2020 10:39:30 +0200 rhg: Do not return error when when we really mean ok in commands
Antoine Cezar <antoine.cezar@octobus.net> [Tue, 21 Jul 2020 10:39:30 +0200] rev 45360
rhg: Do not return error when when we really mean ok in commands Before when a command was successfull `Err(CommandErrorKind::Ok.into())` was returned which is an oxymoron. Using `Ok(())` when everything is ok seems more appropriate. Differential Revision: https://phab.mercurial-scm.org/D8864
Sat, 08 Aug 2020 12:52:39 -0700 hg-core: define a `ListTrackedFiles` `Operation`
Antoine Cezar <antoine.cezar@octobus.net> [Sat, 08 Aug 2020 12:52:39 -0700] rev 45359
hg-core: define a `ListTrackedFiles` `Operation` List files under Mercurial control in the working directory. Differential Revision: https://phab.mercurial-scm.org/D8863
Wed, 29 Jul 2020 10:08:09 +0200 hg-core: remove the `Operation` trait
Antoine Cezar <antoine.cezar@octobus.net> [Wed, 29 Jul 2020 10:08:09 +0200] rev 45358
hg-core: remove the `Operation` trait There is no way to currently define a trait which can both return references to `self` and to passed data, which is what we would need. Generic Associated Types may fix this and allow us to have a unified interface. See: rust #44265 Differential Revision: https://phab.mercurial-scm.org/D8862
Tue, 04 Aug 2020 10:59:43 +0200 hg-core: make parse_dirstate return references rather than update hashmaps
Antoine Cezar <antoine.cezar@octobus.net> [Tue, 04 Aug 2020 10:59:43 +0200] rev 45357
hg-core: make parse_dirstate return references rather than update hashmaps Returing a vec is faster than updating a hashmap when the hashmap is not needed like in `hg files` which just list tracked files. Returning references avoid copying data when not needed improving performence for large repositories. Differential Revision: https://phab.mercurial-scm.org/D8861
Fri, 07 Aug 2020 18:01:48 +0530 repository: introduce constant for internal phase repo requirement and use it
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 07 Aug 2020 18:01:48 +0530] rev 45356
repository: introduce constant for internal phase repo requirement and use it In future we will like to much cleaner logic around which requirement is for working copy and which can go in store. To start with that, we first need to de-clutter the requirement values spread around and replace them with constants. Differential Revision: https://phab.mercurial-scm.org/D8912
Sat, 08 Aug 2020 10:06:32 -0700 repository: introduce constant for sparse repo requirement and use it
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 08 Aug 2020 10:06:32 -0700] rev 45355
repository: introduce constant for sparse repo requirement and use it In future we will like to much cleaner logic around which requirement is for working copy and which can go in store. To start with that, we first need to de-clutter the requirement values spread around and replace them with constants. Differential Revision: https://phab.mercurial-scm.org/D8911
Fri, 07 Aug 2020 16:02:13 +0530 localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 07 Aug 2020 16:02:13 +0530] rev 45354
localrepo: refactor `.hg/requires` reading logic in separate function In an upcoming patch, we will be reusing this to read `.hg/store/requires`, so let's separate it in a different function before. Differential Revision: https://phab.mercurial-scm.org/D8910
Fri, 07 Aug 2020 15:52:52 +0530 localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 07 Aug 2020 15:52:52 +0530] rev 45353
localrepo: refactor logic to calculate sharedvfs in separate fn We will be reusing this in an upcoming patch, so better to refactor it into a separate function. Also the underlying handling deserves a function of it's own. Differential Revision: https://phab.mercurial-scm.org/D8909
Sun, 02 Aug 2020 17:40:35 +0200 keepalive: Do not append _rbuf if _raw_readinto exists (issue6356) stable
Cédric Krier <ced@b2ck.com> [Sun, 02 Aug 2020 17:40:35 +0200] rev 45352
keepalive: Do not append _rbuf if _raw_readinto exists (issue6356) The readline method append to the chunks the content of the _rbuf then there is a loop that call _raw_read which on Python3 call readinto. But the readinto version in mercurial append again the _rbuf content. So this creates the duplicate content. This does not happen in Python2 because _raw_read does not call readinto. Differential Revision: https://phab.mercurial-scm.org/D8859
Sat, 08 Aug 2020 10:13:37 -0700 store: refactor space delimited list to proper data structure
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 08 Aug 2020 10:13:37 -0700] rev 45351
store: refactor space delimited list to proper data structure There is no good reason why are having a space delimited list and then using `.split()` to get the actual list. Let's convert this into a proper collection. Differential Revision: https://phab.mercurial-scm.org/D8908
Fri, 07 Aug 2020 21:59:43 -0700 makefile: stop setting unused HGEXTDIR variable during osx build
Martin von Zweigbergk <martinvonz@google.com> [Fri, 07 Aug 2020 21:59:43 -0700] rev 45350
makefile: stop setting unused HGEXTDIR variable during osx build The variable was added in a38ed42cd23c (osx: include chg by default, 2017-03-20), but I can't find any others references to the variable in that commit or in any other commits. Differential Revision: https://phab.mercurial-scm.org/D8915
Thu, 06 Aug 2020 13:51:43 +0530 merge: drop commitinfo argument to applyupdates (API)
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 06 Aug 2020 13:51:43 +0530] rev 45349
merge: drop commitinfo argument to applyupdates (API) We now pass the mergeresult object and hence there is no need to have a separate commitinfo argument as the required info is present in mergeresult object. Differential Revision: https://phab.mercurial-scm.org/D8904
Thu, 06 Aug 2020 13:27:38 +0530 merge: remove emptyactions() and use collections.defaultdict(list) instead
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 06 Aug 2020 13:27:38 +0530] rev 45348
merge: remove emptyactions() and use collections.defaultdict(list) instead emptyactions() used to return a dict which was populated and passed into applyupdates(). However, with recent changes, we no longer pass a plain dict, instead we pass the mergeresult object. There was only one usage of emptyactions and that too inside mergeresult object. That usage is replaced with collections.defaultdict(list) instead. Not sure why we were not using collections.defaultdict(list) from the beginning. Differential Revision: https://phab.mercurial-scm.org/D8903
Wed, 05 Aug 2020 16:52:51 +0530 merge: pass mergeresult obj in _forgetremoved() (API)
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 05 Aug 2020 16:52:51 +0530] rev 45347
merge: pass mergeresult obj in _forgetremoved() (API) Instead of returning a dict of actions and then updating it, let's pass the object directly and update it there. This makes `updateactions()` on mergeresult unused and this patch removes that. After this patch, we have couple of methods left on mergeresult class which still exposes the internal dict based action storage. Differential Revision: https://phab.mercurial-scm.org/D8889
Wed, 05 Aug 2020 16:00:25 +0530 mergeresult: introduce filemap() which yields filename based mapping
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 05 Aug 2020 16:00:25 +0530] rev 45346
mergeresult: introduce filemap() which yields filename based mapping We wanted to remove `actions` as this was leaking how we store things internally and was direct access to one of the member. This introduces filemap() which yields a map of `filename` -> `action, args, msg`. `mergeresult.actions` has been deleted as it's no longer required. Differential Revision: https://phab.mercurial-scm.org/D8888
Wed, 05 Aug 2020 15:41:23 +0530 mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 05 Aug 2020 15:41:23 +0530] rev 45345
mergeresult: add `files()` and use it `files()` will return a list of files on which an action needs to be performed. This is a step to stop exposing the underlying map to the user of this object. Differential Revision: https://phab.mercurial-scm.org/D8887
Wed, 05 Aug 2020 15:37:26 +0530 mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 05 Aug 2020 15:37:26 +0530] rev 45344
mergeresult: introduce getfile() and use it where required We want to hide the underlying dictionary from the users and provide API for valid and sane use cases. Differential Revision: https://phab.mercurial-scm.org/D8886
Wed, 05 Aug 2020 14:03:59 +0530 merge: use ACTION_* constants instead of values in _filternarrowactions()
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 05 Aug 2020 14:03:59 +0530] rev 45343
merge: use ACTION_* constants instead of values in _filternarrowactions() It makes easier to check what noconflicttypes are and which are not included. I hope we can have a state where we always use ACTION_* constants instead of these values which are very hard to understand. Differential Revision: https://phab.mercurial-scm.org/D8885
Wed, 05 Aug 2020 13:50:49 +0530 merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 05 Aug 2020 13:50:49 +0530] rev 45342
merge: rework iteration over mergeresult object in checkpathconflicts() Instead of following pattern: ``` for f, (m, args, msg) in mresult.actions.items(): if m == mergestatemod.ACTION_*: ... elif m == mergestatemod.ACTION_*: ... .... ``` We do: ``` for (f, args, msg) in mresult.getaction((mergestatemod.ACTION_*,)): ... for (f, args, msg) in mresult.getaction((mergestatemod.ACTION_*,)): ... .... ``` This makes code bit easier to understand and prevent iterating over actions which we don't need. Differential Revision: https://phab.mercurial-scm.org/D8884
Wed, 05 Aug 2020 13:21:06 +0530 applyupdates: simplfy calculation of number of updated files
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 05 Aug 2020 13:21:06 +0530] rev 45341
applyupdates: simplfy calculation of number of updated files Instead of increasing the `updated` variable each time in a loop, let's use the mergeresult object API to calculate the updated value in one call. Differential Revision: https://phab.mercurial-scm.org/D8883
Mon, 03 Aug 2020 18:08:37 +0530 mergeresult: yield from getactions() instead of buidling a list and returning
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 18:08:37 +0530] rev 45340
mergeresult: yield from getactions() instead of buidling a list and returning Only 7 out of 29 callers change the underlying dict while iterating. So it's better to yield and wrap the 7 callers with `list()`. Differential Revision: https://phab.mercurial-scm.org/D8882
Mon, 03 Aug 2020 18:33:00 +0530 sparse: replace merge action values with mergestate.ACTION_* constants
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 18:33:00 +0530] rev 45339
sparse: replace merge action values with mergestate.ACTION_* constants Having bytestrings like `b'r'` makes it hard to understand for people who don't know the code much or looking at it for the first time. Differential Revision: https://phab.mercurial-scm.org/D8881
Mon, 03 Aug 2020 17:58:18 +0530 mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 17:58:18 +0530] rev 45338
mergeresult: implement a len() function and use it In next patch we will start yielding from `getactions()` instead of building and returning a list. Hence we can no longer rely on that for getting us a length. Differential Revision: https://phab.mercurial-scm.org/D8880
Mon, 03 Aug 2020 17:32:30 +0530 merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 17:32:30 +0530] rev 45337
merge: replace use of actions dict with mergeresult object There are still some places which can be improved by having a dedicated API, this patch for now make all users of actions dict go through the mergeresult object API. Differential Revision: https://phab.mercurial-scm.org/D8879
Mon, 03 Aug 2020 14:54:45 +0530 mergeresult: add sort argument to getactions() method
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 14:54:45 +0530] rev 45336
mergeresult: add sort argument to getactions() method This will be used in next patch. Differential Revision: https://phab.mercurial-scm.org/D8878
Mon, 03 Aug 2020 14:19:06 +0530 merge: pass mergeresult obj in merge._prefetchfiles()
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 14:19:06 +0530] rev 45335
merge: pass mergeresult obj in merge._prefetchfiles() Differential Revision: https://phab.mercurial-scm.org/D8877
Mon, 03 Aug 2020 14:12:13 +0530 merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 14:12:13 +0530] rev 45334
merge: pass mergeresult obj instead of actions in applyupdates() (API) This is similar to past 20 patches or so where we are replacing use of a bare actions dict with a dedicated mergeresult object. The goal is to have a dedicated powerful object instead of a dict while making the code more easier to understand. In past few patches, we have already simplified the code at some places using the newly introduced object. This patch does not updates applyupdates() to use the mergeresult object directly. That will be done in next patch to make things easier to review. Differential Revision: https://phab.mercurial-scm.org/D8876
Mon, 03 Aug 2020 13:30:14 +0530 merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 13:30:14 +0530] rev 45333
merge: pass mergeresult obj instead of actions in _checkcollision() (API) The goal is to not use the actions dict and replace it with a rich mergeresult object. Differential Revision: https://phab.mercurial-scm.org/D8875
Tue, 28 Jul 2020 20:21:06 +0200 commitctx: directly update the touched and added set of files
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 28 Jul 2020 20:21:06 +0200] rev 45332
commitctx: directly update the touched and added set of files Instead of going through intermediate variable, we can simply use the ChangingFiles object. The object will take care of the consistency.
Tue, 28 Jul 2020 20:19:09 +0200 commitctx: directly updated the set of removed files
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 28 Jul 2020 20:19:09 +0200] rev 45331
commitctx: directly updated the set of removed files The change is non-trivial so I made it in its own changeset.
Wed, 29 Jul 2020 16:48:31 +0200 commitctx: create the `ChangingFiles` object sooner
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 29 Jul 2020 16:48:31 +0200] rev 45330
commitctx: create the `ChangingFiles` object sooner Let us change the `_commit_manifest` call before other changes.
Sat, 25 Jul 2020 16:34:02 +0200 commitctx: move ChangingFiles creation directly inside `_process_files`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 16:34:02 +0200] rev 45329
commitctx: move ChangingFiles creation directly inside `_process_files` As announced, we move it there. We focus on the signature change first, we will update the code afterward.
Sat, 25 Jul 2020 16:13:32 +0200 commitctx: create the ChangingFiles object directly in the various case
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 16:13:32 +0200] rev 45328
commitctx: create the ChangingFiles object directly in the various case No need to compute all data then create the object, we can create it early and directly store data in it. We start simple by moving create higher in the function, but the end goal is to eventually move the creation inside the `_process_files` function to take advantage of the object there.
Sat, 25 Jul 2020 16:13:17 +0200 commitctx: no longer make the storage and added/removed file optional
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 16:13:17 +0200] rev 45327
commitctx: no longer make the storage and added/removed file optional The code using this variable is always using other, stricter, condition before using these value. So it is safe to always carry them along.
Sat, 25 Jul 2020 16:07:38 +0200 commitctx: directly gather p1 and p2 copies in `files`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 16:07:38 +0200] rev 45326
commitctx: directly gather p1 and p2 copies in `files` The only thing we do with the p1copies and p2copies is to pass them around, we we can gather them later and directly stored them in the `ChangingFiles` object.
Sat, 25 Jul 2020 16:02:26 +0200 commitctx: extract sidedata encoding inside its own function
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 16:02:26 +0200] rev 45325
commitctx: extract sidedata encoding inside its own function This part of the code is quite independent from the rest. Thank to the new ChangingFiles object, moving with the rest of the sidedata code (in metadata.py) is simple. The changelog.add method is simply passing the `files` object to the new function. It will be easy to increase/change the data we gather and encode without impacting the changelog method.
Sat, 25 Jul 2020 15:55:09 +0200 commitctx: directly pass a ChangingFiles object to changelog.add
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 15:55:09 +0200] rev 45324
commitctx: directly pass a ChangingFiles object to changelog.add We pass the rich object to the changelog and it read the field it needs.
Sat, 25 Jul 2020 15:49:12 +0200 commitctx: return a richer object from _prepare_files
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 15:49:12 +0200] rev 45323
commitctx: return a richer object from _prepare_files Instead of returning a lot of different list, we introduce a rich object that hold all the file related information. The unique object help with data consistency and simply functions arguments and return. In the rest of this series we will increase usage of this object to simplify more code.
Thu, 06 Aug 2020 10:53:00 -0700 templater: teach template loader to use open_template() function
Martin von Zweigbergk <martinvonz@google.com> [Thu, 06 Aug 2020 10:53:00 -0700] rev 45322
templater: teach template loader to use open_template() function The template loader can apparently load templates from relative paths, so I needed to add that support to `open_template()`. This takes the number of failing tests with PyOxidizer from 54 to 34. Differential Revision: https://phab.mercurial-scm.org/D8907
Thu, 06 Aug 2020 10:52:52 -0700 templater: restructure open_template() a little to prepare for relative paths
Martin von Zweigbergk <martinvonz@google.com> [Thu, 06 Aug 2020 10:52:52 -0700] rev 45321
templater: restructure open_template() a little to prepare for relative paths I found that it was easier to add support for relative paths after this restructuring. It also made it easier to explain each case with a code comment (which I did). Differential Revision: https://phab.mercurial-scm.org/D8906
Thu, 06 Aug 2020 09:50:10 -0700 templater: add exception-raising version of open_template()
Martin von Zweigbergk <martinvonz@google.com> [Thu, 06 Aug 2020 09:50:10 -0700] rev 45320
templater: add exception-raising version of open_template() I'm about to add another caller of `open_template()` (in the template loader). That caller will want to get exceptions instead of `(None, None)` if the template doesn't exist. This patch therefore changes `open_template()` to raise exceptions and adds a new `try_open_template()` that returns the `(None, None)` value. Differential Revision: https://phab.mercurial-scm.org/D8905
Wed, 05 Aug 2020 22:13:51 -0700 templater: replace Py3-only exception types by super-types available in Py2
Martin von Zweigbergk <martinvonz@google.com> [Wed, 05 Aug 2020 22:13:51 -0700] rev 45319
templater: replace Py3-only exception types by super-types available in Py2 As noted by @indygreg, `test-check-pyflakes.t` started failing on Py2 after my recent D8894, because that introduced catching of the Py3-only types `ModuleNotFoundError` and `FileNotFoundError`. Let's switch to less precise types that are also available in Py2. Differential Revision: https://phab.mercurial-scm.org/D8902
Wed, 05 Aug 2020 14:19:42 -0700 hgweb: enable reading styles from resources in frozen binaries
Martin von Zweigbergk <martinvonz@google.com> [Wed, 05 Aug 2020 14:19:42 -0700] rev 45318
hgweb: enable reading styles from resources in frozen binaries All we need to do to read styles from resources is to pass the file-like object we get from `open_template()` on to `frommapfile()`. This takes the number of failing tests with PyOxidizer from 62 to 54. Differential Revision: https://phab.mercurial-scm.org/D8901
Wed, 05 Aug 2020 14:03:45 -0700 hgweb: rely on open_template()'s fallback to using templatedir()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 05 Aug 2020 14:03:45 -0700] rev 45317
hgweb: rely on open_template()'s fallback to using templatedir() Differential Revision: https://phab.mercurial-scm.org/D8900
Wed, 05 Aug 2020 14:03:14 -0700 hgweb: open mapfile using templater.open_template()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 05 Aug 2020 14:03:14 -0700] rev 45316
hgweb: open mapfile using templater.open_template() This will help us read templates from resources in frozen binaries. Differential Revision: https://phab.mercurial-scm.org/D8899
Wed, 05 Aug 2020 13:58:30 -0700 hgweb: simplify a constant-length list by converting to literal tuple
Martin von Zweigbergk <martinvonz@google.com> [Wed, 05 Aug 2020 13:58:30 -0700] rev 45315
hgweb: simplify a constant-length list by converting to literal tuple The call to `.append()` has been unnecessary since d3dbdca92458 (hgweb: don't choke when an inexistent style is requested (issue1901), 2009-11-12). Differential Revision: https://phab.mercurial-scm.org/D8898
Wed, 05 Aug 2020 13:33:07 -0700 hgweb: remove some accesses to private member uimod._unset
Martin von Zweigbergk <martinvonz@google.com> [Wed, 05 Aug 2020 13:33:07 -0700] rev 45314
hgweb: remove some accesses to private member uimod._unset Differential Revision: https://phab.mercurial-scm.org/D8897
Thu, 30 Jul 2020 21:36:29 -0700 templater: try to read %include in mapfiles from resources
Martin von Zweigbergk <martinvonz@google.com> [Thu, 30 Jul 2020 21:36:29 -0700] rev 45313
templater: try to read %include in mapfiles from resources The "show" style is an example of a style that uses an "%include" statement in its definition. This patch makes `hg log --style show` work. This takes the number of failing tests with PyOxidizer from 72 to 62. Differential Revision: https://phab.mercurial-scm.org/D8896
Thu, 30 Jul 2020 15:29:06 -0700 templater: unroll loop over mapfile directories
Martin von Zweigbergk <martinvonz@google.com> [Thu, 30 Jul 2020 15:29:06 -0700] rev 45312
templater: unroll loop over mapfile directories I'll rewrite the handling of the `templatedir()` case in the next patch, so the two cases will be more different and the loop won't make as much sense. Differential Revision: https://phab.mercurial-scm.org/D8895
Tue, 04 Aug 2020 10:51:25 -0700 templater: make open_template() read from resources if in frozen binary
Martin von Zweigbergk <martinvonz@google.com> [Tue, 04 Aug 2020 10:51:25 -0700] rev 45311
templater: make open_template() read from resources if in frozen binary This takes the number of failing tests with PyOxidizer from 87 to 72. Differential Revision: https://phab.mercurial-scm.org/D8894
Tue, 04 Aug 2020 13:22:00 -0700 templater: pass opened file-like object to templatespec
Martin von Zweigbergk <martinvonz@google.com> [Tue, 04 Aug 2020 13:22:00 -0700] rev 45310
templater: pass opened file-like object to templatespec I think I said earlier that I planned to create a special templatespec variant for built-in templates. That was true (I planned that), but I ended up (in this patch) just adding a file-like object to the `mapfile_templatespec()` variant instead. Differential Revision: https://phab.mercurial-scm.org/D8893
Tue, 04 Aug 2020 13:21:29 -0700 templater: replace templatepath() with function that also opens the file
Martin von Zweigbergk <martinvonz@google.com> [Tue, 04 Aug 2020 13:21:29 -0700] rev 45309
templater: replace templatepath() with function that also opens the file For frozen binaries, such as those created by PyOxidizer, I plan to make it so the templatespec can keep an opened file/resource to read from instead of needing a file path. Having `templatepath()` return an opened file should help with that. At this point, it's just a wasteful extra opening of mapfiles that we'll open again later. I'll update the read-side next so it reads from the file-like object without opening the file again. Differential Revision: https://phab.mercurial-scm.org/D8892
Thu, 30 Jul 2020 13:44:06 -0700 templater: start passing resource to read from into _readmapfile()
Martin von Zweigbergk <martinvonz@google.com> [Thu, 30 Jul 2020 13:44:06 -0700] rev 45308
templater: start passing resource to read from into _readmapfile() This patch makes it so we pass in a file-like resource to read from instead of having `_readmapfile()` open the file. This is one more step towards making `_readmapfile()` able to read resources opened by from `importlib.resources`. We still need to pass in the mapfile path because it's used for loading dependent mapfiles from `%include` and `__base__`, and it's also used for giving the user better error messages. Besides that, one can safely call `_readmapfile()` with any file-like resource after this patch. Differential Revision: https://phab.mercurial-scm.org/D8891
Tue, 04 Aug 2020 09:13:10 -0700 templater: move stylemap() to hgweb_mod, since that's its only user
Martin von Zweigbergk <martinvonz@google.com> [Tue, 04 Aug 2020 09:13:10 -0700] rev 45307
templater: move stylemap() to hgweb_mod, since that's its only user `stylemap()` even has an error message that mentions "hgweb templates", so it seems that it's meant specifically for hgweb. Differential Revision: https://phab.mercurial-scm.org/D8890
Mon, 03 Aug 2020 22:15:45 -0700 hgweb: simplify staticfile() now that we always pass it a single directory
Martin von Zweigbergk <martinvonz@google.com> [Mon, 03 Aug 2020 22:15:45 -0700] rev 45306
hgweb: simplify staticfile() now that we always pass it a single directory I didn't realize this further simplifications enabled by D8786 until now. Differential Revision: https://phab.mercurial-scm.org/D8874
Fri, 31 Jul 2020 10:05:07 -0700 packaging: include templates with their package as key in package_data
Martin von Zweigbergk <martinvonz@google.com> [Fri, 31 Jul 2020 10:05:07 -0700] rev 45305
packaging: include templates with their package as key in package_data This is similar to an earlier patch in this series. It seems more correct to use `mercurial.templates.coal` etc as keys in the `package_data` dict now that those modules are packages. Differential Revision: https://phab.mercurial-scm.org/D8858
Fri, 31 Jul 2020 09:49:52 -0700 packaging: mark mercurial.templates and subdirs as packages
Martin von Zweigbergk <martinvonz@google.com> [Fri, 31 Jul 2020 09:49:52 -0700] rev 45304
packaging: mark mercurial.templates and subdirs as packages We need these packages to be installed so PyOxidizer picks them up. Differential Revision: https://phab.mercurial-scm.org/D8855
Thu, 12 Dec 2019 12:41:01 -0800 templates: add __init__.py files to templates/ dirs
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 Dec 2019 12:41:01 -0800] rev 45303
templates: add __init__.py files to templates/ dirs This is necessary for them to be loaded with `importlib.resources`, which we want to do for PyOxidizer and similar. `importlib.resources` cannot read resources from submodules (`resources.open_binary('mercurial.templates', 'coal/map')` is not valid), so we need one `__init__.py` per directory. Differential Revision: https://phab.mercurial-scm.org/D8854
Wed, 05 Aug 2020 13:36:50 -0400 merge with stable
Augie Fackler <augie@google.com> [Wed, 05 Aug 2020 13:36:50 -0400] rev 45302
merge with stable
Tue, 21 Jul 2020 18:21:27 +0530 localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 21 Jul 2020 18:21:27 +0530] rev 45301
localrepo: abort creating a shared repo if the source does not have store We cannot create a shared repository without a store IIUC. Let's abort in such cases. Differential Revision: https://phab.mercurial-scm.org/D8772
Tue, 21 Jul 2020 13:58:58 +0530 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 21 Jul 2020 13:58:58 +0530] rev 45300
localrepo: only use 'bookmarksinstore' requirement if we have 'store' This adds check that whether we have the 'store' requirement or not. If we don't have that, we skip adding the 'bookmarksinstore' requirement and warn user about it. Differential Revision: https://phab.mercurial-scm.org/D8771
Sat, 25 Jul 2020 01:42:41 +0530 mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 25 Jul 2020 01:42:41 +0530] rev 45299
mergeresult: make actionmapping a dict of dict instead of dict of lists This makes deleting a specific filename entry faster and easier. Differential Revision: https://phab.mercurial-scm.org/D8837
Sat, 25 Jul 2020 14:44:29 +0530 largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 25 Jul 2020 14:44:29 +0530] rev 45298
largefiles: introduce a constant for 'lfmr' action It's better to use a dedicated constant instead of a string which makes pretty less sense. Differential Revision: https://phab.mercurial-scm.org/D8836
Sat, 25 Jul 2020 14:41:20 +0530 largefiles: override merge.emptyactions() to include `lfmr`
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 25 Jul 2020 14:41:20 +0530] rev 45297
largefiles: override merge.emptyactions() to include `lfmr` I found it weird that we were not already doing this. I encountered this while using `emptyactions()` in mergeresult() class. Differential Revision: https://phab.mercurial-scm.org/D8835
Sat, 25 Jul 2020 01:17:35 +0530 merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 25 Jul 2020 01:17:35 +0530] rev 45296
merge: unify logic of couple of if-else's in manifestmerge() Right now manifestmerge() contains very nested if-else conditions and it's not easy to understand what is happening. I was looking for easy unifications and found these two. Differential Revision: https://phab.mercurial-scm.org/D8834
Fri, 24 Jul 2020 23:49:08 +0530 sparse: add comment for an if condition which I tried to refactor
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 23:49:08 +0530] rev 45295
sparse: add comment for an if condition which I tried to refactor I tried to refactor this if condition and make it part of the if-else above but tests failed. I decided to add a comment about the check we are doing and why it's a separate if. Differential Revision: https://phab.mercurial-scm.org/D8833
Fri, 24 Jul 2020 23:40:07 +0530 mergeactions: use action constants instead of string values
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 23:40:07 +0530] rev 45294
mergeactions: use action constants instead of string values Having constants inplace of strings like 'c', 'cm' etc. makes it easier to understand the code. Differential Revision: https://phab.mercurial-scm.org/D8832
Sun, 02 Aug 2020 10:24:28 -0700 merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 02 Aug 2020 10:24:28 -0700] rev 45293
merge: use the new action based mapping introduced in mergeresult obj Before this patch, we have good number of instances of following types: ``` for f, (m, args, msg) in mresult.actions: if m == ACTION_X: do_something ``` We iterate over the whole list and then filter for a certain action. Previous patch introduced a action based mapping in mergeresult object. The above code now looks like: ``` for f, args, msg in mresult.getactions([ACTION_X, ...]): do_something ``` Differential Revision: https://phab.mercurial-scm.org/D8831
Fri, 24 Jul 2020 19:48:38 +0530 mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 19:48:38 +0530] rev 45292
mergeresult: introduce action -> (filename, data, msg) mapping and related API Good number of places in code, we iterate over the actions dict which has filename as keys and filter based on the action. This patch introduced another mapping which has action as key. This will help in refactoring the code much more in upcoming patch. Differential Revision: https://phab.mercurial-scm.org/D8830
Sun, 02 Aug 2020 10:15:55 -0700 mergeresult: rename _actions to _filemapping
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 02 Aug 2020 10:15:55 -0700] rev 45291
mergeresult: rename _actions to _filemapping This is done because we will be introducing another dict which introduces the same information but with action name as key. Differential Revision: https://phab.mercurial-scm.org/D8829
Fri, 24 Jul 2020 19:19:47 +0530 sparse: pass mergeresult obj in sparse.filterupdatesactions() (API)
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 19:19:47 +0530] rev 45290
sparse: pass mergeresult obj in sparse.filterupdatesactions() (API) Not able to see much which can be improved in this function by passing in mergeresult object but for API consistency and no function directly touching actions dict, it sounds like a good idea. Differential Revision: https://phab.mercurial-scm.org/D8828
Fri, 24 Jul 2020 19:13:20 +0530 merge: filter actions before calling _resolvetrivial()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 19:13:20 +0530] rev 45289
merge: filter actions before calling _resolvetrivial() In d49e490a9e85252886fd43258803bcad4fc88edb I made _resolvetrivial() to be called after upadting the sparse checkout. Looking at the code now, it seems to that me there is no need to even run _resolvetrivial() on actions which are filtered away. So let's update the actions before passing them into _resolvetrivial(). Differential Revision: https://phab.mercurial-scm.org/D8827
Fri, 24 Jul 2020 18:16:29 +0530 merge: introduce mergeresult.updateactions() and use it
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 18:16:29 +0530] rev 45288
merge: introduce mergeresult.updateactions() and use it We don't want direct editing and access of mergeresult._actions because soon we will like to maintain data in other structures also. Differential Revision: https://phab.mercurial-scm.org/D8826
Fri, 24 Jul 2020 17:57:23 +0530 merge: pass mergeresult instead of actions in _checkunknownfiles() (API)
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 17:57:23 +0530] rev 45287
merge: pass mergeresult instead of actions in _checkunknownfiles() (API) Differential Revision: https://phab.mercurial-scm.org/D8825
Fri, 24 Jul 2020 17:52:33 +0530 merge: pass mergeresult obj instead of actions dict in _resolvetrivial()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 17:52:33 +0530] rev 45286
merge: pass mergeresult obj instead of actions dict in _resolvetrivial() Differential Revision: https://phab.mercurial-scm.org/D8824
Fri, 24 Jul 2020 17:49:13 +0530 merge: pass mergeresult obj instead of actions in _filternarrowactions()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 17:49:13 +0530] rev 45285
merge: pass mergeresult obj instead of actions in _filternarrowactions() We want to use rich mergeresult object and it's APIs instead of handling a dictionary. Differential Revision: https://phab.mercurial-scm.org/D8823
Fri, 24 Jul 2020 17:31:26 +0530 merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 17:31:26 +0530] rev 45284
merge: pass mergeresult in checkpassconflicts() instead of actions (API) This is a part of series which aims to use mergeresult obj instead of an action dictionary. Differential Revision: https://phab.mercurial-scm.org/D8822
Fri, 24 Jul 2020 16:23:55 +0530 merge: add removefile() to mergeresult object
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 16:23:55 +0530] rev 45283
merge: add removefile() to mergeresult object There are cases where some further calculation makes the file not needing to be merged anymore and hence needs to be dropped in mergeresult object. This adds a function for that. Differential Revision: https://phab.mercurial-scm.org/D8821
Fri, 24 Jul 2020 16:18:39 +0530 merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 16:18:39 +0530] rev 45282
merge: introduce mergeresult.addfile() and use it We want to use mergeresult object at more and more places instead of this actions dict to simplify code and further add new APIs to mergeresult object. This patch introduces `addfile()` which adds a new file to the internal actions dict for now. Differential Revision: https://phab.mercurial-scm.org/D8820
Fri, 24 Jul 2020 15:56:11 +0530 merge: make mergeresult constructor initialize empty object
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 15:56:11 +0530] rev 45281
merge: make mergeresult constructor initialize empty object In future patches, we will be going to update mergeresult object instead of building an actions dict and then setting it in the object. Differential Revision: https://phab.mercurial-scm.org/D8819
Fri, 24 Jul 2020 15:15:20 +0530 merge: improve documentation of fbid dict used for merge bid
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 15:15:20 +0530] rev 45280
merge: improve documentation of fbid dict used for merge bid I improved the comments explaning what the dict contains meanwhile organizing the comment structure which prevents some confusion. Due to formatting issues, the empty dict was wrapped in `()` which might decieve in thinking that it's a tuple of dict until you decide to find a comma. Differential Revision: https://phab.mercurial-scm.org/D8818
Fri, 24 Jul 2020 14:45:00 +0530 merge: move conversion of file-key dict to action-key dict in mergeresult
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 14:45:00 +0530] rev 45279
merge: move conversion of file-key dict to action-key dict in mergeresult Initially the actions dict which we get has file has keys, but later we want a dict which has actions as keys. This patch moves code computing that to mergeresult class as that's where it should be anyway. Differential Revision: https://phab.mercurial-scm.org/D8817
Sun, 02 Aug 2020 10:12:21 -0700 merge: introduce hasconflicts() on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 02 Aug 2020 10:12:21 -0700] rev 45278
merge: introduce hasconflicts() on mergeresult object This and upcoming patches will improve the mergeresult object making it more powerful and provide clean APIs for various things. Doing this will clean up the core merge code which is present in `update()` a bit. Differential Revision: https://phab.mercurial-scm.org/D8816
Tue, 14 Jul 2020 16:40:28 +0530 merge: remove no longer required ACTION_GET_OTHER_AND_STORE
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 14 Jul 2020 16:40:28 +0530] rev 45277
merge: remove no longer required ACTION_GET_OTHER_AND_STORE In 1b8fd4af33189c84feadb47c74d659ec31cde3b9 I (ab)used merge actions to pass info from manifestmerge() to applyupdates() and store info in mergestate. In previous patches, we introduced a separate return value from manifestmerge() and calculateupdates() and an argument to applyupdates() which achieved the same thing. Let's remove this no longer required messy code. Differential Revision: https://phab.mercurial-scm.org/D8744
Tue, 14 Jul 2020 16:31:52 +0530 merge: pass commitinfo to applyupdates() and get it stored in mergestate
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 14 Jul 2020 16:31:52 +0530] rev 45276
merge: pass commitinfo to applyupdates() and get it stored in mergestate This patch passes the commitinfo calulcated in manifestmerge() to applyupdates() so that it can be read there and stored in mergestate. On commit, we can read mergestate for such information and act accordingly. This patch also makes ACTION_GET_OTHER_AND_STORE not required anymore. Next patch will remove the messy code surrounding it. Differential Revision: https://phab.mercurial-scm.org/D8743
Tue, 14 Jul 2020 16:21:08 +0530 merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 14 Jul 2020 16:21:08 +0530] rev 45275
merge: introduce 'commitinfo' in mergeresult commitinfo will be used to pass information which is required on commit phase from the merge phase. One common example is, merge chooses filenode from second parent and we need to tell commit to choose that. Right now this one and related cases are not very neatly implement and there is no clear line on how to pass on such information. Upcoming patches will try to work on in this area and make things easier. Differential Revision: https://phab.mercurial-scm.org/D8742
Thu, 23 Jul 2020 18:03:14 +0530 merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 23 Jul 2020 18:03:14 +0530] rev 45274
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API) Earlier, manifestmerge() and calculateupdates() returns a tuple of three things. I wanted to add one more thing to return value. Introducing a special class which represents results of a merge will help understand better and also ease adding new return values. Differential Revision: https://phab.mercurial-scm.org/D8799
Mon, 03 Aug 2020 23:13:58 +0530 Added signature for changeset 7fc3c5fbc65f stable
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 23:13:58 +0530] rev 45273
Added signature for changeset 7fc3c5fbc65f
Mon, 03 Aug 2020 23:13:52 +0530 Added tag 5.5 for changeset 7fc3c5fbc65f stable
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 23:13:52 +0530] rev 45272
Added tag 5.5 for changeset 7fc3c5fbc65f
Sat, 01 Aug 2020 18:39:28 +0530 mergestate: fix BC breakage introduced because of removal of a merge record stable 5.5
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 01 Aug 2020 18:39:28 +0530] rev 45271
mergestate: fix BC breakage introduced because of removal of a merge record In fcd0cff3400a I removed the usage of RECORD_RESOLVED_OTHER. However I also removed the reading support, hence if there is any user who runs into merge conflict with older version of hg, upgrades hg and then tries to read mergestate, they will end up with an MergeRecordUnsupportedError.
Thu, 30 Jul 2020 22:49:51 -0700 packaging: delete unnecessary updating of `dirs` list
Martin von Zweigbergk <martinvonz@google.com> [Thu, 30 Jul 2020 22:49:51 -0700] rev 45270
packaging: delete unnecessary updating of `dirs` list The `dirs` list is not used and it seems it also wasn't used when this code was added in 395b0e132836 (Don't copy hidden files/directories during `setup.py install`, 2009-07-14). Differential Revision: https://phab.mercurial-scm.org/D8857
Sun, 02 Aug 2020 10:08:18 -0700 packaging: make "mercurial.defaultrc" a key in package_data
Martin von Zweigbergk <martinvonz@google.com> [Sun, 02 Aug 2020 10:08:18 -0700] rev 45269
packaging: make "mercurial.defaultrc" a key in package_data Before this patch, we had a `mercurial` key with a `defaultrc/*.rc` value. It seems more correct to have a `mercurial.defaultrc` key with a `*.rc` value since `mercurial.defaultrc` it became a pacakge in 1390bb81163e (help: get helptext/ data from `resources` module if available, 2019-12-12). Differential Revision: https://phab.mercurial-scm.org/D8856
Thu, 30 Jul 2020 12:22:41 -0700 templatespec: use new factory functions in hooklib
Martin von Zweigbergk <martinvonz@google.com> [Thu, 30 Jul 2020 12:22:41 -0700] rev 45268
templatespec: use new factory functions in hooklib Differential Revision: https://phab.mercurial-scm.org/D8853
Mon, 20 Jul 2020 22:43:33 -0700 templatespec: use new factory functions in logcmdutil
Martin von Zweigbergk <martinvonz@google.com> [Mon, 20 Jul 2020 22:43:33 -0700] rev 45267
templatespec: use new factory functions in logcmdutil Differential Revision: https://phab.mercurial-scm.org/D8848
Mon, 20 Jul 2020 21:33:28 -0700 templatespec: move check for non-unicode to lower-level function
Martin von Zweigbergk <martinvonz@google.com> [Mon, 20 Jul 2020 21:33:28 -0700] rev 45266
templatespec: move check for non-unicode to lower-level function Now that we have the factory functions, it makes sense to have the check there. Differential Revision: https://phab.mercurial-scm.org/D8847
Mon, 20 Jul 2020 21:32:10 -0700 templatespec: logcmdutil.templatespec() gets either template or mapfile
Martin von Zweigbergk <martinvonz@google.com> [Mon, 20 Jul 2020 21:32:10 -0700] rev 45265
templatespec: logcmdutil.templatespec() gets either template or mapfile The callers of the function already never pass (non-`None`) values for both, so let's check that and call the new factory functions. Differential Revision: https://phab.mercurial-scm.org/D8846
Thu, 16 Jul 2020 13:33:46 -0700 templatespec: create a factory function for each type there is
Martin von Zweigbergk <martinvonz@google.com> [Thu, 16 Jul 2020 13:33:46 -0700] rev 45264
templatespec: create a factory function for each type there is Most of the arguments to the `templatespec` constructor are mutually exclusive, so each combination creates a different type of templatespec. Let's clarify that by creating factory functions. I've left the callers in `logcmdutil` unchanged for now because they are more complex and `logcmdutil.templatespec()` is slightly higher level in that it is specific to changesets. My larger goal is to add support frozen binaries (specifically PyOxidizer) by adding a specific type of `templatespec` for built-in templates. That will get its own factory function. Differential Revision: https://phab.mercurial-scm.org/D8845
Wed, 29 Jul 2020 10:42:09 -0700 templater: stop accepting a single style to stylemap()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Jul 2020 10:42:09 -0700] rev 45263
templater: stop accepting a single style to stylemap() The code seems to have been for compatibility across d3dbdca92458 (hgweb: don't choke when an inexistent style is requested (issue1901), 2009-11-12). Differential Revision: https://phab.mercurial-scm.org/D8844
Thu, 23 Jul 2020 10:20:48 -0700 formatter: inline a variable assigned from `templater.templater.frommapfile`
Martin von Zweigbergk <martinvonz@google.com> [Thu, 23 Jul 2020 10:20:48 -0700] rev 45262
formatter: inline a variable assigned from `templater.templater.frommapfile` The variable doesn't get reused and it doesn't help formatting, so I don't see any reason for it. Differential Revision: https://phab.mercurial-scm.org/D8807
Wed, 22 Jul 2020 21:23:46 -0700 templater: don't normalize path separators to '/' when interacting with OS
Martin von Zweigbergk <martinvonz@google.com> [Wed, 22 Jul 2020 21:23:46 -0700] rev 45261
templater: don't normalize path separators to '/' when interacting with OS `_readmapfile()` is about reading a map file from the file system, so we shouldn't use our `util.normpath()`, which also normalizes `os.sep` to '/'. Differential Revision: https://phab.mercurial-scm.org/D8806
Thu, 23 Jul 2020 22:50:20 -0700 formatter: remove now-unnecessary check for file-ness
Martin von Zweigbergk <martinvonz@google.com> [Thu, 23 Jul 2020 22:50:20 -0700] rev 45260
formatter: remove now-unnecessary check for file-ness `templater.templatepath()` now returns non-`None` only for files, so the caller doesn't have to check. Differential Revision: https://phab.mercurial-scm.org/D8805
Thu, 23 Jul 2020 22:47:55 -0700 templater: make templatepath() not return directory paths
Martin von Zweigbergk <martinvonz@google.com> [Thu, 23 Jul 2020 22:47:55 -0700] rev 45259
templater: make templatepath() not return directory paths The previous patch added a test showing an unusal error message. This make it more like other error messages. Differential Revision: https://phab.mercurial-scm.org/D8804
Thu, 23 Jul 2020 22:44:18 -0700 tests: show unusual error message for `hg log --style coal`
Martin von Zweigbergk <martinvonz@google.com> [Thu, 23 Jul 2020 22:44:18 -0700] rev 45258
tests: show unusual error message for `hg log --style coal` It turns out that we show the full path when the given style name matches a subdirectory of `mercurial/templates/`. Differential Revision: https://phab.mercurial-scm.org/D8803
Wed, 22 Jul 2020 10:34:24 -0700 config: remove now-unused `abs` argument from `include` callback
Martin von Zweigbergk <martinvonz@google.com> [Wed, 22 Jul 2020 10:34:24 -0700] rev 45257
config: remove now-unused `abs` argument from `include` callback Differential Revision: https://phab.mercurial-scm.org/D8796
Wed, 22 Jul 2020 10:32:28 -0700 config: re-calculate absolute %include path in `include` callback
Martin von Zweigbergk <martinvonz@google.com> [Wed, 22 Jul 2020 10:32:28 -0700] rev 45256
config: re-calculate absolute %include path in `include` callback This removes the last user of the `abs` argument for the `include` callback. The next patch will remove the argument. Differential Revision: https://phab.mercurial-scm.org/D8795
Wed, 22 Jul 2020 10:25:28 -0700 subrepoutil: use relative path for looking up config `%include`s
Martin von Zweigbergk <martinvonz@google.com> [Wed, 22 Jul 2020 10:25:28 -0700] rev 45255
subrepoutil: use relative path for looking up config `%include`s The code was already working with relative paths in practice, since it passed in a (repo-)relative path into its local `read()` function. So all that this patch actually does is to switch to rename variables so we use the same path by a different name. This gets us closer to removing the "absolute" path from the `include` callback. Differential Revision: https://phab.mercurial-scm.org/D8794
Wed, 22 Jul 2020 00:13:02 -0700 config: remove now-unused support for "includepaths"
Martin von Zweigbergk <martinvonz@google.com> [Wed, 22 Jul 2020 00:13:02 -0700] rev 45254
config: remove now-unused support for "includepaths" This effectively undoes 081b08e4ea13 (templater: look for mapfiles in template paths, 2015-05-15). Differential Revision: https://phab.mercurial-scm.org/D8793
Sat, 25 Jul 2020 22:51:26 +0900 dispatch: adjust ui.flush() timing to stabilize test-blackbox.t stable
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Jul 2020 22:51:26 +0900] rev 45253
dispatch: adjust ui.flush() timing to stabilize test-blackbox.t Without this change, dispatch.dispatch() could return before flushing all stdio data. This means chg stdio would print data after receiving the result code. --- tests/test-blackbox.t +++ tests/test-blackbox.t.err @@ -354,13 +354,13 @@ > EOF $ hg log --debug removing $TESTTMP/gone/.hg - warning: cannot write to blackbox.log: $ENOENT$ (no-windows !) warning: cannot write to blackbox.log: $TESTTMP/gone/.hg/blackbox.log: $ENOTDIR$ (windows !) $ cd .. blackbox should disable itself if track is empty $ hg --config blackbox.track= init nothing_tracked + warning: cannot write to blackbox.log: $ENOENT$ $ cd nothing_tracked $ cat >> .hg/hgrc << EOF > [blackbox]
Sun, 26 Jul 2020 12:46:04 -0700 clonebundles: document REQUIREDRAM key stable
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 26 Jul 2020 12:46:04 -0700] rev 45252
clonebundles: document REQUIREDRAM key This is a follow-up to 72feaeb510b3, which introduced the feature. The key should be documented as part of the format specification inside the extension docstring. Differential Revision: https://phab.mercurial-scm.org/D8838
Sat, 25 Jul 2020 15:37:05 +0200 commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 15:37:05 +0200] rev 45251
commitctx: gather more code dealing with copy-in-extra Now that we have a function that deal with the copy-in-extra special case, we can gather more code meant to deal with this special case. Making the rest of the code simpler.
Sat, 25 Jul 2020 15:33:45 +0200 commitctx: rename files to touched in a couple of place
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 15:33:45 +0200] rev 45250
commitctx: rename files to touched in a couple of place This is a clearer word that we will use increasingly over this series. It also make the old variable name available to another usage :-)
Sat, 25 Jul 2020 15:13:25 +0200 commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 15:13:25 +0200] rev 45249
commitctx: extract copy information encoding into extra into commit.py The encoding of copy information into extra has multiple subcases and become quite complicated (eg: empty list can be explicitly or implicitly stored for example). In addition, it is niche experimental feature since as it affect the hash, it is only suitable for user who don't mercurial for storage server side (ie: Google). Having this complexity part of the changelog will get in the way of further cleanup. We could have to either move more of that logic into the changelog or to move or extract more of the logic at the higher level. We take the second approach and start gather logic in dedicated function in commit.py.
Sat, 25 Jul 2020 14:59:55 +0200 commitctx: create the new extra dict on its own line
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Jul 2020 14:59:55 +0200] rev 45248
commitctx: create the new extra dict on its own line A trivial move to make the next changeset easier to read.
Wed, 29 Jul 2020 15:40:13 +0200 commitctx: explicitly pass `manifest` to _commit_manifest
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 29 Jul 2020 15:40:13 +0200] rev 45247
commitctx: explicitly pass `manifest` to _commit_manifest As pointed out by Yuya Nishihara.
Thu, 30 Jul 2020 16:58:38 +0100 phabricator: unconditionally pop `test_vcr` to fix debugcallconduit
Ian Moody <moz-ian@perix.co.uk> [Thu, 30 Jul 2020 16:58:38 +0100] rev 45246
phabricator: unconditionally pop `test_vcr` to fix debugcallconduit 11592ce6a711 / D8525 accidentally broke debugcallconduit in non-test scenarios because it stopped popping `test_vcr` from `kwargs` unconditionally, so when `--test-vcr` isn't set the empty string still gets passed down as the value of `test_vcr` in `kwargs`. However unlike all the other commands debugcallconduit doesn't have an `**opts` argument to receive it, so it aborts because of invalid arguments. Differential Revision: https://phab.mercurial-scm.org/D8852
Thu, 30 Jul 2020 16:52:12 +0100 phabricator: demonstrate debugcallconduit being broken without --test-vcr
Ian Moody <moz-ian@perix.co.uk> [Thu, 30 Jul 2020 16:52:12 +0100] rev 45245
phabricator: demonstrate debugcallconduit being broken without --test-vcr This was accidentally broken by 11592ce6a711 / D8525 Differential Revision: https://phab.mercurial-scm.org/D8851
Tue, 28 Jul 2020 11:11:14 -0700 cleanup: fix bad formatting of state.py from D8811
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Jul 2020 11:11:14 -0700] rev 45244
cleanup: fix bad formatting of state.py from D8811 `test-check-format.t` was failing for me. Do I just have the wrong version? Differential Revision: https://phab.mercurial-scm.org/D8841
Thu, 30 Jul 2020 16:13:17 +0200 dirstate: restore original estimation and update comment
Joerg Sonnenberger <joerg@bec.de> [Thu, 30 Jul 2020 16:13:17 +0200] rev 45243
dirstate: restore original estimation and update comment The former comment didn't reflect the content of the dirstate entries, the two nodes are a fixed header in the file and not per-entry. Split the documented entry into the path part and the fixed header. The heuristic itself is still valid, e.g. for the NetBSD src tree a maximum path size of 142 and an average of 49, resulting in 66 bytes per entry on average. Differential Revision: https://phab.mercurial-scm.org/D8850
Fri, 31 Jul 2020 17:09:31 +0530 merge stable in default
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 31 Jul 2020 17:09:31 +0530] rev 45242
merge stable in default
Thu, 30 Jul 2020 01:10:10 +0200 dirstate: revert change to Rust binding
Joerg Sonnenberger <joerg@bec.de> [Thu, 30 Jul 2020 01:10:10 +0200] rev 45241
dirstate: revert change to Rust binding The Rust binding uses its own class and is not derived from the regular implementation. As such, it didn't get _nodelen. Differential Revision: https://phab.mercurial-scm.org/D8849
Tue, 28 Jul 2020 10:19:49 -0700 relnotes: copy "next" to "5.5" and clear "next" stable
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Jul 2020 10:19:49 -0700] rev 45240
relnotes: copy "next" to "5.5" and clear "next" The same procedure as every year^Wcycle. Differential Revision: https://phab.mercurial-scm.org/D8839
Thu, 23 Jul 2020 23:52:31 +0200 commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 23:52:31 +0200] rev 45239
commitctx: extract all the file preparation logic in a new function Before we actually start to create a new commit we have a large block of logic that do the necessary file and manifest commit and that determine which files are been affected by the commit (and how). This is a complex process on its own. It return a "simple" output that can be fed to the next step. The output itself is not that simple as we return a lot of individual items (files, added, removed, ...). My next step (and actual goal for this cleanup) will be to simplify the return by returning a richer object that will be more suited for the variation of data we want to store. After this changeset the `commitctx` is a collection of smaller function with limited scope. The largest one is still `_filecommit` without about 100 lines of code.
Thu, 23 Jul 2020 23:58:23 +0200 commitctx: gather more preparation code within the lock context
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 23:58:23 +0200] rev 45238
commitctx: gather more preparation code within the lock context This is a small change that exist mostly for clarification. I am about to move a large amount of code in its own function. having all that code next to each other will make the next changeset clearer.
Thu, 23 Jul 2020 23:40:59 +0200 commitctx: move a special case about files earlier
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 23:40:59 +0200] rev 45237
commitctx: move a special case about files earlier Same logic as a changeset a bit earlier, the `writefilecopymeta` section is more a post processing details so we move the conditional about `files` value closer to the rest of the code computing `files` value.
Thu, 23 Jul 2020 18:25:45 +0200 commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 18:25:45 +0200] rev 45236
commitctx: extract all the manual logic to process the files That branch of the if is significantly more complicated than the other two. Moving it to its own function make it simple to keep the scope limited and to read to the higher level function.
Thu, 23 Jul 2020 23:08:00 +0200 commitctx: treat `filesadded` more like `filesremoved`
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 23:08:00 +0200] rev 45235
commitctx: treat `filesadded` more like `filesremoved` Accumulating the filename in a list will have a negligible cost and deal with the list of added files like the other ones will make is code cleaning simpler. The two variable with very close name is not great, but my plan is to split most of the code in a separated function which will make the "problem" go away by itself.
Thu, 23 Jul 2020 22:58:29 +0200 commitctx: move `writechangesetcopy` business at the end a code section
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 22:58:29 +0200] rev 45234
commitctx: move `writechangesetcopy` business at the end a code section This code is to handle a specific subcase so we move it a the end. This allow to gather the rest of the "core" code closer to the related logic.
Thu, 23 Jul 2020 21:09:42 +0200 commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 21:09:42 +0200] rev 45233
commitctx: move copy meta config reading in a dedicated function The logic is non trivial, make it contained in a function is clearer. It also unlock easy re-use of that logic without having the pass the value around.
Thu, 23 Jul 2020 21:03:30 +0200 commitctx: no longer use the `writecopiesto` variable in the function
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 21:03:30 +0200] rev 45232
commitctx: no longer use the `writecopiesto` variable in the function The `writefilecopymeta` variable already carry the same information, so we can use `writefilecopymeta` in the one conditional where `writecopiesto` was used.
Thu, 23 Jul 2020 14:58:21 +0200 commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 14:58:21 +0200] rev 45231
commitctx: extract the function that commit a new manifest The logic is large enough and isolated enough to be extracted, this reduce the size of the main function, making it simpler to follow.
Fri, 24 Jul 2020 12:52:32 +0200 commitctx: stop using weakref proxy for transaction
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 24 Jul 2020 12:52:32 +0200] rev 45230
commitctx: stop using weakref proxy for transaction This weakref proxy was introduced in 2007 by 30d4d8985dd8. If I understand it correctly, the logic at that time was relying on the transaction destructor, triggered at garbage collection time to rollback failed transaction. passing the object to sub function directly mean it would live in the function scope and be trapped in the traceback on exception, leading to the transaction rollback too late in some case. Modern transaction usage use explicit opening and closing of transaction and no longer rely on some internal reference counting details. So this weakref proxy is no longer necessary. Absolutely no test are affected when we drop it.
Tue, 28 Jul 2020 20:47:50 +0200 rebase: fix regression in file change detection introduced by 0ecb3b11fcad stable
Manuel Jacob <me@manueljacob.de> [Tue, 28 Jul 2020 20:47:50 +0200] rev 45229
rebase: fix regression in file change detection introduced by 0ecb3b11fcad Before 0ecb3b11fcad, `wctx._compact()`, was called by `wctx.nofilechanges()` as a side effect. Later, it turned out that this side effect is needed to correctly detect which files changed. See https://phab.mercurial-scm.org/D8733#131949 for the history. The problem could also be triggered by running `tests/test-rebase-parameters.t` with `--extra-config-opt rebase.experimental.inmemory=1`. Differential Revision: https://phab.mercurial-scm.org/D8843
Tue, 28 Jul 2020 20:07:05 +0200 context: re-add `overlayworkingctx._compact()` removed in 6a5dcd754842 stable
Manuel Jacob <me@manueljacob.de> [Tue, 28 Jul 2020 20:07:05 +0200] rev 45228
context: re-add `overlayworkingctx._compact()` removed in 6a5dcd754842 This partially backs out 6a5dcd754842. The method was and is unused, but a call to it is introduced in the next patch. Differential Revision: https://phab.mercurial-scm.org/D8842
Thu, 23 Jul 2020 16:30:30 +0200 push: test for checks preventing publishing obsolete changeset stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 16:30:30 +0200] rev 45227
push: test for checks preventing publishing obsolete changeset The main difference from the previous test is how the changeset was obsoleted. In this case it is an amend so publishing the orphan would also create phase divergence. This must not go unnoticed.
Thu, 23 Jul 2020 16:29:15 +0200 push: test for checks preventing publishing obsolete changeset stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 16:29:15 +0200] rev 45226
push: test for checks preventing publishing obsolete changeset This introduce a simple example, more are coming. See inline documentation for details.
Thu, 23 Jul 2020 16:26:29 +0200 push: another test for checks preventing pushing orphaness to a server stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 16:26:29 +0200] rev 45225
push: another test for checks preventing pushing orphaness to a server In this one, orphan was create with and amend instead of a prune.
Thu, 23 Jul 2020 16:23:43 +0200 push: test the checks preventing pushing orphaness to a server stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 16:23:43 +0200] rev 45224
push: test the checks preventing pushing orphaness to a server This is introduce a simple example, more are coming. See inline documentation for details.
Wed, 22 Jul 2020 16:10:33 +0200 commitctx: document the None return for "touched" value
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 22 Jul 2020 16:10:33 +0200] rev 45223
commitctx: document the None return for "touched" value
Thu, 23 Jul 2020 22:06:36 -0700 tests: add tests trying to use dir as style, as %include, and as __base__
Martin von Zweigbergk <martinvonz@google.com> [Thu, 23 Jul 2020 22:06:36 -0700] rev 45222
tests: add tests trying to use dir as style, as %include, and as __base__ Differential Revision: https://phab.mercurial-scm.org/D8800
Thu, 23 Jul 2020 22:06:31 -0700 tests: fix mistaken copy&paste from commit 4489e9a22763
Martin von Zweigbergk <martinvonz@google.com> [Thu, 23 Jul 2020 22:06:31 -0700] rev 45221
tests: fix mistaken copy&paste from commit 4489e9a22763 Differential Revision: https://phab.mercurial-scm.org/D8802
Mon, 06 Jul 2020 15:10:53 +0200 manifest: kill one more instance of the old merge hash hack
Joerg Sonnenberger <joerg@bec.de> [Mon, 06 Jul 2020 15:10:53 +0200] rev 45220
manifest: kill one more instance of the old merge hash hack Differential Revision: https://phab.mercurial-scm.org/D8766
Sat, 25 Jul 2020 04:29:17 +0200 dirstate: isolate node len dependency for the pure version
Joerg Sonnenberger <joerg@bec.de> [Sat, 25 Jul 2020 04:29:17 +0200] rev 45219
dirstate: isolate node len dependency for the pure version When switching to a 256bit hash function, this still needs adjustment, but concentrates the change in one place. Differential Revision: https://phab.mercurial-scm.org/D8815
Fri, 24 Jul 2020 08:38:19 -0700 fix: update documentation to reflect preference for --source over --rev
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Jul 2020 08:38:19 -0700] rev 45218
fix: update documentation to reflect preference for --source over --rev I should have updated the documentation in 5205b46bd887 (fix: add a -s option to format a revision and its descendants, 2020-03-13) and/or a6ef1e8e2f6d (fix: mark -r as advanced, 2020-03-13)... Differential Revision: https://phab.mercurial-scm.org/D8808
Fri, 24 Jul 2020 16:32:45 -0700 tests: make check-py3-compat.py actually load the specified files correctly
Kyle Lippincott <spectral@google.com> [Fri, 24 Jul 2020 16:32:45 -0700] rev 45217
tests: make check-py3-compat.py actually load the specified files correctly For most uses, this change is essentially a no-op, as this script is generally only run by test-check-py3-compat.t, which will already put `$TESTDIR/..` in `$PYTHONPATH`. When running outside of tests, however, `$PYTHONPATH` is likely not set, causing check-py3-compat.py to parse the file from the repo, but then import the installed version, and raise any errors about the installed version, not the one currently in the repo. Additionally, this helps users (like me) who have a strange set up where their home directory (and thus their hg repos) happen to be in a subdirectory of sys.prefix (which is /usr on my system). Since the '.' entry added to sys.path takes precedence over the absolute path of `$TESTDIR/..` in `$PYTHONPATH`, the path to the modules that it imports (and that show up in any stack trace) are *relative*, meaning that we don't detect them as starting with `sys.prefix`. Sample non-test invocation, and the difference this change makes (the path for 'error at <path>:<line>' is correct now):: Before: ``` $ python3 contrib/check-py3-compat.py mercurial/win*.py mercurial/win32.py: error importing: <ValueError> _type_ 'v' not supported (error at check-py3-compat.py:65) mercurial/windows.py: error importing: <ModuleNotFoundError> No module named 'msvcrt' (error at check-py3-compat.py:65) ``` After: ``` $ python3 contrib/check-py3-compat.py mercurial/win*.py mercurial/win32.py: error importing: <ValueError> _type_ 'v' not supported (error at win32.py:11) mercurial/windows.py: error importing: <ModuleNotFoundError> No module named 'msvcrt' (error at windows.py:12) ``` Differential Revision: https://phab.mercurial-scm.org/D8814
Fri, 24 Jul 2020 12:13:10 -0700 tests: virtualenv is only used on py2, rename and conditionalize
Kyle Lippincott <spectral@google.com> [Fri, 24 Jul 2020 12:13:10 -0700] rev 45216
tests: virtualenv is only used on py2, rename and conditionalize If I have I have the Debian `python3-virtualenv` package installed on my machine, the import succeeds but then I receive an AttributeError because the package is essentially completely different between py2 and py3, and test-hghave fails. Differential Revision: https://phab.mercurial-scm.org/D8812
Thu, 23 Jul 2020 13:31:45 -0700 morestatus: mention --stop even if not using --verbose
Kyle Lippincott <spectral@google.com> [Thu, 23 Jul 2020 13:31:45 -0700] rev 45215
morestatus: mention --stop even if not using --verbose Differential Revision: https://phab.mercurial-scm.org/D8811
Thu, 23 Jul 2020 16:57:56 +0200 exchange: backout changeset c26335fa4225 stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 16:57:56 +0200] rev 45214
exchange: backout changeset c26335fa4225 Changeset c26335fa4225 has good intends but introduce significant behavior regressions for multiple important cases. In short there are many case where push would have caught instability creation/propagation that are no longer covered. These behavior have been covered for many years and even if some related case are not currently caught, the covered one should not be regressed. The next four changesets introduce tests for some of these cases. However we could produce many more tests cases since the area is wide and they are many possible combination. (And we should cover them when getting back to this issue) Since 5.5 is one week away, the most reasonable approach seems to back this out while we devise a new way to move forward that preserve the current behavior, catch more issues and also improves the situation that c26335fa4225 target. In addition to the behavior change, c26335fa4225 also introduced output changes. These output changes does not requires a backout per-se, but are part of the same changeset. However they come with a couple of issues that also requires attention: 1) the bulk of the error message have been shoehorned into a multiple line abort message. This seems quite different from what we usually do. The abort message should be a compact and efficient message, with extra details being issued as normal error output beforehand. (with --verbose/--quiet) support. 2) the current output is unbounded, so if there is many (tens, hundreds, thousands, …) of unstable/obsolete changeset involved in the push, the output can quickly become a scary and un-usuable wall of text. So we need some limitation here (same as we have with the remote head list that says A, B , C and # others).
Fri, 24 Jul 2020 11:24:59 -0700 templater: handle None returned from templatedir()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Jul 2020 11:24:59 -0700] rev 45213
templater: handle None returned from templatedir() My recent 91aa9bba3dc9 (templater: make templatepaths() return a single path, or None, 2020-07-21) didn't account for the fact that `templatedir()` returns `None` in frozen binaries. That is ironic, since the reason I'm working on this is to add support for built-in mapfiles in frozen binaries. This patch updates the callers to handle the `None` case. It's somewhat ugly, but I will have to revisit this soon anyway, since my goal is to make all callers handle that case by trying to read the map file using the resources API instead. Differential Revision: https://phab.mercurial-scm.org/D8810
Fri, 24 Jul 2020 00:50:57 +0530 tests: glob 'mercurial.error' in test-phases.t stable
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 24 Jul 2020 00:50:57 +0530] rev 45212
tests: glob 'mercurial.error' in test-phases.t On python 2 with chg, `mercurial.error` is omitted while printing error. On other cases it's there in error message. I did tried to understand what might be the cause was unable to find one on quick skim through the code.
Thu, 23 Jul 2020 17:32:09 +0200 infinitepush: remove unused import to tempfile stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 17:32:09 +0200] rev 45211
infinitepush: remove unused import to tempfile Spotted by test-check-pyflakes.t
Wed, 22 Jul 2020 00:09:17 -0700 templater: do search for include of unqualified builtin outside of config code
Martin von Zweigbergk <martinvonz@google.com> [Wed, 22 Jul 2020 00:09:17 -0700] rev 45210
templater: do search for include of unqualified builtin outside of config code Commit 081b08e4ea13 (templater: look for mapfiles in template paths, 2015-05-15) added support for using things like `%include map-cmdline.default` to include built-in map files without using a valid path to them. This patch rewrites that support by moving it into `_readmapfile()` so it can later be adapted for reading from a non-file resource. Differential Revision: https://phab.mercurial-scm.org/D8792
Tue, 21 Jul 2020 21:59:12 -0700 templater: switch to lower-level config.parse() in _readmapfile()
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 21:59:12 -0700] rev 45209
templater: switch to lower-level config.parse() in _readmapfile() I hope to modify this code to also work with resources loaded from memory (for PyOxidizer support). For that, we'll need to handle the lookup of relative `%include` path (not joined with the base directory of the containing file). This patch prepares for that by using `config.parse()` instead of `config.read()`, since the latter expects a file in the file system. As it happens, this change also lets us clean up the `config` class to not need the `_includepaths` field. That will happen next. Differential Revision: https://phab.mercurial-scm.org/D8791
Tue, 21 Jul 2020 23:50:42 -0700 config: pass both relative and absolute paths to `include` callback
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 23:50:42 -0700] rev 45208
config: pass both relative and absolute paths to `include` callback The `include` callback is responsible for loading configs from `%include` statements. The callback currently gets passed the absolute path [1] to the config to read. That is created by joining the dirname of the file that contains the `%include` statement. For PyOxidizer support, I'm trying to reduce dependence on paths. This patch helps with that by passing the relative path found in the `%include` statement (but with username expansion, etc.) to the `include` callback. It also turns out that the existing callers can easily adapt to using the relative path. Coming patches will clean that up and then we'll remove the absolute path from the callback. [1] The "absolute path" bit is a bit of a lie -- it's going to be an absolute path if the path that was passed into `config.parse()` was absolute. Differential Revision: https://phab.mercurial-scm.org/D8790
Wed, 22 Jul 2020 22:38:42 -0700 tests: add test for bad template %include and __base__
Martin von Zweigbergk <martinvonz@google.com> [Wed, 22 Jul 2020 22:38:42 -0700] rev 45207
tests: add test for bad template %include and __base__ It doesn't seem like we had any tests for `%include non-existent` and `__base__ = non-existent`. The latter raises an error while the former ignores the include. We should probably also make the former an error. Differential Revision: https://phab.mercurial-scm.org/D8798
Tue, 21 Jul 2020 22:52:22 -0700 tests: add test for unqualified include of a built-in template map
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 22:52:22 -0700] rev 45206
tests: add test for unqualified include of a built-in template map The feature was added in 081b08e4ea13 (templater: look for mapfiles in template paths, 2015-05-15), but no test case was added. Differential Revision: https://phab.mercurial-scm.org/D8797
Wed, 22 Jul 2020 22:09:38 -0400 merge with stable
Augie Fackler <augie@google.com> [Wed, 22 Jul 2020 22:09:38 -0400] rev 45205
merge with stable
Tue, 07 Jul 2020 00:18:15 +0200 commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Jul 2020 00:18:15 +0200] rev 45204
commitctx: extract _filecommit too This function is exclusively used in `commitctx`. So we should extract it too for consistency and to reduce the `localrepo` bloat. This is part of a larger refactoring/cleanup of the commitctx code to clarify and augment the logic gathering metadata useful for copy tracing. The current code is a tad too long and entangled to make such update easy. Differential Revision: https://phab.mercurial-scm.org/D8710
Mon, 06 Jul 2020 23:14:52 +0200 commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 23:14:52 +0200] rev 45203
commitctx: extract the function in a dedicated module the function have few callers (< 15) is quite long a mostly independent from the repository itself. It seems like a good candidate to reduce the bloatness of the localrepository class. Extracting it will help us cleaning the code up and splitting it into more reasonable-size function. We don't use a copy trick because the amount of code extract is quite small (<5%) and the de-indent means every single line change anyway. So this is not deemed valuable to do so. This is part of a larger refactoring/cleanup of the commitctx code to clarify and augment the logic gathering metadata useful for copy tracing. The current code is a tad too long and entangled to make such update easy. Differential Revision: https://phab.mercurial-scm.org/D8709
Mon, 06 Jul 2020 19:13:19 +0200 commitctx: document a fast path in _filecommit
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 19:13:19 +0200] rev 45202
commitctx: document a fast path in _filecommit This block cut off a lot of logic, documenting the why and how seems useful to future reader. This is part of a larger refactoring/cleanup of the commitctx code to clarify and augment the logic gathering metadata useful for copy tracing. The current code is a tad too long and entangled to make such update easy. We start with easy and small cleanup. Differential Revision: https://phab.mercurial-scm.org/D8700
Tue, 21 Jul 2020 13:36:48 -0700 hgweb: simplify now that we always have a single path
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 13:36:48 -0700] rev 45201
hgweb: simplify now that we always have a single path Both `templatedir()` and `web.templatepath` are now always a single path (or None). Differential Revision: https://phab.mercurial-scm.org/D8788
Tue, 21 Jul 2020 13:41:26 -0700 templater: simplify stylemap() now that templatedir() returns a single path
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 13:41:26 -0700] rev 45200
templater: simplify stylemap() now that templatedir() returns a single path Differential Revision: https://phab.mercurial-scm.org/D8787
Tue, 21 Jul 2020 13:11:49 -0700 templater: make templatepaths() return a single path, or None
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 13:11:49 -0700] rev 45199
templater: make templatepaths() return a single path, or None The function returns either a singleton list or an empty list, so it makes more sense to return a value or None. The plural in the name also doesn't make sense, but `templatepath()` is already taken, so I renamed it to `templatedir()` instead. Differential Revision: https://phab.mercurial-scm.org/D8786
Tue, 21 Jul 2020 13:05:37 -0700 templater: simplify templatepaths() to avoid iterating a singleton list
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 13:05:37 -0700] rev 45198
templater: simplify templatepaths() to avoid iterating a singleton list The function iterates over a hard-coded list of one element since d844e220792a (templater: don't search randomly for templates - trust util.datapath, 2014-09-28). Differential Revision: https://phab.mercurial-scm.org/D8785
Mon, 06 Jul 2020 22:46:49 +0200 commitctx: move a tiny else clause above the very long one
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 22:46:49 +0200] rev 45197
commitctx: move a tiny else clause above the very long one This is simple to have all the simple case unfold before the 100+ line one. Otherwise it is hard to relate the `else` to the initial conditionnal. This is part of a larger refactoring/cleanup of the commitctx code to clarify and augment the logic gathering metadata useful for copy tracing. The current code is a tad too long and entangled to make such update easy. We start with easy and small cleanup. Differential Revision: https://phab.mercurial-scm.org/D8708
Mon, 06 Jul 2020 22:37:53 +0200 commitctx: consider removed as touched
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 22:37:53 +0200] rev 45196
commitctx: consider removed as touched This achieve the same result with clearer code. This is part of a larger refactoring/cleanup of the commitctx code to clarify and augment the logic gathering metadata useful for copy tracing. The current code is a tad too long and entangled to make such update easy. We start with easy and small cleanup. Differential Revision: https://phab.mercurial-scm.org/D8707
Mon, 06 Jul 2020 22:35:34 +0200 commitctx: rename "changed" to touched
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 22:35:34 +0200] rev 45195
commitctx: rename "changed" to touched The variable contains content that are both added and modified. "changed" could be confused with "modified" only, so we pick a less ambiguous naming that will help with more unification. For example, it would make sense to shove the "removed" item in there since this is how the variable is used. This is part of a larger refactoring/cleanup of the commitctx code to clarify and augment the logic gathering metadata useful for copy tracing. The current code is a tad too long and entangled to make such update easy. We start with easy and small cleanup. Differential Revision: https://phab.mercurial-scm.org/D8706
Tue, 07 Jul 2020 11:16:28 +0200 commitctx: more filesremoved assignment closer to removed computation
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Jul 2020 11:16:28 +0200] rev 45194
commitctx: more filesremoved assignment closer to removed computation A small change that makes the code flow clearer. This is part of a larger refactoring/cleanup of the commitctx code to clarify and augment the logic gathering metadata useful for copy tracing. The current code is a tad too long and entangled to make such update easy. We start with easy and small cleanup. Differential Revision: https://phab.mercurial-scm.org/D8704
Mon, 06 Jul 2020 20:03:30 +0200 commitctx: compute files added from _filecommit returns
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 20:03:30 +0200] rev 45193
commitctx: compute files added from _filecommit returns When possible, lets avoid recomputing the same information again. This is part of a larger refactoring/cleanup of the commitctx code to clarify and augment the logic gathering metadata useful for copy tracing. The current code is a tad too long and entangled to make such update easy. We start with easy and small cleanup. Differential Revision: https://phab.mercurial-scm.org/D8703
Mon, 06 Jul 2020 19:35:53 +0200 commitctx: return "touched" status from _filecommit
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 19:35:53 +0200] rev 45192
commitctx: return "touched" status from _filecommit Instead of mutating a list passed in argument, we simply return the information from the `_filecommit` function. This make for a cleaner API and allow for richer information to be returned. That richer information will be used in the next commit to avoid duplicated computation. This is part of a larger refactoring/cleanup of the commitctx code to clarify and augment the logic gathering metadata useful for copy tracing. The current code is a tad too long and entangled to make such update easy. We start with easy and small cleanup. Differential Revision: https://phab.mercurial-scm.org/D8702
Tue, 21 Jul 2020 01:04:19 +0200 relnotes: add release notes for relevant changes I did since the 5.4 release stable
Manuel Jacob <me@manueljacob.de> [Tue, 21 Jul 2020 01:04:19 +0200] rev 45191
relnotes: add release notes for relevant changes I did since the 5.4 release After having written the notes, I realized that the added points contain changes that were part of the 5.4.2 release. These were never included in any release notes. I asked on IRC whether they should be added to this file or not, but didn’t get an answer to this question. If they should not be added here, I can remove them. Differential Revision: https://phab.mercurial-scm.org/D8770
Mon, 20 Jul 2020 18:04:19 +0200 relnotes: fix indentation stable
Manuel Jacob <me@manueljacob.de> [Mon, 20 Jul 2020 18:04:19 +0200] rev 45190
relnotes: fix indentation The two points were written by me. For some reason, I missed the fact that the other points were indented by one space. Differential Revision: https://phab.mercurial-scm.org/D8769
Mon, 20 Jul 2020 17:57:31 +0200 relnotes: make spacing before new section consistent stable
Manuel Jacob <me@manueljacob.de> [Mon, 20 Jul 2020 17:57:31 +0200] rev 45189
relnotes: make spacing before new section consistent Differential Revision: https://phab.mercurial-scm.org/D8768
Wed, 22 Jul 2020 14:58:49 +0530 tests: make one of 'worker process exited' line option in test-chg.t stable
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 22 Jul 2020 14:58:49 +0530] rev 45188
tests: make one of 'worker process exited' line option in test-chg.t I investigated and it seems like under high load, the child process is already there and no new fork was created. Hence the process was not closed.
Wed, 22 Apr 2020 18:08:12 -0400 infinitepush: fix `{get,put}_args` formatting on Python 3 stable
Connor Sheehan <sheehan@mozilla.com> [Wed, 22 Apr 2020 18:08:12 -0400] rev 45187
infinitepush: fix `{get,put}_args` formatting on Python 3 Calling `.format()` on a byte-string does not work, thus causing an exception on Python 3. This commit adds a function to paper over the difference. Differential Revision: https://phab.mercurial-scm.org/D8781
Wed, 22 Apr 2020 17:59:17 -0400 infinitepush: replace `NamedTemporaryFile` with `pycompat.namedtempfile` stable
Connor Sheehan <sheehan@mozilla.com> [Wed, 22 Apr 2020 17:59:17 -0400] rev 45186
infinitepush: replace `NamedTemporaryFile` with `pycompat.namedtempfile` Fixes a Python 3 compat error when using the external bundle store. Differential Revision: https://phab.mercurial-scm.org/D8780
Mon, 20 Jul 2020 20:31:24 +0900 chgserver: discard buffered output before restoring fds (issue6207) stable
Yuya Nishihara <yuya@tcha.org> [Mon, 20 Jul 2020 20:31:24 +0900] rev 45185
chgserver: discard buffered output before restoring fds (issue6207) On Python 3, flush() appears not discarding buffered data on EPIPE, and the buffered data will be carried over to the restored stdout.
Tue, 21 Jul 2020 20:49:05 +0900 hghave: fix possible int('') in has_clang_format() stable
Yuya Nishihara <yuya@tcha.org> [Tue, 21 Jul 2020 20:49:05 +0900] rev 45184
hghave: fix possible int('') in has_clang_format()
Mon, 20 Jul 2020 22:16:26 +0530 Added signature for changeset 28163c5de797 stable
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 20 Jul 2020 22:16:26 +0530] rev 45183
Added signature for changeset 28163c5de797
Mon, 20 Jul 2020 22:16:13 +0530 Added tag 5.5rc0 for changeset 28163c5de797 stable
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 20 Jul 2020 22:16:13 +0530] rev 45182
Added tag 5.5rc0 for changeset 28163c5de797
Mon, 20 Jul 2020 21:56:27 +0530 merge default into stable for 5.5rc0 stable 5.5rc0
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 20 Jul 2020 21:56:27 +0530] rev 45181
merge default into stable for 5.5rc0
Sat, 18 Jul 2020 18:38:46 +0900 phases: move short-lived PyObject pointers to local scope
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Jul 2020 18:38:46 +0900] rev 45180
phases: move short-lived PyObject pointers to local scope It helps understand which object should be decrefed on goto release.
Sat, 18 Jul 2020 18:35:17 +0900 phases: rename variable used for owned dict of phasesets
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Jul 2020 18:35:17 +0900] rev 45179
phases: rename variable used for owned dict of phasesets The phaseroots variable is used for two different objects: borrowed set and owned dict of sets. It's hard to track which object should have to be decrefed on error return.
Sat, 18 Jul 2020 18:27:39 +0900 phases: leverage Py_BuildValue() to build PyInt and steal PyObject
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Jul 2020 18:27:39 +0900] rev 45178
phases: leverage Py_BuildValue() to build PyInt and steal PyObject "N" means "O" without incref, so we can just return the created tuple.
Sat, 18 Jul 2020 18:21:26 +0900 phases: make sure an exception should be set on error return
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Jul 2020 18:21:26 +0900] rev 45177
phases: make sure an exception should be set on error return This should never happen, but the code looks wrong without PyErr_Set*() call.
Sat, 18 Jul 2020 18:19:14 +0900 phases: fix clang-format error
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Jul 2020 18:19:14 +0900] rev 45176
phases: fix clang-format error
Sat, 18 Jul 2020 18:13:41 +0900 phases: fix error return with no exception from computephases()
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Jul 2020 18:13:41 +0900] rev 45175
phases: fix error return with no exception from computephases() PySet_Check() does not set an exception.
Sun, 19 Jul 2020 17:35:41 +0900 osutil: fix excessive decref on tuple creation failure in listdir()
Yuya Nishihara <yuya@tcha.org> [Sun, 19 Jul 2020 17:35:41 +0900] rev 45174
osutil: fix excessive decref on tuple creation failure in listdir() The stat object would be freed on error for the same reason as the previous patch. makestat() can be inlined, but this patch doesn't change it. https://github.com/python/cpython/blob/2.7/Python/modsupport.c#L292 The __APPLE__ code is untested.
Sun, 19 Jul 2020 17:24:16 +0900 revlog: fix excessive decref on tuple creation failure in parse_index2()
Yuya Nishihara <yuya@tcha.org> [Sun, 19 Jul 2020 17:24:16 +0900] rev 45173
revlog: fix excessive decref on tuple creation failure in parse_index2() Since Py_BuildValue() steals the ownership of "N" arguments, these objects would already be freed if Py_BuildValue() returned NULL. https://github.com/python/cpython/blob/2.7/Python/modsupport.c#L292
Mon, 20 Jul 2020 17:38:01 +0200 tests: correctly match clang-format version >= 10
Manuel Jacob <me@manueljacob.de> [Mon, 20 Jul 2020 17:38:01 +0200] rev 45172
tests: correctly match clang-format version >= 10 The previous regex only matched the first digit, so "clang-format version 10.0.0" was recognized as version 1.
Tue, 14 Jul 2020 13:36:57 -0700 state: support validated declaration of nested unfinished ops
Daniel Ploch <dploch@google.com> [Tue, 14 Jul 2020 13:36:57 -0700] rev 45171
state: support validated declaration of nested unfinished ops This enables extensions to define commands that delgate to rebase, evolve, etc. one or more times to also have their own unfinished states for the full sequence of operations without monkey-patching _unfinishedstates. Differential Revision: https://phab.mercurial-scm.org/D8714
Fri, 17 Jul 2020 20:24:42 +0200 absorb: improve message for the case when changeset became empty
Manuel Jacob <me@manueljacob.de> [Fri, 17 Jul 2020 20:24:42 +0200] rev 45170
absorb: improve message for the case when changeset became empty In changeset f55099982bc5, I introduced the message "became empty and became ...", which I was never very happy with. Raphaël Gomès suggested "became empty as ...". That sounds much nicer. Differential Revision: https://phab.mercurial-scm.org/D8765
Sat, 18 Jul 2020 22:57:28 +0200 relnotes: extend
Joerg Sonnenberger <joerg@bec.de> [Sat, 18 Jul 2020 22:57:28 +0200] rev 45169
relnotes: extend Differential Revision: https://phab.mercurial-scm.org/D8767
Tue, 14 Jul 2020 15:42:28 +0530 merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 14 Jul 2020 15:42:28 +0530] rev 45168
merge: document return values of manifestmerge() and calculateupdates() In future patches, I want to add one more return value which represents information which needs to stored and used at commit time. Differential Revision: https://phab.mercurial-scm.org/D8741
Thu, 09 Jul 2020 19:02:10 +0530 merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 09 Jul 2020 19:02:10 +0530] rev 45167
merge: refactor code to advise fsmonitor in separate function merge.update() is quite hard to understand, found this an easy win. The end goal is to have better organized merge and mergestate handling and then fix some related bugs. Differential Revision: https://phab.mercurial-scm.org/D8740
Thu, 09 Jul 2020 18:43:38 +0530 mergestate: document what mergestate._results is for
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 09 Jul 2020 18:43:38 +0530] rev 45166
mergestate: document what mergestate._results is for Understanding that dict is important for understanding how mergestate is performing operations on dirstate. Differential Revision: https://phab.mercurial-scm.org/D8739
Thu, 09 Jul 2020 18:38:09 +0530 mergestate: rename a helpless variable name to bit helpful one
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 09 Jul 2020 18:38:09 +0530] rev 45165
mergestate: rename a helpless variable name to bit helpful one The old variable name `r` makes it ~impossible to understand what does it mean. One can only understand that after going to callers and hoping that its documented there. I also documented return value of the function involved while I was there. Differential Revision: https://phab.mercurial-scm.org/D8738
Thu, 09 Jul 2020 18:20:54 +0530 mergestate: remove unnecessary recordactions() from mergestate class
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 09 Jul 2020 18:20:54 +0530] rev 45164
mergestate: remove unnecessary recordactions() from mergestate class This function is updating dirstate which sounds like not something which a method on mergestate class should do. Also this just calls another function. Lets directly call that function and remove this reducing mergestate responsibility a bit. There was single caller which is updated. Differential Revision: https://phab.mercurial-scm.org/D8737
Thu, 09 Jul 2020 17:05:41 +0530 mergestate: document mergestate records in an organized way
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 09 Jul 2020 17:05:41 +0530] rev 45163
mergestate: document mergestate records in an organized way This makes clear which mergestate record is used for what and group them based on how they are used right now. Differential Revision: https://phab.mercurial-scm.org/D8719
Thu, 09 Jul 2020 16:39:42 +0530 mergestate: remove unused unsupported related mergestate records
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 09 Jul 2020 16:39:42 +0530] rev 45162
mergestate: remove unused unsupported related mergestate records I tried to find users of this but was unable to find. Seems like RECORD_OVERRIDE is doing for what they were used before. Differential Revision: https://phab.mercurial-scm.org/D8718
Thu, 09 Jul 2020 16:38:24 +0530 mergestate: add comments about couple of record types and minor reorder
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 09 Jul 2020 16:38:24 +0530] rev 45161
mergestate: add comments about couple of record types and minor reorder I am trying to divide the records into certain groups and then have dedicated objects for them. Taking baby steps in that direction. Differential Revision: https://phab.mercurial-scm.org/D8717
Thu, 09 Jul 2020 15:50:02 +0530 mergestate: remove unrequired RECORD_RESOLVED_OTHER record
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 09 Jul 2020 15:50:02 +0530] rev 45160
mergestate: remove unrequired RECORD_RESOLVED_OTHER record This was introduced in last cycle however while working on refactoring mergestate, I realized it's unncessary. This will break users who did a merge using previous version, did this kind of storage and before commiting updated the mercurial version. Differential Revision: https://phab.mercurial-scm.org/D8716
Thu, 09 Jul 2020 14:44:58 +0530 mergestate: rename addpath() -> addpathonflict() to prevent confusion
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 09 Jul 2020 14:44:58 +0530] rev 45159
mergestate: rename addpath() -> addpathonflict() to prevent confusion addpath() seems to imply that we are adding a new path/entry to the mergestate. Differential Revision: https://phab.mercurial-scm.org/D8715
Sat, 18 Jul 2020 12:35:55 +0200 windows: don’t set `softspace` attribute in `winstdout`
Manuel Jacob <me@manueljacob.de> [Sat, 18 Jul 2020 12:35:55 +0200] rev 45158
windows: don’t set `softspace` attribute in `winstdout` Python 2 file objects have the `softspace` attribute (https://docs.python.org/2/library/stdtypes.html#file.softspace), which is used by the print statement to track its internal state. The documentation demands from file-like objects only that the attribute is writable and initialized to 0. Method `file.write()` sets it to 0, but this is not documented. Historically, sys.stdout was replaced by an instance of the `winstdout` class, so it needed to behave exactly the same (the softspace fix was introduced in 705278e70457). Nowadays we don’t replace sys.stdout and don’t use the print statement on `winstdout` instances, so we can safely drop it.
Fri, 17 Jul 2020 14:58:22 +0200 windows: handle file-like objects without isatty() method
Manuel Jacob <me@manueljacob.de> [Fri, 17 Jul 2020 14:58:22 +0200] rev 45157
windows: handle file-like objects without isatty() method Copying the function is not nice, but moving around stuff to avoid the circular import didn’t seem to be worth the effort.
Fri, 17 Jul 2020 08:21:31 +0200 exchange: check actually missing revs for obsolete / unstable revs (issue6372)
Manuel Jacob <me@manueljacob.de> [Fri, 17 Jul 2020 08:21:31 +0200] rev 45156
exchange: check actually missing revs for obsolete / unstable revs (issue6372) The previous code was using `outgoing.ancestorsof`, which was originally called `outgoing.missingheads` although not containing the missing heads. This confusion was probably the reason why the buggy code was written. The actually outgoing changesets are stored in `outgoing.missing`. By checking all outgoing changesets, we avoid the problem and can show the list of all obsolete or unstable changesets, which is more helpful for the user.
Fri, 17 Jul 2020 07:59:20 +0200 tests: test that push doesn’t complain about unstable changesets if no changes
Manuel Jacob <me@manueljacob.de> [Fri, 17 Jul 2020 07:59:20 +0200] rev 45155
tests: test that push doesn’t complain about unstable changesets if no changes When there’re no outgoing changes, push doesn’t complain about unstable changesets. There is currently a bug (see issue6372) that causes that there is an abort on push when the outgoing changes contain another changeset even if that is not obsolete or unstable. A test case and fix for that is sent in the next patch.
Fri, 17 Jul 2020 03:53:19 -0700 diff: move no-eol text constant to a common location
Rodrigo Damazio Bovendorp <rdamazio@google.com> [Fri, 17 Jul 2020 03:53:19 -0700] rev 45154
diff: move no-eol text constant to a common location Differential Revision: https://phab.mercurial-scm.org/D8763
Fri, 17 Jul 2020 02:31:42 -0700 revert: fix interactive reverting of end-of-file newline changes
Rodrigo Damazio Bovendorp <rdamazio@google.com> [Fri, 17 Jul 2020 02:31:42 -0700] rev 45153
revert: fix interactive reverting of end-of-file newline changes The chunk reversal used by `revert -i` in Curses mode was not taking this case into account. Differential Revision: https://phab.mercurial-scm.org/D8762
Thu, 16 Jul 2020 14:16:53 -0400 phabricator: clarify the multiple heads/roots error message for phabsend
Matt Harbison <matt_harbison@yahoo.com> [Thu, 16 Jul 2020 14:16:53 -0400] rev 45152
phabricator: clarify the multiple heads/roots error message for phabsend As pointed out in followup feedback for c1c922391314, it's confusing to say there are multiple items and then only list one. Differential Revision: https://phab.mercurial-scm.org/D8761
Tue, 14 Jul 2020 13:35:54 -0700 error: normalize "unresolved conflicts" error messages with a custom class
Daniel Ploch <dploch@google.com> [Tue, 14 Jul 2020 13:35:54 -0700] rev 45151
error: normalize "unresolved conflicts" error messages with a custom class Differential Revision: https://phab.mercurial-scm.org/D8713
Mon, 13 Jul 2020 16:42:44 -0700 error: unify the error message formats for 'rebase' and 'unshelve'
Daniel Ploch <dploch@google.com> [Mon, 13 Jul 2020 16:42:44 -0700] rev 45150
error: unify the error message formats for 'rebase' and 'unshelve' Differential Revision: https://phab.mercurial-scm.org/D8730
Wed, 01 Apr 2020 08:42:00 -0500 debugcommands: create new debugantivirusrunning command
Augie Fackler <augie@google.com> [Wed, 01 Apr 2020 08:42:00 -0500] rev 45149
debugcommands: create new debugantivirusrunning command This writes the EICAR test file to .hg/cache, in an attempt to trigger an AV scanner's scanning engine. This should let us (in theory) detect some cases when a user's slowness is a result of AV scanning. Differential Revision: https://phab.mercurial-scm.org/D8353
Fri, 17 Jul 2020 03:28:52 +0200 windows: always work around EINVAL in case of broken pipe for stdout / stderr
Manuel Jacob <me@manueljacob.de> [Fri, 17 Jul 2020 03:28:52 +0200] rev 45148
windows: always work around EINVAL in case of broken pipe for stdout / stderr In 29a905fe23ae, I missed the fact that the `winstdout` class works around two unrelated bugs (size limit when writing to consoles and EINVAL in case of broken pipe) and that the latter bug happens even when no console is involved. When writing a test for this, I realized that the same problem applies to stderr, so I applied the workaround for EINVAL to both stdout and stderr. The size limit is worked around in the same case as before (consoles on Windows on Python 2). For that, I changed the `winstdout` class.
Fri, 17 Jul 2020 00:37:33 +0200 tests: make pipes / PTYs non-inheritable in test-stdio.py
Manuel Jacob <me@manueljacob.de> [Fri, 17 Jul 2020 00:37:33 +0200] rev 45147
tests: make pipes / PTYs non-inheritable in test-stdio.py A following patch requires that to test closing the receiving end of the pipe / PTYs. Even for existing tests, it might be safer to make the lifetime of the pipes / PTYs as short as possible.
Thu, 16 Jul 2020 23:49:04 +0200 util: enhance `nullcontextmanager` to be able to return __enter__ result
Manuel Jacob <me@manueljacob.de> [Thu, 16 Jul 2020 23:49:04 +0200] rev 45146
util: enhance `nullcontextmanager` to be able to return __enter__ result This makes its functionality and signature equivalent to Python 3.7’s contextlib.nullcontext().
(0) -30000 -10000 -3000 -1000 -240 +240 +1000 +3000 tip