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().
Fri, 17 Jul 2020 03:12:29 +0200 windows: augment docstring of `winstdout` class
Manuel Jacob <me@manueljacob.de> [Fri, 17 Jul 2020 03:12:29 +0200] rev 45145
windows: augment docstring of `winstdout` class
Fri, 17 Jul 2020 09:20:48 +0200 discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de> [Fri, 17 Jul 2020 09:20:48 +0200] rev 45144
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof` The attribute `missingheads` was recently renamed to `ancestorsof`, as it, despite the old name, doesn’t contain the missing heads but the changesets that were requested (including ancestors) for the outgoing operation. Changing all the users enables to print a warning if the old name is used. There is a good chance that some of the users are buggy because of the old name. Changing them to use the new name makes it more obvious that they are buggy. All users need to be reviewed for bugs. When sending patches for fixing them, the change will be more obvious without having to explain again and again the discrepancy of the old attribute name and what it actually contained.
Wed, 15 Jul 2020 11:38:54 +0200 discovery: fix docstring of `outgoing` class
Manuel Jacob <me@manueljacob.de> [Wed, 15 Jul 2020 11:38:54 +0200] rev 45143
discovery: fix docstring of `outgoing` class Also, introduce a more correct name `ancestorsof` for what was named `missingheads` before. For now, we just forward `ancestorsof` to `missingheads` until all users are changed. There were some mistakes in the old docstring / name: * `missingheads` (new name: `ancestorsof`) contains the revs whose ancestors are included in the outgoing operation. It may contain non-head revs and revs which are already on the remote, so the name "missingheads" is wrong in two ways. * `missing` contains only ancestors of `missingheads`, so not *all nodes* present in local but not in remote. * `common` might not contain all common revs, e.g. not some that are not an ancestor of `missingheads`. It seems like the misleading name have fostered an actual bug (issue6372), where `outgoing.missingheads` was used assuming that it contains the heads of the missing changesets.
Wed, 15 Jul 2020 09:51:11 +0200 discovery: weaken claim about returned common heads if ancestorsof are given
Manuel Jacob <me@manueljacob.de> [Wed, 15 Jul 2020 09:51:11 +0200] rev 45142
discovery: weaken claim about returned common heads if ancestorsof are given As the test case shows, the claim is not true in general.
Thu, 16 Jul 2020 19:48:49 +0200 cext: remove unused variables
Joerg Sonnenberger <joerg@bec.de> [Thu, 16 Jul 2020 19:48:49 +0200] rev 45141
cext: remove unused variables Differential Revision: https://phab.mercurial-scm.org/D8760
Wed, 15 Jul 2020 14:18:18 -0400 phabupdate: allow resigning from revisions
Matt Harbison <matt_harbison@yahoo.com> [Wed, 15 Jul 2020 14:18:18 -0400] rev 45140
phabupdate: allow resigning from revisions Differential Revision: https://phab.mercurial-scm.org/D8756
Wed, 15 Jul 2020 14:14:58 -0400 phabupdate: allow revisions to be commandeered
Matt Harbison <matt_harbison@yahoo.com> [Wed, 15 Jul 2020 14:14:58 -0400] rev 45139
phabupdate: allow revisions to be commandeered Differential Revision: https://phab.mercurial-scm.org/D8755
Wed, 15 Jul 2020 14:13:16 -0400 phabupdate: allow revisions to be reopened
Matt Harbison <matt_harbison@yahoo.com> [Wed, 15 Jul 2020 14:13:16 -0400] rev 45138
phabupdate: allow revisions to be reopened Differential Revision: https://phab.mercurial-scm.org/D8754
Wed, 15 Jul 2020 14:06:12 -0400 phabupdate: allow revisions to be marked "closed"
Matt Harbison <matt_harbison@yahoo.com> [Wed, 15 Jul 2020 14:06:12 -0400] rev 45137
phabupdate: allow revisions to be marked "closed" (Yes, the transaction name and final state in the comment here do differ.) Differential Revision: https://phab.mercurial-scm.org/D8753
Wed, 15 Jul 2020 14:03:55 -0400 phabupdate: allows revisions to be marked "request-review"
Matt Harbison <matt_harbison@yahoo.com> [Wed, 15 Jul 2020 14:03:55 -0400] rev 45136
phabupdate: allows revisions to be marked "request-review" Differential Revision: https://phab.mercurial-scm.org/D8752
Wed, 15 Jul 2020 13:27:55 -0400 phabupdate: allow revisions to be marked with "plan changes"
Matt Harbison <matt_harbison@yahoo.com> [Wed, 15 Jul 2020 13:27:55 -0400] rev 45135
phabupdate: allow revisions to be marked with "plan changes" Differential Revision: https://phab.mercurial-scm.org/D8751
Thu, 16 Jul 2020 15:56:13 +0200 status: match category text in the option description
Joerg Sonnenberger <joerg@bec.de> [Thu, 16 Jul 2020 15:56:13 +0200] rev 45134
status: match category text in the option description The ! category in the main status help text is defined as "missing", so use the same text for the help text of --delete. Differential Revision: https://phab.mercurial-scm.org/D8759
Wed, 15 Jul 2020 13:19:09 -0700 purge: classify as a "working directory management" command in help
Martin von Zweigbergk <martinvonz@google.com> [Wed, 15 Jul 2020 13:19:09 -0700] rev 45133
purge: classify as a "working directory management" command in help It seems to me that `hg purge` is clearly a "working directory management" command and not a "repository management" command. The working copy is all that's affected, after all; the repo is not affected at all. Differential Revision: https://phab.mercurial-scm.org/D8757
Wed, 15 Jul 2020 22:24:02 -0700 extensions: make `hg help extensions` list disabled extensions with PyOxidizer
Martin von Zweigbergk <martinvonz@google.com> [Wed, 15 Jul 2020 22:24:02 -0700] rev 45132
extensions: make `hg help extensions` list disabled extensions with PyOxidizer `setup.py` has a mechanism for generating a list of bundled extensions and their documenation and putting it in a `hgext/__index__.py` file. That file is then read from `extensions.py`, which makes `hg help extensions` work in py2exe binaries. This patch makes it so `setup.py` produces the `hgext/__index__.py` file also when called by PyOxidizer. Thanks to Matt Harbison for pointing out the existence of `__index__.py`! Differential Revision: https://phab.mercurial-scm.org/D8758
Wed, 08 Jul 2020 00:36:36 +0200 phases: sparsify phaseroots and phasesets
Joerg Sonnenberger <joerg@bec.de> [Wed, 08 Jul 2020 00:36:36 +0200] rev 45131
phases: sparsify phaseroots and phasesets As final step of dealing with the holes in the phase numbers, make phaseroots and phasesets both dictionaries indexed by the phase number. Further adjust the interface of the C module by pushing the node to revision mapping down as it is cheaper on the C side to deal with revision numbers. Overall, the patch series improves a no-change "hg up" for my NetBSD test repository from 4.7s to 1.3s. Differential Revision: https://phab.mercurial-scm.org/D8698
Tue, 07 Jul 2020 14:01:12 +0530 extdiff: add some comments in diffrevs()
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 07 Jul 2020 14:01:12 +0530] rev 45130
extdiff: add some comments in diffrevs() It was not obvious to understand the code so I added some comments. Differential Revision: https://phab.mercurial-scm.org/D8690
Tue, 07 Jul 2020 13:26:57 +0530 extdiff: add comments and minor variable renames diffpatch()
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 07 Jul 2020 13:26:57 +0530] rev 45129
extdiff: add comments and minor variable renames diffpatch() Some variable names were now confusing as we refactored the code in a separate function. For example, `node1a` leads to ideas why `1a` and not `1`. The variable storing path to patch file was named as `dirX` instead of `fileX`. Renamed these variables and added couple of comments. Differential Revision: https://phab.mercurial-scm.org/D8689
Tue, 07 Jul 2020 13:24:13 +0530 extdiff: remove unrequired do3way argument to diffpatch()
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 07 Jul 2020 13:24:13 +0530] rev 45128
extdiff: remove unrequired do3way argument to diffpatch() When we are diffing patches, there is no 3 way diff. Differential Revision: https://phab.mercurial-scm.org/D8688
Tue, 07 Jul 2020 13:13:18 +0530 extdiff: refactor logic to diff revs of versions of files
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 07 Jul 2020 13:13:18 +0530] rev 45127
extdiff: refactor logic to diff revs of versions of files Now that code for both cases, diffing patches or files is in separate function, it will be better to refactor them more and understand. Differential Revision: https://phab.mercurial-scm.org/D8687
Tue, 07 Jul 2020 12:42:39 +0530 extdiff: refactor logic which does diff of patches
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 07 Jul 2020 12:42:39 +0530] rev 45126
extdiff: refactor logic which does diff of patches The current extdiff code is hard to understand on first look. Took me few hours to grasp the code. Before adding more things, decided to do some refactoring. Differential Revision: https://phab.mercurial-scm.org/D8686
Mon, 01 Jun 2020 09:55:31 +0200 absorb: make it explicit if empty changeset was created
Manuel Jacob <me@manueljacob.de> [Mon, 01 Jun 2020 09:55:31 +0200] rev 45125
absorb: make it explicit if empty changeset was created If the config rewrite.empty-successor=skip is set, a message "became empty and was dropped" is shown if the changeset became empty. If the config rewrite.empty-successor=keep is set, absorb may create changesets even if they became empty. It’s probably a good idea to make that explicit. Therefore the message is changed to be a combination of both: "became empty and became ...". Repeating the word "became" is not very elegant. This results from the fact that "became" was and is overloaded to indicate both the change from non-empty to empty and the successor relation. In the combinated message, both meanings are used in one sentence.
Mon, 01 Jun 2020 09:42:41 +0200 absorb: consider rewrite.empty-successor configuration
Manuel Jacob <me@manueljacob.de> [Mon, 01 Jun 2020 09:42:41 +0200] rev 45124
absorb: consider rewrite.empty-successor configuration This adds support for the recently added rewrite.empty-successor configuration.
Mon, 01 Jun 2020 08:38:42 +0200 rebase: consider rewrite.empty-successor configuration
Manuel Jacob <me@manueljacob.de> [Mon, 01 Jun 2020 08:38:42 +0200] rev 45123
rebase: consider rewrite.empty-successor configuration This adds support for the recently added rewrite.empty-successor configuration.
Sun, 12 Jul 2020 06:06:06 +0200 rewriteutil: add utility to check whether empty successors should be skipped
Manuel Jacob <me@manueljacob.de> [Sun, 12 Jul 2020 06:06:06 +0200] rev 45122
rewriteutil: add utility to check whether empty successors should be skipped
Sat, 11 Jul 2020 23:53:27 +0200 config: add option to control creation of empty successors during rewrite
Manuel Jacob <me@manueljacob.de> [Sat, 11 Jul 2020 23:53:27 +0200] rev 45121
config: add option to control creation of empty successors during rewrite The default for many history-rewriting commands (e.g. rebase and absorb) is that changesets which would become empty are not created in the target branch. This makes sense if the source branch consists of small fix-up changes. For more advanced workflows that make heavy use of history-editing to create curated patch series, dropping empty changesets is not as important or even undesirable. Some users want to keep the meta-history, e.g. to make finding comments in a code review tool easier or to avoid that divergent bookmarks are created. For that, obsmarkers from the (to-be) empty changeset to the changeset(s) that already made the changes should be added. If a to-be empty changeset is pruned without a successor, adding the obsmarkers is hard because the changeset has to be found within the hidden part of the history. If rebasing in TortoiseHg, it’s easy to miss the fact that the to-be empty changeset was pruned. An empty changeset will function as a reminder that obsmarkers should be added. Martin von Zweigbergk mentioned another advantage. Stripping the successor will de-obsolete the predecessor. If no (empty) successor is created, this won’t be possible. In the future, we may want to consider other behaviors, like e.g. creating the empty successor, but pruning it right away. Therefore this configuration accepts 'skip' and 'keep' instead of being a boolean configuration.
Sat, 31 Aug 2019 14:33:26 +0200 commands: use any() instead of `if a or b or c`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 31 Aug 2019 14:33:26 +0200] rev 45120
commands: use any() instead of `if a or b or c` Small cleanup for future when we have an option to show configs from shared rc. Differential Revision: https://phab.mercurial-scm.org/D8658
Mon, 06 Jul 2020 14:49:19 +0200 manifest: use the same logic for handling flags in _parse as elsewhere
Joerg Sonnenberger <joerg@bec.de> [Mon, 06 Jul 2020 14:49:19 +0200] rev 45119
manifest: use the same logic for handling flags in _parse as elsewhere Differential Revision: https://phab.mercurial-scm.org/D8684
Mon, 06 Jul 2020 03:43:32 +0200 manifest: tigher manifest parsing and flag use
Joerg Sonnenberger <joerg@bec.de> [Mon, 06 Jul 2020 03:43:32 +0200] rev 45118
manifest: tigher manifest parsing and flag use In the manifest line, flags are put directly after the hash, so the parser has been guessing the presence of flags based on the length of the hash. Replace this assumption by an enumeration of the valid flags and removing them from the hash first as they are distinct input values. Consistently handle the expected 256bit length of the SHA1-replacement in the pure Python parser. Check that setting flags will use one of the blessed values. Extend write logic in the C version to handle 256bit hashes as well. Verify that hashes always have exactly the expected length. Since 1070df141718 we should no longer depend on the old extra-byte hack. Differential Revision: https://phab.mercurial-scm.org/D8679
Wed, 08 Jul 2020 00:15:15 +0200 phases: sparsify phase lists
Joerg Sonnenberger <joerg@bec.de> [Wed, 08 Jul 2020 00:15:15 +0200] rev 45117
phases: sparsify phase lists When the internal and archived phase was added, allphase became a large, sparsely populated list. This dramatically increased the number of lookup operations for public relations in `phasecache.phase`. As a first step, define allphases and related lists explicitly to contain only the actual phases. Make phasenames a dictionary and create corresponding dictionaries for mapping phase names back to numbers. Adjust various list to be sparse as well with the exception of phaseroots and phasesets members of phasecache. Keep those as a separate step as it involves changes to the C module. Differential Revision: https://phab.mercurial-scm.org/D8697
Tue, 07 Jul 2020 22:00:02 +0200 phases: updatephases should not skip internal phase
Joerg Sonnenberger <joerg@bec.de> [Tue, 07 Jul 2020 22:00:02 +0200] rev 45116
phases: updatephases should not skip internal phase Historically, updatephases used to skip the secret phase, but wasn't updated when archived and internal were added. Differential Revision: https://phab.mercurial-scm.org/D8696
Sun, 28 Jun 2020 01:08:13 +0200 repoview: use the phasecache directly to determine mutable revisions
Joerg Sonnenberger <joerg@bec.de> [Sun, 28 Jun 2020 01:08:13 +0200] rev 45115
repoview: use the phasecache directly to determine mutable revisions This speeds up no-change updates from 1.3s to 0.85s for my NetBSD test repository. Differential Revision: https://phab.mercurial-scm.org/D8670
Tue, 07 Jul 2020 21:45:10 +0200 phases: provide a test and accessor for non-public phase roots
Joerg Sonnenberger <joerg@bec.de> [Tue, 07 Jul 2020 21:45:10 +0200] rev 45114
phases: provide a test and accessor for non-public phase roots This decouples users from the implementation details of the phasecache. Also document a historic artifact about the stored phaseroots. Differential Revision: https://phab.mercurial-scm.org/D8694
Wed, 24 Jun 2020 17:53:44 +0200 hg-core: define a `dirstate_status` `Operation`
Raphaël Gomès <rgomes@octobus.net> [Wed, 24 Jun 2020 17:53:44 +0200] rev 45113
hg-core: define a `dirstate_status` `Operation` This is 3/3 in a series of patches to improve dirstate status' code. Following in the footsteps of a46e36b82461, we move the main status functionality to an `Operation`. This will most likely be subject to change in the future (what function signature, what parameters, etc., but we will see when `rhg` gets `hg status` support. Differential Revision: https://phab.mercurial-scm.org/D8663
Wed, 24 Jun 2020 17:20:39 +0200 rust-status: improve documentation and readability
Raphaël Gomès <rgomes@octobus.net> [Wed, 24 Jun 2020 17:20:39 +0200] rev 45112
rust-status: improve documentation and readability This patch is 2/3 in the series to improve the dirstate status code. It adds a number of common type aliases to add more obvious semantics to function signatures, improves/adds documentation where necessary and improves one or two patterns to be more idiomatic. Differential Revision: https://phab.mercurial-scm.org/D8662
Wed, 24 Jun 2020 16:12:45 +0200 rust-status: refactor status into a struct
Raphaël Gomès <rgomes@octobus.net> [Wed, 24 Jun 2020 16:12:45 +0200] rev 45111
rust-status: refactor status into a struct The code for `dirstate/status` has grown too large for comfort, this is the first of three patches that try to improve maintainability. In this patch, refactoring dirstate's status into a struct allows for slimming down function signatures drastically, keeping the mental (and maintenance) burden lower, since pretty much all of them shared a few common arguments. This had the pleasant side-effect of simplifying lifetimes a little. This has no observable impact on performance. The next patch will add/improve documentation and refactor some types. I tried to keep new code down to a minimum in this patch because it's already pretty big. Differential Revision: https://phab.mercurial-scm.org/D8661
Fri, 13 Dec 2019 22:20:03 -0800 tests: avoid "magic" nodeids in test-rebase-legacy.t
Martin von Zweigbergk <martinvonz@google.com> [Fri, 13 Dec 2019 22:20:03 -0800] rev 45110
tests: avoid "magic" nodeids in test-rebase-legacy.t This helps with readability. Differential Revision: https://phab.mercurial-scm.org/D8735
Fri, 13 Dec 2019 22:08:18 -0800 tests: avoid a "magic" nodeid in test-wireproto-command-lookup.t
Martin von Zweigbergk <martinvonz@google.com> [Fri, 13 Dec 2019 22:08:18 -0800] rev 45109
tests: avoid a "magic" nodeid in test-wireproto-command-lookup.t This helps with readability. Differential Revision: https://phab.mercurial-scm.org/D8734
Mon, 22 Jun 2020 13:51:48 +0530 run-tests: replace '#' with '-' in temp path of repos created for tests
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 22 Jun 2020 13:51:48 +0530] rev 45108
run-tests: replace '#' with '-' in temp path of repos created for tests If we have multiple cases in a test, that leads us to a temp path of format "<temp-path>-<case1>#<case2>". This leads to hg.parseurl() parsing the path and take part after `#` as a branch name. I encountered this bug while adding support for share-safe case in next patch. Differential Revision: https://phab.mercurial-scm.org/D8647
Tue, 14 Apr 2020 17:06:11 +0530 debugcommands: introduce new debugrequirements command
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 14 Apr 2020 17:06:11 +0530] rev 45107
debugcommands: introduce new debugrequirements command This for now just prints out the list of current requirements. In future this will be helpful in reading requirements from couple of sources, and checking which requirement comes from where. Differential Revision: https://phab.mercurial-scm.org/D8632
Tue, 14 Apr 2020 16:43:54 +0530 scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 14 Apr 2020 16:43:54 +0530] rev 45106
scmutil: add writereporequirements() and route requires writing through it In upcoming patches, to implement Share Safe plan we will be introducing requires file in store. We need to route all callers to a single function to check for a share-safe requirement and if present, write requirements to .hg/store/requires instead. After this patch, callers directly calling scmutil.writerequires() are only those where we don't have the repo object, for example when initializing the repository object itself. Differential Revision: https://phab.mercurial-scm.org/D8631
Tue, 14 Jul 2020 11:28:06 -0700 extensions: make `hg nonexistent` not crash with PyOxidizer
Martin von Zweigbergk <martinvonz@google.com> [Tue, 14 Jul 2020 11:28:06 -0700] rev 45105
extensions: make `hg nonexistent` not crash with PyOxidizer When running `hg nonexistent`, we try to look for extensions that provide that command. We do that by looking for files in the `hgext.__file__` directory. However, PyOxidizer doesn't provide a `__file__`, so we crash when running with PyOxidizer. We should be able to look for the command in built-in extensions, but we seem to already have code for skipping the scan when running in a frozen binary, so I just modified that code instead. By the way, it also seems like we should be able to search for extensions in the `hgext3rd` module, but we don't do that yet either (before or after this patch). Differential Revision: https://phab.mercurial-scm.org/D8750
Thu, 09 Jul 2020 12:52:04 +0200 procutil: avoid use of deprecated tempfile.mktemp()
Manuel Jacob <me@manueljacob.de> [Thu, 09 Jul 2020 12:52:04 +0200] rev 45104
procutil: avoid use of deprecated tempfile.mktemp() In the previous version, I used tempfile.mktemp() because it seemed to be the only way to open a file from two processes (the Python documentation says the file backing NamedTemporaryFile can’t be opened a second time on Windows). However, it’s possible when passing the O_TEMPORARY flag to the second open. Source: https://stackoverflow.com/a/15235559/6366251
Wed, 15 Jul 2020 15:09:21 +0200 procutil: make _make_write_all() function private
Manuel Jacob <me@manueljacob.de> [Wed, 15 Jul 2020 15:09:21 +0200] rev 45103
procutil: make _make_write_all() function private Because this function isn’t meant for general use (e.g., it’s Python 2-only), make in a module-private function by prefixing it with `_`.
Mon, 13 Jul 2020 21:14:20 +0900 dispatch: handle late KeyboardInterrupt occurred in run()
Yuya Nishihara <yuya@tcha.org> [Mon, 13 Jul 2020 21:14:20 +0900] rev 45102
dispatch: handle late KeyboardInterrupt occurred in run() User can press Ctrl+C while flushing streams in dispatch.run(). In such case, I think exiting with 255 is better than printing Python traceback and exiting with 1.
Mon, 13 Jul 2020 21:06:34 +0900 dispatch: indent run() function
Yuya Nishihara <yuya@tcha.org> [Mon, 13 Jul 2020 21:06:34 +0900] rev 45101
dispatch: indent run() function I'll add KeyboardInterrupt handling there.
Thu, 09 Jul 2020 19:16:52 +0900 debuginstall: don't translate encoding messages
Yuya Nishihara <yuya@tcha.org> [Thu, 09 Jul 2020 19:16:52 +0900] rev 45100
debuginstall: don't translate encoding messages While Microsoft trained us to read mojibake text, it doesn't make sense to print mojibake messages when debugging the exact issue.
Wed, 15 Jul 2020 10:34:59 -0400 merge with stable
Augie Fackler <augie@google.com> [Wed, 15 Jul 2020 10:34:59 -0400] rev 45099
merge with stable
Mon, 06 Jul 2020 15:31:53 +0530 patch: refactor content diffing part in separate fn so extensions can wrap
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 06 Jul 2020 15:31:53 +0530] rev 45098
patch: refactor content diffing part in separate fn so extensions can wrap Right now extdiff uses it's own logic using archival to diff two versions of file using external diff tools. This makes the extdiff functionality non-extensible. This series is an attempt to refactor core patch and diff functionality so that extdiff can wrap and reuse it. This will help us in using external diffing tools at more places and not just extdiff command only then. Differential Revision: https://phab.mercurial-scm.org/D8685
Thu, 09 Jul 2020 12:52:04 +0200 tests: check that procutil.std{out,err}.write() returns correct result
Manuel Jacob <me@manueljacob.de> [Thu, 09 Jul 2020 12:52:04 +0200] rev 45097
tests: check that procutil.std{out,err}.write() returns correct result On Windows, we currently don’t fully test the case when the stream is connected to a TTY, but we test the child process side by connecting them to NUL, which is recognized as a TTY by Python. To make the large write test a bit more useful besides checking that it doesn’t crash, we can check that the write() method returns the correct result.
Thu, 09 Jul 2020 12:52:42 +0200 tests: add tests for when stdout or stderr is connected to `os.devnull`
Manuel Jacob <me@manueljacob.de> [Thu, 09 Jul 2020 12:52:42 +0200] rev 45096
tests: add tests for when stdout or stderr is connected to `os.devnull` The original motivation was that creating PTYs on Windows is not possible, but `NUL` is recognized as a TTY, so we can have at least some test coverage for the TTY case. I think it doesn’t hurt to run the test cases on all systems.
Fri, 10 Jul 2020 12:27:58 +0200 procutil: ensure that procutil.std{out,err}.write() writes all bytes
Manuel Jacob <me@manueljacob.de> [Fri, 10 Jul 2020 12:27:58 +0200] rev 45095
procutil: ensure that procutil.std{out,err}.write() writes all bytes Python 3 offers different kind of streams and it’s not guaranteed for all of them that calling write() writes all bytes. When Python is started in unbuffered mode, sys.std{out,err}.buffer are instances of io.FileIO, whose write() can write less bytes for platform-specific reasons (e.g. Linux has a 0x7ffff000 bytes maximum and could write less if interrupted by a signal; when writing to Windows consoles, it’s limited to 32767 bytes to avoid the "not enough space" error). This can lead to silent loss of data, both when using sys.std{out,err}.buffer (which may in fact not be a buffered stream) and when using the text streams sys.std{out,err} (I’ve created a CPython bug report for that: https://bugs.python.org/issue41221). Python may fix the problem at some point. For now, we implement our own wrapper for procutil.std{out,err} that calls the raw stream’s write() method until all bytes have been written. We don’t use sys.std{out,err} for larger writes, so I think it’s not worth the effort to patch them.
Sat, 11 Jul 2020 07:47:04 +0200 procutil: move assignments
Manuel Jacob <me@manueljacob.de> [Sat, 11 Jul 2020 07:47:04 +0200] rev 45094
procutil: move assignments This should probably be part of the previous patch, but folding it results in a less useful word diff, so I decided to keep it separate for review.
Fri, 10 Jul 2020 10:12:04 +0200 procutil: distribute code for stdout
Manuel Jacob <me@manueljacob.de> [Fri, 10 Jul 2020 10:12:04 +0200] rev 45093
procutil: distribute code for stdout It makes sense to have the distinction between Python 2 and 3 at the top level, as we have to fight a different kind of battle on each: On Python 3, we get consistent behavior on all platforms, but need to create correctly-behaving binary streams. On Python 2, we have to account for platform differences.
Tue, 14 Jul 2020 10:25:41 +0200 convert: use bytes for value in extra dict stable
Manuel Jacob <me@manueljacob.de> [Tue, 14 Jul 2020 10:25:41 +0200] rev 45092
convert: use bytes for value in extra dict The keys and values of the extra dict are expected to be bytes. Before this fix, there was a crash in mercurial.changelog.encodeextra().
(0) -30000 -10000 -3000 -1000 -300 -100 -60 +60 +100 +300 +1000 +3000 tip