Gregory Szorc <gregory.szorc@gmail.com> [Wed, 02 Mar 2022 17:51:27 -0800] rev 48960
pycompat: remove first not ispy3 block
We now require Python 3. So we can remove the first block supporting
Python 2.
Differential Revision: https://phab.mercurial-scm.org/D12247
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:43:44 -0700] rev 48959
import-checker: assume absolute and use modern import checker
Since we require Python 3 now, we can assume we always use absolute
imports and the modern import checker should be used.
Differential Revision: https://phab.mercurial-scm.org/D12246
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:29:47 -0700] rev 48958
tests: unconditionalize some imports
Now that we require Python 3 we can simplify these imports.
Differential Revision: https://phab.mercurial-scm.org/D12245
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:27:38 -0700] rev 48957
tests: remove last references to PYTHON3
This removes the last references to PYTHON3.
Differential Revision: https://phab.mercurial-scm.org/D12244
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:27:08 -0700] rev 48956
tests: simplify Windows and PYTHON3 conditionals
PYTHON3 is always True. So this flow can be reduced.
Differential Revision: https://phab.mercurial-scm.org/D12243
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:26:15 -0700] rev 48955
tests: delete some not PYTHON3 blocks
These can never be used anymore.
Differential Revision: https://phab.mercurial-scm.org/D12242
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:24:25 -0700] rev 48954
tests: unconditionalize _bytes2sys()
As part of requiring Python 3.
Differential Revision: https://phab.mercurial-scm.org/D12241
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:23:21 -0700] rev 48953
tests: remove Python 3 conditionalizing from variables
Differential Revision: https://phab.mercurial-scm.org/D12240
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:22:12 -0700] rev 48952
tests: always encode session
Differential Revision: https://phab.mercurial-scm.org/D12239
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:21:30 -0700] rev 48951
tests: unconditionalize bchr
We could probably just do bytes([x]) everywhere. But this eliminates
use of PYTHON3.
Differential Revision: https://phab.mercurial-scm.org/D12238
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:20:33 -0700] rev 48950
tests: unconditionalize _unified_diff
Now that we're Python 3 only we can make this logic simpler.
Differential Revision: https://phab.mercurial-scm.org/D12237
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:19:21 -0700] rev 48949
tests: collapse elif PYTHON3 block
PYTHON3 is always True now so this logic should be identical as to before.
Differential Revision: https://phab.mercurial-scm.org/D12236
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 13:16:44 -0700] rev 48948
tests: collapse some more trivial if PYTHON3 blocks
This doesn't account for all of the references to PYTHON3. But it
accounts for the ones that are more trivial and don't entail logical
changes.
Differential Revision: https://phab.mercurial-scm.org/D12235
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 11:57:59 -0700] rev 48947
tests: require Python 3.5+ in run-tests.py
We change the version check logic to hard fail if running on
<= 3.5.0. The branch for <3.5 has been deleted. And the >=3.5
branch block has been dedented.
Differential Revision: https://phab.mercurial-scm.org/D12234
pacien <pacien.trangirard@pacien.net> [Mon, 21 Feb 2022 16:18:39 +0100] rev 48946
revlog: use rust rank computation if available
Differential Revision: https://phab.mercurial-scm.org/D12212
pacien <pacien.trangirard@pacien.net> [Mon, 21 Feb 2022 16:18:06 +0100] rev 48945
rust: expose rank computation function to python
Differential Revision: https://phab.mercurial-scm.org/D12211
pacien <pacien.trangirard@pacien.net> [Mon, 21 Feb 2022 18:06:02 +0100] rev 48944
rust: implement vcsgraph::RankedGraph for Index
Differential Revision: https://phab.mercurial-scm.org/D12210
pacien <pacien.trangirard@pacien.net> [Mon, 21 Feb 2022 18:05:54 +0100] rev 48943
revlog: implement fast_rank retrieval in C
This will be useful in particular to avoid going through the Python interpreter
in native Rust functions.
Differential Revision: https://phab.mercurial-scm.org/D12209
pacien <pacien.trangirard@pacien.net> [Mon, 21 Feb 2022 15:53:03 +0100] rev 48942
revlog: return 0 for the fast_rank of nullrev
By convention, the rank of the null revision is 0. This particular revision is
never "physically" stored in the changelog, so it is a special case.
For consistency, the value `None` is still being returned for revlogs which do
not store the fast_rank property for any revision.
Differential Revision: https://phab.mercurial-scm.org/D12208
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 02 Mar 2022 18:42:00 -0800] rev 48941
setup: drop support for Python 3.5
We talked about this on the mailing list [1] and there seemed to be
agreement that Python 3.5 is effectively dead and no longer worth
supporting.
So this commit changes our minimum version requirement to 3.6.2.
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2022-February/147885.html
Differential Revision: https://phab.mercurial-scm.org/D12315
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Feb 2022 22:14:41 -0700] rev 48940
packaging: remove requirements constraints to support Python 2
We just deleted support for Python 2 from the packaging code. We no longer
need these package constraints in the requirements file to support Python 2.
Differential Revision: https://phab.mercurial-scm.org/D12267
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Feb 2022 22:13:11 -0700] rev 48939
packaging: remove py2exe / Python 2.7 support
This commit started by deleting references to py2exe (which is only used
on Python 2). After pulling the thread, quite a lot of code was orphaned
and was deleted.
Differential Revision: https://phab.mercurial-scm.org/D12265
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Feb 2022 18:42:12 -0700] rev 48938
automation: delete code related to Python 2.7 support
The building of Inno and WiX installers took a python_version argument
that allowed us to specify "2" or "3" for the major Python version. Since
we no longer support Python 2, we can delete this argument and everything
feeding into it.
Differential Revision: https://phab.mercurial-scm.org/D12264
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Feb 2022 18:42:31 -0700] rev 48937
automation: drop support for Python 2.7 in Windows environment
We stop installing Python 2.7 in the Windows environment.
We remove support for building Python 2.7 wheels and installers.
There is still some Python 2.7 support cleanup to perform in automation.
But this removes the biggest remaining chunk of references to 2.7.
Differential Revision: https://phab.mercurial-scm.org/D12263
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Feb 2022 18:18:35 -0700] rev 48936
automation: drop support for Python 2.7 in Linux environment
We stop installing Python 2.7 via pyenv. We stop installing the system
Python 2 packages. We delete support for running tests on Python 2.7.
Differential Revision: https://phab.mercurial-scm.org/D12262
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Feb 2022 18:17:14 -0700] rev 48935
automation: make system3 the default for run-tests-linux
We'll soon drop support for Python 2.7. Let's use Python 3 by
default.
Differential Revision: https://phab.mercurial-scm.org/D12261
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Feb 2022 18:04:49 -0700] rev 48934
automation: run hg with python3
Python 2.7 support will go away soon. Let's use Python 3 as part of
the automation.
Differential Revision: https://phab.mercurial-scm.org/D12260
Simon Sapin <simon.sapin@octobus.net> [Thu, 03 Mar 2022 07:53:11 +0100] rev 48933
rust: enable Python 3 support unconditionally
Note: `cpython/python3-sys` is a default feature.
Differential Revision: https://phab.mercurial-scm.org/D12316
Yuya Nishihara <yuya@tcha.org> [Thu, 03 Mar 2022 09:45:21 +0900] rev 48932
cext: really remove Python 2 file handling code
Disclaimer: This is _WIN32 code and I have no machine to test.
Yuya Nishihara <yuya@tcha.org> [Thu, 03 Mar 2022 09:43:10 +0900] rev 48931
cext: backout e9ca736f5b52 "remove Python 2 file handling code"
It's if"n"def.
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:32:36 -0500] rev 48930
rust: jettison Python 2 support
Differential Revision: https://phab.mercurial-scm.org/D12283
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:30:37 -0500] rev 48929
setup: always decode xcode version
Not decoding was a Python 2 thing.
Differential Revision: https://phab.mercurial-scm.org/D12282
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:29:54 -0500] rev 48928
setup: remove Rust support for Python 2
Differential Revision: https://phab.mercurial-scm.org/D12281
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:25:11 -0500] rev 48927
cleanup: stop bundling concurrent.futures on Python 2
We no longer support Python 2.
Differential Revision: https://phab.mercurial-scm.org/D12280
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:24:49 -0500] rev 48926
cleanup: directly use concurrent.futures instead of via pycompat
Python 2 is gone.
Differential Revision: https://phab.mercurial-scm.org/D12279
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:23:53 -0500] rev 48925
imports: allow importing futures from concurrent
Differential Revision: https://phab.mercurial-scm.org/D12278
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:14:24 -0500] rev 48924
setup: remove pygit2 Python 2 logic
Differential Revision: https://phab.mercurial-scm.org/D12277
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:13:45 -0500] rev 48923
setup: inline now-constant list
This varied when we supported Python 2.
Differential Revision: https://phab.mercurial-scm.org/D12276
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:13:09 -0500] rev 48922
setup: unconditionally do this python 3 step
Differential Revision: https://phab.mercurial-scm.org/D12275
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:12:48 -0500] rev 48921
setup: remove Python 2 support code for determining dylib suffix
Differential Revision: https://phab.mercurial-scm.org/D12274
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:12:17 -0500] rev 48920
setup: inline os.fsdecode now that we're done with Python 2
Differential Revision: https://phab.mercurial-scm.org/D12273
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:11:37 -0500] rev 48919
setup: inline encoding constant that is only used once
This was variable back when we supported Python 2.
Differential Revision: https://phab.mercurial-scm.org/D12272
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:07:49 -0500] rev 48918
setup: remove printf trampoline
Differential Revision: https://phab.mercurial-scm.org/D12271
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:07:21 -0500] rev 48917
setup: remove more Python 2 support code
I'll inline print() etc in future patches.
Differential Revision: https://phab.mercurial-scm.org/D12270
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:06:37 -0500] rev 48916
setup: remove ssl check that only matters on 2.7
Differential Revision: https://phab.mercurial-scm.org/D12269
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:05:45 -0500] rev 48915
setup: remove block that tries to help Python 2.6 users
It's time to move on folks.
Differential Revision: https://phab.mercurial-scm.org/D12268
Augie Fackler <augie@google.com> [Wed, 02 Mar 2022 10:04:04 -0500] rev 48914
setup: drop statement of support for Python before 3.5.3
🎉🎉
Differential Revision: https://phab.mercurial-scm.org/D12266
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 16:11:21 -0700] rev 48913
cext: remove inline rewriting of argv
This only worked on Python 2. And since we dropped support for Python 2,
we can drop support for this functionality.
Differential Revision: https://phab.mercurial-scm.org/D12233
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 16:09:02 -0700] rev 48912
cext: remove PY23()
Since we always run on Python 3 now, we no longer need this
macro to support Python 2. We refactor all users to just use
the 2nd argument.
Differential Revision: https://phab.mercurial-scm.org/D12232
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 16:13:57 -0700] rev 48911
cext: unconditionalize PySlice_GetIndicesEx()
We only support Python 3 now.
Differential Revision: https://phab.mercurial-scm.org/D12231
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 16:13:23 -0700] rev 48910
cext: unconditionalize PYLONG_VALUE()
We only support Python 3 now.
Differential Revision: https://phab.mercurial-scm.org/D12230
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 15:50:46 -0700] rev 48909
cext: use PyLong symbols
We no longer support Python 2. So we can unconditionally use the Python 3
symbol names.
Differential Revision: https://phab.mercurial-scm.org/D12229
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 15:48:35 -0700] rev 48908
cext: use PyLong symbols
We no longer need to support Python 2. So use the Python 3 symbol
names directly.
Differential Revision: https://phab.mercurial-scm.org/D12228
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 15:47:13 -0700] rev 48907
cext: remove Python 2 support
We still alias the Python 2 symbols. This will be cleaned up in a
separate commit.
Differential Revision: https://phab.mercurial-scm.org/D12227
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 15:45:51 -0700] rev 48906
cext: remove Python 2 file handling code
Differential Revision: https://phab.mercurial-scm.org/D12226
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 15:45:16 -0700] rev 48905
cext: remove Python 2 variant of listdir_slot()
Differential Revision: https://phab.mercurial-scm.org/D12225
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 15:44:39 -0700] rev 48904
cext: remove some conditional preprocessor defines
We may want to inline these defines. But for now, getting rid of the
Python 2 support is a step forward.
Differential Revision: https://phab.mercurial-scm.org/D12224
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 15:43:30 -0700] rev 48903
cext: unconditionally use PyLong_FromLong()
We no longer support Python 2.
Differential Revision: https://phab.mercurial-scm.org/D12223
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 15:42:47 -0700] rev 48902
cext: drop preprocessor PyInt aliases
Now that we dropped support for Python 2 we can use the Python 3 native
functions.
Differential Revision: https://phab.mercurial-scm.org/D12222
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Feb 2022 15:40:39 -0700] rev 48901
cext: remove Python 2 module initializer functions
We no longer need these since we dropped support for Python 2.
Differential Revision: https://phab.mercurial-scm.org/D12221
Arseniy Alekseyev <aalekseyev@janestreet.com> [Mon, 21 Feb 2022 19:51:23 +0000] rev 48900
rhg: simplify the handling of share-safe config mismatch
Differential Revision: https://phab.mercurial-scm.org/D12213
Raphaël Gomès <rgomes@octobus.net> [Tue, 01 Mar 2022 16:44:59 +0100] rev 48899
branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net> [Mon, 21 Feb 2022 12:03:57 +0100] rev 48898
heptapod-ci: remove Python 2 support
(hurray!) 6.1 was the last release to support Python 2, let's lighten
the CI.
Differential Revision: https://phab.mercurial-scm.org/D12206
Raphaël Gomès <rgomes@octobus.net> [Thu, 16 Jun 2022 15:15:03 +0200] rev 48897
relnotes: add 6.1.3 and 6.1.4
Raphaël Gomès <rgomes@octobus.net> [Thu, 16 Jun 2022 15:09:59 +0200] rev 48896
Added signature for changeset 0cc5f74ff7f0
Raphaël Gomès <rgomes@octobus.net> [Thu, 16 Jun 2022 15:09:46 +0200] rev 48895
Added tag 6.1.4 for changeset 0cc5f74ff7f0
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Jun 2022 11:26:18 +0200] rev 48894
purge: prevent a silly crash with --confirm --files
if --files is passed, there was no directory to checks and `msg` was undefined.
This is now fixed and tested.
Raphaël Gomès <rgomes@octobus.net> [Wed, 08 Jun 2022 19:15:58 +0200] rev 48893
rust-status: don't trigger dirstate v1 rewrite when only v2 data is changed
The assumption that we need to rewrite (or append to) the dirstate if the
ignore pattern hash has changed or if any cached directory mtimes have changed
is only valid when using dirstate-v2. In dirstate-v1, neither of these things
are written to disk.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Jun 2022 04:04:08 +0200] rev 48892
commit: allow to close branch when committing change over a closed head
Otherwise, an explicit other commit become necessary, which seems both silly and
verbose.
This is useful when merging closed heads on the same branches, for example when
merging multiple repositories together.
Anton Shestakov <av6@dwimlabs.net> [Thu, 12 May 2022 13:53:50 +0400] rev 48891
logcmdutil: use the same data as {file*} template keywords (issue6642)
Since 0c72eddb4be5 template keywords that show files use a different source of
data than ctx.p1().status(ctx). These two functions in logcmdutil also show
file lists when needed (e.g. log with --debug flag), but previously they used
the old way of just looking at status compared to p1 and it resulted in
differences between e.g. hg log --debug and hg log -T '{file*}'.
test-phases.t needs an adjustment because 7 is a merge commit of two
topological branches and one of them introduces files C, D and E.
Anton Shestakov <av6@dwimlabs.net> [Thu, 12 May 2022 13:52:10 +0400] rev 48890
tests: show that hg log --debug output differs from {file*} template keywords
hg log --debug -T xml doesn't differ, but let's test it because we can.
Mathias De Mare <mathias.de_mare@nokia.com> [Wed, 08 Jun 2022 14:03:23 +0200] rev 48889
docker: avoid /tmp write access issues by fixing permissions
Manuel Jacob <me@manueljacob.de> [Sat, 04 Jun 2022 02:39:38 +0200] rev 48888
url: raise error if CONNECT request to proxy was unsuccessful
The deleted code didn’t work on Python 3. On Python 2 (or Python 3 after
adapting it), the function returned in the error case. The subsequent creation
of SSL socket fails during handshake with a nonsense error.
Instead, the user should get an error of what went wrong.
I don’t see how the deleted code would be useful in the error case. The new
code is also closer of what the standard library is doing nowadays that it has
proxy support (which we don’t use in the moment).
In the test, I use port 0 because all the HGPORTs were already taken. In
practice, there should not be any server listening on port 0.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 03 Jun 2022 17:18:46 +0200] rev 48887
revset: fix the doc of "nodefromfile"
This should maybe be called "nodesfromfile", but at least the documentation is
correct (it was previously a copy past from follow).
Manuel Jacob <me@manueljacob.de> [Thu, 02 Jun 2022 04:39:49 +0200] rev 48886
py3: don’t subscript socket.error
On Python 2, socket.error was subscriptable. On Python 3, socket.error is an
alias to OSError and is not subscriptable. The except block passes the
exception to self.send_error(). This fails on both Python 2 (if it was
executed) and Python 3, as it expects a string.
Getting the attribute .strerror works on Python 2 and Python 3, and has the
same effect as the previous code on Python 2.
Manuel Jacob <me@manueljacob.de> [Thu, 02 Jun 2022 02:05:11 +0200] rev 48885
demandimport: eagerly load msvcrt module on PyPy
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 03:08:15 +0200] rev 48884
ci: drop the phabricator refresh step
Now that phabricator is no longer in us, we should avoid this useless step to
save time and simplify things.
Manuel Jacob <me@manueljacob.de> [Sun, 22 May 2022 01:48:20 +0200] rev 48883
hghave: make black version regex work with newer versions of black
Black commit 117891878e5be4d6b771ae5de299e51b679cea27 (included in black >=
21.11b0) dropped the string "version " from the output of "black --version". To
make the regex work with newer black versions, make matching of "version "
optional.
Mads Kiilerich <mads@kiilerich.com> [Tue, 24 May 2022 14:29:44 +0200] rev 48882
rust: relax im-rc dependency to allow minor updates
This "15.0.*" requirement came from 0d99778af68a and is now replaced with plain
"15.0".
AFAICS, it really should allow (but not necessarily require) im-rc 15.1 .
Narrow requirement requirements with wildcard in the version is not used in
other places.
Raphaël Gomès <rgomes@octobus.net> [Thu, 02 Jun 2022 16:19:39 +0200] rev 48881
Added signature for changeset 6b10151b9621
Raphaël Gomès <rgomes@octobus.net> [Thu, 02 Jun 2022 16:19:31 +0200] rev 48880
Added tag 6.1.3 for changeset 6b10151b9621
Sandu Turcan <idlsoft@gmail.com> [Tue, 03 May 2022 21:44:30 -0400] rev 48879
narrow_widen_acl: enforce narrowacl in narrow_widen (SEC)
Reviewer note: this was sent by the author as a simple bugfix, but can be
considered a security patch, since it allows users to access things outside
of the ACL, hence the (SEC) prefix.
However, this affects the `narrow` extention which is still marked as
experimental and has relatively few users aside from large companies with
their own security layers on top from what we can gather.
We feel (Alphare: or at least, I feel) like pinging the packaging list is
enough in this case.
Raphaël Gomès <rgomes@octobus.net> [Mon, 30 May 2022 11:52:31 +0200] rev 48878
chg: ignore already closed fds when cleaning up
This should fix this error we see in the CI from time to time:
```
--- /tmp/mercurial-ci/tests/test-chg.t
+++ /tmp/mercurial-ci/tests/test-chg.t.err
@@ -187,6 +187,26 @@
$ chg bulkwrite --pager=on --color no --config ui.formatted=True
paged! 'going to write massive data\n'
killed! (?)
+ Traceback (most recent call last):
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/commandserver.py", line 509, in _serverequest
+ sv.cleanup()
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/chgserver.py", line 382, in cleanup
+ self._restoreio()
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/chgserver.py", line 461, in _restoreio
+ os.close(fd)
+ OSError: [Errno 9] Bad file descriptor
+ Traceback (most recent call last):
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/commandserver.py", line 693, in _acceptnewconnection
+ self._runworker(conn)
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/commandserver.py", line 744, in _runworker
+ prereposetups=[self._reposetup],
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/commandserver.py", line 509, in _serverequest
+ sv.cleanup()
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/chgserver.py", line 382, in cleanup
+ self._restoreio()
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/chgserver.py", line 461, in _restoreio
+ os.close(fd)
+ OSError: [Errno 9] Bad file descriptor
[255]
```
Manuel Jacob <me@manueljacob.de> [Sun, 29 May 2022 14:44:19 +0200] rev 48877
tests: work around non-thread-safeness of sysconfig.get_config_var()
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 24 May 2022 11:19:24 +0200] rev 48876
workflow: add a default template for Merge Request
Introduce a first basic template to try the feature.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 24 May 2022 10:34:42 +0200] rev 48875
run-tests: prevent race-condition when picking a channel
Before this, multiple jobs could search the list at the same time and pick the
same free channel.
We now project this search/assignment with a simple lock.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 24 May 2022 09:57:53 +0200] rev 48874
run-tests: send the test result after freeing the channel
Sending the message about the test being "done" signals to the main thread that
a new test can be started. Before this changeset, we sent this signal before
freeing the channel, there is room for a race condition where a new test would
search for a channel before the old test freed the one it used.
This is an example of the failure it would produce:
https://foss.heptapod.net/mercurial/mercurial-devel/-/jobs/552404
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 24 May 2022 09:36:40 +0200] rev 48873
run-tests: also send a message in the Keyboard interrupt case
The next patch will do something equivalent, so lets do the change in an
independant changeset first in case we need to bisect something in the future.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Sun, 22 May 2022 14:21:59 +0200] rev 48872
rhg: correctly handle the case where diffs are encoded relative to nullrev
returning a valid entry for nullrev fix chain that delta against nullrev.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Sun, 22 May 2022 23:26:06 +0200] rev 48871
test-revlog: test a repository that contains a diff against nullrev
We are witnessing a crash in the rust code, so we lets make sure this case is
tested.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 17 May 2022 14:36:57 -0400] rev 48870
worker: adapt _blockingreader to work around a python3.8.[0-1] bug (issue6444)
Python 3.8.0 is the latest I can load on Ubuntu 18.04, and I regularly hit the
TypeError because this function is missing. While it can be avoided by
disabling worker usage via config option, that's a bit obscure.
I'm limiting the function definition to the narrow range of affected pythons
because there were other bugs in this area that were worked around, that I don't
fully understand. See the bug report for discussions on why the narrow range,
and related commits working around other bugs.
Differential Revision: https://phab.mercurial-scm.org/D12627
Anton Shestakov <av6@dwimlabs.net> [Wed, 04 May 2022 13:53:12 +0400] rev 48869
doc: use an absolute path in sys.path
The idea and rationale is similar to https://phab.mercurial-scm.org/D12599
(landed as 1b6e381521c5).
Differential Revision: https://phab.mercurial-scm.org/D12622
Anton Shestakov <av6@dwimlabs.net> [Wed, 04 May 2022 13:48:40 +0400] rev 48868
check-py3-compat: use an absolute path in sys.path
The idea and rationale is similar to https://phab.mercurial-scm.org/D12599
(landed as 1b6e381521c5).
Differential Revision: https://phab.mercurial-scm.org/D12621
Arseniy Alekseyev <aalekseyev@janestreet.com> [Thu, 19 May 2022 12:23:38 +0100] rev 48867
rhg: align the dirstate v2 writing algorithm with python
Use the same algorithm of file append as python does, where we do a manual
seek instead of relying on O_APPEND. (see the reasons in the inline comment)
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 17 May 2022 14:59:25 +0100] rev 48866
test-dirstate: actually test the append code path in dirstate v2
Apparently it's not sufficient to modify a file to force the dirstate
write-out, so the append code path was untested.
By removing a file instead of changing we're forcing append to happen.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 17 May 2022 00:09:51 +0100] rev 48865
ci: do not trigger phabricator for merge-request
The fast the phabricator steps has a `rules` entry makes it selected for the
special `merge_requests` pipelines. The other ones behave as default and are not
selected tot the mrege_request pipelines.
This result in a second pipeline to be created, with only the phabricator
pipeline in it. Which usually succeed fast (since there is nothing to do).
This is harmful as this create a false sense of "the series is passing" and
Gitlab will use this simplistic pipeline for validation.
By explicitly preventing the pipeline to be created in the merge-request case,
we prevent this situation to happens
Note that the job will be dropped (alonside phabricator) in the next two weeks
anyway.
Kyle Lippincott <spectral@google.com> [Wed, 11 May 2022 17:56:29 -0700] rev 48864
amend: stop specifying matcher, get all copies in wctx
When we're recreating the commit that we'll be committing, we don't want to
filter our copy information based on just the *new* [versions of the] files
we're amending. The test has an example of this case, but for clarity, the
situation is:
```
$ hg cp src dst && hg commit
<do some work>
$ hg amend some_unrelated_file.txt
$ hg status --copies
A dst
A some_unrelated_file.txt
```
What *should* happen is that `dst` should remain marked as a copy of `src`, but
this did not previously happen. `matcher` here only includes the files that were
specified on the commandline, so it only gets the copy information (if any, in
this example there's not) for `some_unrelated_file.txt`. When it goes to apply
the memctx to actually create the commit, the file copy information is
incomplete and loses the information for the files that shouldn't have been
affected at all by the amend.
Differential Revision: https://phab.mercurial-scm.org/D12625
Kyle Lippincott <spectral@google.com> [Wed, 11 May 2022 17:56:10 -0700] rev 48863
amend: add test showing poor behavior when copies are involved
Differential Revision: https://phab.mercurial-scm.org/D12624
Arseniy Alekseyev <aalekseyev@janestreet.com> [Wed, 04 May 2022 17:40:23 +0100] rev 48862
censor: fix [hg update] away from a revision with censored files
Differential Revision: https://phab.mercurial-scm.org/D12604
Arseniy Alekseyev <aalekseyev@janestreet.com> [Fri, 22 Apr 2022 14:39:00 +0100] rev 48861
censor: demonstrate a bug
Differential Revision: https://phab.mercurial-scm.org/D12584
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 18:04:46 +0200] rev 48860
Added signature for changeset 0ddd5e1f5f67
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 18:04:06 +0200] rev 48859
Added tag 6.1.2 for changeset 0ddd5e1f5f67
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 18:00:01 +0200] rev 48858
ci: remove py2-rust support
Nobody cares about this very narrow usecase, and py2 support is over by
July 1st. This helps with the CI load, and removes some flakiness.
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 17:45:20 +0200] rev 48857
relnotes: add release notes for 6.1.2
Mads Kiilerich <mads@kiilerich.com> [Tue, 03 May 2022 12:41:21 +0200] rev 48856
docs: use proper rst markup for preformatted blocks
The multiple lines were re-flowed to a single line, both in man page and html.
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 15:49:20 +0200] rev 48855
test-dirstate: print something when the check is skipped
This makes a programming error obvious in cases when it should not be skipped
Differential Revision: https://phab.mercurial-scm.org/D12602
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 15:48:13 +0200] rev 48854
test-dirstate: fix detection of Rust environment variable
The Rust path never actually worked. This change also improves clarity of the
comment. The next change will ensure we print something when this check fails.
Differential Revision: https://phab.mercurial-scm.org/D12601
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Apr 2022 17:15:35 +0200] rev 48853
rust-dirstate-v2: fix the unused bytes counter when rewriting the dirstate
As per the previous patch, the counter was incorrectly carried over from the
old docket when it should be reset for a complete rewrite.
Differential Revision: https://phab.mercurial-scm.org/D12594
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Apr 2022 17:11:51 +0200] rev 48852
rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
This was picked up by @aalekseyev when doing unrelated debugging.
The Rust implementation was never resetting this counter, so a brand new file
would carry over the old counter.
As I write this, my counter is a supposed 7389089 unused bytes for a total of
170978 bytes in the data file. Feel free to post your own high score.
Differential Revision: https://phab.mercurial-scm.org/D12593
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Apr 2022 16:24:55 +0200] rev 48851
test-dirstate: use new `--docket` flag to get the data uuid
This is more robust.
Differential Revision: https://phab.mercurial-scm.org/D12592
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Apr 2022 15:22:08 +0200] rev 48850
debugcommands: remove `debugdirstateignorepatternhash`
This is replaced by the more complete `--docket` option to `debugstate`.
Differential Revision: https://phab.mercurial-scm.org/D12591
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Apr 2022 15:19:19 +0200] rev 48849
dirstate-v2: add flag to `debugstate` to print docket information
This is useful information that we don't easily have access to currently,
unless you speak fluent xxd.
This replaces `debugdirstateignorepatternshash`, which I'll remove in the next
changeset.
Differential Revision: https://phab.mercurial-scm.org/D12590
Matt Harbison <matt_harbison@yahoo.com> [Mon, 02 May 2022 22:04:59 -0400] rev 48848
doc: use an absolute path in sys.path to work around a python DLL loading bug
This bug[1] was causing the zstd entry under "Available Compression Engines" to
be omitted from the documentation for some versions of python3. I could
upgrade, but past upgrades have broken venvs and clobbered installed packages.
It's a trivial workaround, so there's no sense in leaving this subtle issue. It
was flushed out by changing the module policy here from 'allow' to 'c', and
seeing this error:
ImportError: DLL load failed while importing parsers: The parameter is incorrect.
[1] https://github.com/python/cpython/issues/87271
Differential Revision: https://phab.mercurial-scm.org/D12599
Raphaël Gomès <rgomes@octobus.net> [Mon, 25 Apr 2022 16:45:03 +0200] rev 48847
rhg: fix dirstate-v2 data file removal system
In D12581 I introduced logic to remove the previous dirstate-v2 data file
after a new one is created (and its corresponding docket), but the logic was
flawed. I fixed it and made it simpler to understand by gather all logic in
a single expression.
Differential Revision: https://phab.mercurial-scm.org/D12586
Raphaël Gomès <rgomes@octobus.net> [Tue, 19 Apr 2022 12:27:40 +0200] rev 48846
rhg: use `Command::exec` instead of `Command::status`
`rhg` is supposed to be a transparent executable, using a subprocess defeats
that purpose. See inline comments for more details.
This also introduces the `which` crate to check if the fallback executable
actually exists to help debugging (plain `execve` doesn't give much
information).
The error code 253 is used to signify that the fallback is not found, but may
mean in the future that it is otherwise invalid if we start being more
specific.
Differential Revision: https://phab.mercurial-scm.org/D12578
Martin von Zweigbergk <martinvonz@google.com> [Wed, 27 Apr 2022 15:47:57 +0200] rev 48845
commit: don't use hard-coded `.hg/last-message.txt` path in error message
Whoever wrote D8463 just used a hard-coded path to
`.hg/last-message.text` instead of using the relative path that was
already available in the `msgfn` variable (and used just a few lines
up in related message). Let's fix that.
Differential Revision: https://phab.mercurial-scm.org/D12585
Raphaël Gomès <rgomes@octobus.net> [Thu, 21 Apr 2022 15:10:57 +0200] rev 48844
rust-dirstate-v2: clean up previous data file after the docket is written
This was overlooked before and caused many data files to keep living forever.
We could potentially consider adding a random cleanup of them in case they
slipped through one day.
Differential Revision: https://phab.mercurial-scm.org/D12581
Raphaël Gomès <rgomes@octobus.net> [Thu, 21 Apr 2022 14:47:13 +0200] rev 48843
rust-dirstate-v2: save proper data size if no new data on append
This is currently only triggered with the tests ran with `--rhg` without
`--rust`, by "luck", there probably always was something to write, like an
mtime when also using Rust extensions alongside `rhg`.
Differential Revision: https://phab.mercurial-scm.org/D12580
Matt Harbison <matt_harbison@yahoo.com> [Wed, 13 Apr 2022 14:46:22 -0400] rev 48842
procutil: avoid `+= None` when writing to full std{err,out} descriptor on py3
The write function returns `None` if there was no room to write the given
data[1]. I don't like that this is effectively an infinite loop if there's
never any progress emptying the underlying buffer, but we're no worse off than
before, and it fixes random stacktrace popups seen in the py3 build of
TortoiseHg.
[1] https://docs.python.org/3/library/io.html#io.RawIOBase.write
Differential Revision: https://phab.mercurial-scm.org/D12555
Martin von Zweigbergk <martinvonz@google.com> [Mon, 18 Apr 2022 20:45:38 -0700] rev 48841
amend: don't remove unselected removals from memctx
When there are removed files in the working copy and they are not
selected to be amended into the parent, the `filectxfn` we create for
the `memctx` would still return `None` before this patch. That's
clearly incorrect; we should return the `filectx` from the unamended
commit. Somehow it seems to not matter much except for the case with
copies stored in changesets.
Thanks to Kyle Lippincott for doing all the debugging and identifying
the fix for this issue.
Differential Revision: https://phab.mercurial-scm.org/D12573
Martin von Zweigbergk <martinvonz@google.com> [Mon, 18 Apr 2022 20:39:31 -0700] rev 48840
tests: demonstrate crash on partial amend with copies in changesets
See the fix in the next patch for explanation.
Differential Revision: https://phab.mercurial-scm.org/D12572
Kyle Lippincott <spectral@google.com> [Wed, 13 Apr 2022 12:14:17 -0700] rev 48839
rebase: while rewriting desc hashes, ignore ambiguous prefix "hashes"
If a repo is sufficiently large, a six digit number "hash prefix" can somewhat
easily reference an ambiguous hash prefix.
Differential Revision: https://phab.mercurial-scm.org/D12552
Kyle Lippincott <spectral@google.com> [Wed, 13 Apr 2022 13:15:33 -0700] rev 48838
tests: add test demonstrating issue with ambiguous has prefixes during rebase
Differential Revision: https://phab.mercurial-scm.org/D12551
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 07 Apr 2022 15:53:48 +0200] rev 48837
help: set the large-file-limit to 10MB
This is a minor increase (5%) and makes the doc much clearer.
Differential Revision: https://phab.mercurial-scm.org/D12484
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 07 Apr 2022 15:46:07 +0200] rev 48836
help: clarify the unit of `ui.large-file-limit` config
Its might be a bit confusing, especially since `large-file.min-size` uses MB.
Differential Revision: https://phab.mercurial-scm.org/D12483
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Apr 2022 18:39:15 +0200] rev 48835
debuglock: ignore ENOENT error when unlocking
This is consistent with the main `lock.release` code.
Differential Revision: https://phab.mercurial-scm.org/D12481
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Apr 2022 18:50:20 +0200] rev 48834
run-tests: introduce "forward-slash" version of everything on windows
This should be useful for some shell invocation.
Differential Revision: https://phab.mercurial-scm.org/D12480
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Apr 2022 18:44:21 +0200] rev 48833
tests-racy-mutation: pass the editor through config instead of env variable
On Windows msys seems to do awful mangling of the environment variable content
that confuses everything to the death. Going through the config works fine, so
we do that instead.
Differential Revision: https://phab.mercurial-scm.org/D12479
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 17:19:29 +0200] rev 48832
Added signature for changeset 5bd6bcd31dd1
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 17:19:22 +0200] rev 48831
Added tag 6.1.1 for changeset 5bd6bcd31dd1
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 17:11:36 +0200] rev 48830
relnotes: add notes for 6.1.1
This also fixes the header for 6.1 from 6.1rc0
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 48829
rust-hgpath: add `repr(transparent)` to `HgPath`
It's been stabilized a long time ago, so let's not rely on an implementation
detail now.
Differential Revision: https://phab.mercurial-scm.org/D12433
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 48828
rust-dirstatemap: correctly decrement the copies counter
This was caught when writing unit tests for the `DirstateMap`. We were always
setting `had_copy_source` to `false` since we erased the value just before.
Differential Revision: https://phab.mercurial-scm.org/D12432
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 48827
rust-dirstatemap: properly decrement counter for tracked descendants
I found this bug when writing unit tests after the fact for the `DirstateMap`.
We never decremented the tracked descendants counter since we were always
resetting the node data before reading it. This also drops the use of `state`,
in favor of the new API to get that information.
Differential Revision: https://phab.mercurial-scm.org/D12431
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 48826
rust-dirstate: panic if the DirstateMap counters go below 0
When modifying the API I hit some... interesting errors (trying to allocate
178GB of RAM, for example) because I failed to keep the counters correctly
updated.
This counter underflow is likely to happen when code is changed around
and can have up to eat-your-dirstate level of consequences, which is not nice.
The very small runtime cost of checking these counters should really not be an
issue and will help us uncover bugs when/if they do appear in the future.
Differential Revision: https://phab.mercurial-scm.org/D12430
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 48825
rust: fix unsound `OwningDirstateMap`
As per the previous patch, `OwningDirstateMap` is unsound. Self-referential
structs are difficult to implement correctly in Rust since the compiler is
free to move structs around as much as it wants to. They are also very rarely
needed in practice, so the state-of-the-art on how they should be done within
the Rust rules is still a bit new.
The crate `ouroboros` is an attempt at providing a safe way (in the Rust sense)
of declaring self-referential structs. It is getting a lot attention and was
improved very quickly when soundness issues were found in the past: rather than
relying on our own (limited) review circle, we might as well use the de-facto
common crate to fix this problem. This will give us a much better chance of
finding issues should any new ones be discovered as well as the benefit of
fewer `unsafe` APIs of our own.
I was starting to think about how I would present a safe API to the old struct
but soon realized that the callback-based approach was already done in
`ouroboros`, along with a lot more care towards refusing incorrect structs.
In short: we don't return a mutable reference to the `DirstateMap` anymore, we
expect users of its API to pass a `FnOnce` that takes the map as an argument.
This allows our `OwningDirstateMap` to control the input and output lifetimes
of the code that modifies it to prevent such issues.
Changing to `ouroboros` meant changing every API with it, but it is relatively
low churn in the end. It correctly identified the example buggy modification of
`copy_map_insert` outlined in the previous patch as violating the borrow rules.
Differential Revision: https://phab.mercurial-scm.org/D12429
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:27 +0200] rev 48824
rust: explain why the current `OwningDirstateMap` is unsound
See inline comments.
Differential Revision: https://phab.mercurial-scm.org/D12428
Valentin Gatien-Baron <vgatien-baron@janestreet.com> [Fri, 01 Apr 2022 12:46:58 -0400] rev 48823
dispatch: fix silly blackbox entries when hg is interrupted
When hg is interrupted, it creates ui.log like this:
1970/01/01 00:00:00 user @0000000000000000000000000000000000000000 (62488)> killed!
exited 255 after 1.78 seconds
This is due to a scoping problem: two different uses of the name "msg"
collide. So rename one of them.
Differential Revision: https://phab.mercurial-scm.org/D12427
Sushil khanchi <sushilkhanchi97@gmail.com> [Fri, 23 Jul 2021 13:42:12 +0530] rev 48822
precheck: fix false warning about content-divergence creation
Before this patch, if we try to `hg prune` (without any successors) an
already obsoleted cset which has at least one successor, it would false
warn about new content-divergence. As we know, pruning cset without any
successors can not create any divergence.
Differential Revision: https://phab.mercurial-scm.org/D12002
Valentin Gatien-Baron <vgatien-baron@janestreet.com> [Thu, 24 Mar 2022 12:27:21 -0400] rev 48821
streamclone: avoid some obscure error in a corner case
I don't really know how, but I ran into this error:
$ hg clone --stream ssh://user@dummy/empty-repo local-empty-repo
streaming all changes
abort: unable to apply stream clone: unsupported format:
[255]
I think you need an empty list of requirements for this to happen,
which is weird, but an obscure error like this is not exactly helpful
either. Since this is the result of an encoding bug anyway, just fix
it.
Differential Revision: https://phab.mercurial-scm.org/D12402
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Mar 2022 18:15:49 +0900] rev 48820
tags: fix typo in fast path detection of fnode resolution (issue6673)
If I understand it, mctx.readfast() is unreliable here if p1/p2 .hgtags
nodes differ, and tags on that branch would be randomly discarded
depending on which parent were picked.
The test case added by this patch would fail only on zstd-compressed
repository. I didn't try hard to stabilize the failure case.
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 17:24:41 +0200] rev 48819
dirstate-cext: properly invalidate mtime and data in `set_untracked`
This was forgotten about in the initial implementation and was revealed while
adding the `dirstate-v2` variant of `test-issue660.t`. Neither the existing
Python implementation nor the upcoming Rust implementation suffer from this
bug since they respectively have `None` and `Option<T>` to represent the lack
of information.
Differential Revision: https://phab.mercurial-scm.org/D12414
Joerg Sonnenberger <joerg@bec.de> [Tue, 22 Mar 2022 03:19:01 +0100] rev 48818
pullbundle: fix file name in the help text
It is pullbundles.manifest and not pullbundle.manifest.
Differential Revision: https://phab.mercurial-scm.org/D12391
Martin von Zweigbergk <martinvonz@google.com> [Mon, 21 Mar 2022 14:21:10 -0700] rev 48817
unamend: abort if commit was not created by `hg [un]amend`
`hg unamend` can currently undo any kind of rewrite, as long as it has
an obsmarker. However, that has quite unexpected results if you run it
after e.g. `hg rebase` (expecting it to behave like a generic `hg
undo` command), because it updates to the predecessor and leaves the
old changes in the working copy. I think it's better to allow `hg
unamend` only after `hg amend` (and after `hg unamend` because that's
documented as being supported).
Differential Revision: https://phab.mercurial-scm.org/D12390
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Mar 2022 14:58:46 +0100] rev 48816
test: use `wait-on-file` in `test-racy-mutations.t`
The official utility scale its timeout with the run-tests.py one. So lets use
it.
Differential Revision: https://phab.mercurial-scm.org/D12382
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Mar 2022 21:15:54 -0700] rev 48815
amend: fix amend with copies in extras
If copy information is stored only in the commit extras and not in
filelogs, then they get lost on amend if the file wasn't also modified
in the working copy. That's because we create `filectx` object from
the old commit in those cases, and the `.copysource()` of such objects
read only from the filelog. This patch fixes it by always creating a
new `memfilectx` in these cases, passing the calculated copy
information to it.
Differential Revision: https://phab.mercurial-scm.org/D12387
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Mar 2022 21:37:22 -0700] rev 48814
tests: demonstrate that copy info in changeset gets lost on amend
When copy information is stored in changesets, it gets lost on
amend. We didn't notice that until now because our users at Google
have the config set to `compatibility`, which means copy information
is stored in both changeset and filelogs.
Differential Revision: https://phab.mercurial-scm.org/D12386
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 18 Mar 2022 18:09:46 +0100] rev 48813
ci: use the `v1.0` flavor of the docker images in the CI
This new versioning will help us to maintain backward compatibility in the
docker image. This will be useful to deal with mismatch between default/stable
in version and the re-run CI on older changesets in the future.
Once this changeset land on stable, we will have to merge it in default. Then
we can start make backward incompatible changes in a new image version.
Differential Revision: https://phab.mercurial-scm.org/D12388
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Mar 2022 16:15:44 +0100] rev 48812
rust-status: cap the number of concurrent threads to 16
During benchmarking it was determined that the use of more threads is very
advantageous... until we use more than 16. This is most likely due to some
resource contention (thrashing, etc.). Until we have time to figure out and
fix the underlying cause, let's just cap at 16 threads.
Differential Revision: https://phab.mercurial-scm.org/D12384
Julien Cristau <jcristau@debian.org> [Tue, 15 Mar 2022 14:45:47 +0100] rev 48811
test: update test-clone-stream.t to pass on bigendian
Fixes: a3cf460a6b1b ("stream-clone: also filter the requirement we put in the bundle 2")
Differential Revision: https://phab.mercurial-scm.org/D12377
Martin von Zweigbergk <martinvonz@google.com> [Tue, 15 Mar 2022 13:31:39 -0700] rev 48810
filemerge: when merge tool uses $output, don't leave markers in $local
As explained in the previous patch, we incorrectly leave conflict
markers in both `$local` and `$output` since D12190. I don't
understand why it broke but the fix is simple and clear after all the
recent refactoring.
Differential Revision: https://phab.mercurial-scm.org/D12379
Martin von Zweigbergk <martinvonz@google.com> [Tue, 15 Mar 2022 13:40:45 -0700] rev 48809
tests: demonstrate how conflict markers end up $local *and* $output
When a merge tool is configured to keep conflict markers, they are
supposed to be written to `$local` if `$output` is not mentioned in
the tool's `merge-tools.<tool>.args` config, and in `$output` if it is
mentioned. However, I broke the latter case in D12190.
Differential Revision: https://phab.mercurial-scm.org/D12378
Julien Cristau <jcristau@debian.org> [Mon, 14 Mar 2022 17:57:03 +0100] rev 48808
revlog: fix wrong type of rank_unknown variable
We treat "rank" as an int everywhere, but declare rank_unknown as a
char. On architectures where char is signed, that works out ok, but
when char is unsigned, rank_unknown is 255 instead of -1.
Differential Revision: https://phab.mercurial-scm.org/D12374
Luke Granger-Brown <hg@lukegb.com> [Mon, 14 Mar 2022 14:10:41 +0000] rev 48807
rust-hg-core: use correct type for libc hostname buffer
The type of libc::c_char is u8 on aarch64 rather than i8, which causes
the use of a specifically-typed constant to fail.
Differential Revision: https://phab.mercurial-scm.org/D12373
Raphaël Gomès <rgomes@octobus.net> [Tue, 01 Mar 2022 16:39:14 +0100] rev 48806
Added signature for changeset d4486810a179
Raphaël Gomès <rgomes@octobus.net> [Tue, 01 Mar 2022 16:39:06 +0100] rev 48805
Added tag 6.1 for changeset d4486810a179
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Feb 2022 18:34:23 +0100] rev 48804
merge: remove direct rustmod reference
We shouldn't rely on this member being present in `dirstate.py`, this creates
unnecessary coupling.
This also can trigger certain issues in edge-cases where the policy is changed
at runtime or multiple Python environments fight, which is an added bonus.
Differential Revision: https://phab.mercurial-scm.org/D12217
Raphaël Gomès <rgomes@octobus.net> [Mon, 21 Feb 2022 11:22:40 +0100] rev 48803
relnotes: add 6.1
Differential Revision: https://phab.mercurial-scm.org/D12205
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 13:14:32 +0100] rev 48802
relnotes: add 6.0.3
Differential Revision: https://phab.mercurial-scm.org/D12204
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 12:51:23 +0100] rev 48801
windows: adjust test output in test-merge-tools.t
Differential Revision: https://phab.mercurial-scm.org/D12216
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 12:51:06 +0100] rev 48800
windows: generalize output for test-status-tracked-key.t
Differential Revision: https://phab.mercurial-scm.org/D12215
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 22 Feb 2022 11:51:08 +0100] rev 48799
windows: skip a section of a test that is legitimately broken on windows
See the comment in the test itself.
Differential Revision: https://phab.mercurial-scm.org/D12214
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 14:32:26 +0100] rev 48798
Added signature for changeset c00d3ce4e94b
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 14:32:09 +0100] rev 48797
Added tag 6.1rc0 for changeset c00d3ce4e94b
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 14:27:43 +0100] rev 48796
branching: merge default into stable for 6.1 freeze
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 12:58:44 +0100] rev 48795
branching: merge 6.0.3 stable into default
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 11:37:08 +0100] rev 48794
branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Feb 2022 07:34:49 +0100] rev 48793
tracked-key: remove the dual write and rename to tracked-hint
The dual-write approach was mostly useless. As explained in the previous version
of the help, the key had to be read twice before we could cache a value.
However this "read twice" limitation actually also apply to any usage of the
key. If some operation wants to rely of the "same value == same tracked set"
property it would need to read the value before, and after running that
operation (or at least, after, in all cases). So it cannot be sure the operation
it did is "valid" until checking the key after the operation. As a resultat such
operation can only be read-only or rollbackable.
This reduce the utility of the "same value == same tracked set" a lot.
So it seems simpler to drop the double write and to update the documentation to
highlight that this file does not garantee race-free operation. As a result the
"key" is demoted to a "hint".
Documentation is updated accordingly.
Differential Revision: https://phab.mercurial-scm.org/D12201
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Feb 2022 06:41:54 +0100] rev 48792
tracked-file: rename the format option to use `use-`
This is more consistent with the other options.
Differential Revision: https://phab.mercurial-scm.org/D12200
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Feb 2022 06:35:42 +0100] rev 48791
tracked-key: update the requirement value
We renamed the config option but we forgot to change the actual value…
Differential Revision: https://phab.mercurial-scm.org/D12199
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Feb 2022 06:32:03 +0100] rev 48790
tracked-key: make it possible to upgrade to and downgrade from the feature
This seems rather important if we want people to start using it.
Differential Revision: https://phab.mercurial-scm.org/D12198
Anton Shestakov <av6@dwimlabs.net> [Mon, 31 Jan 2022 18:13:00 +0300] rev 48789
obsolete: don't use os.stat in repo.obsstore.__nonzero__ if it's static HTTP
If a repo is accessed via static HTTP, then we obviously can't use os.stat() to
just peek at the file size. Let's download the entire file to check its size.
Yes, this feels wasteful, but:
1. If we're cloning or pulling a repo from a static HTTP server, we need the
contents of the obsstore anyway.
2. Implementing statichttpvfs.stat() that uses HEAD will result in one more
request to a static-only HTTP server, which is already slow. Also parsing a
response to a HEAD request to construct os.stat_result is pretty hacky.
There's also a question of the remote server properly supporting HEAD method
and reporting at least file size.
3. Implementing statichttpvfs.stat() that uses GET is pretty much the same
thing as we do here, except we can't even cache the response easily, unlike
simply accessing obsstore._data, which is @propertycache'd.
Importing statichttprepo locally to avoid circular import.
See also: 4507bc001365 and commit message of f8f2ecdde4b5.
Differential Revision: https://phab.mercurial-scm.org/D12195
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:49:03 -0800] rev 48788
filemerge: make `_maketempfiles()` more reusable
`_maketempfiles()` is very specialized for its current use. I hope to
use it also when creating temporary files for input for tools that do
partial conflict resolution. That'll be possible if the function is
more generic. Instead of passing in two contexts (for "other" and
"base") and an optional path (for "local"), let's pass a single list
of files to make backups for. Even if we don't end up using for
partial conflict resolution, this is still a simplification (but I do
have a WIP patch for partial conflict resolution and it is able to
benefit from this).
Differential Revision: https://phab.mercurial-scm.org/D12193
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:16:29 -0800] rev 48787
filemerge: reduce some duplication in `_maketempfiles()`
The two callers of the local `maketempfrompath()` function used the
returned file object in the same way. We can reduce duplication by
moving that code into the function.
Differential Revision: https://phab.mercurial-scm.org/D12192
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:11:50 -0800] rev 48786
filemerge: use leverage `util.readfile()` in `_maketempfiles()`
Differential Revision: https://phab.mercurial-scm.org/D12191
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:04:50 -0800] rev 48785
filemerge: move removal of `.orig` extension on temp file close to context
The place where the `.orig` extension is removed in `_maketempfiles()`
doesn't make it clear that it's the backup path, which is why we have
a comment in the code explaining it. Let's instead move it out of the
function and close to where we get it from `backup.path()`, so that
becomes clear.
Differential Revision: https://phab.mercurial-scm.org/D12190
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 21:52:18 -0800] rev 48784
filemerge: remove `uselocalpath` argument from `_maketempfiles()`
The `localpath` argument is unused if `uselocalpath` is false, so we
can use `None` as a sentinel value for the variable instead and remove
extra `uselocalpath` argument. That's not much of a win, but it's a
small step towards further improvements.
Differential Revision: https://phab.mercurial-scm.org/D12189
Martin von Zweigbergk <martinvonz@google.com> [Fri, 11 Feb 2022 22:39:53 -0800] rev 48783
filemerge: remove an unnecessary join with absolute path
The `backup` path is now always absolute, so we don't need to join it
with the working copy path.
Differential Revision: https://phab.mercurial-scm.org/D12188
Martin von Zweigbergk <martinvonz@google.com> [Fri, 11 Feb 2022 21:39:55 -0800] rev 48782
filemerge: when using in-memory merge, always put backup files in temp dir
Before calling a merge tool, we create a backup of the local side of
the merge. That file can be put in the working copy or in a temporary
directory, depending on the user's config. When we're merging in
memory, we don't want to write to the actual, on-disk working copy, so
we write the file to the in-memory working copy instead. However,
since we don't support external merge tools with in-memory merge, it
makes no difference where the file is actually stored (and if we ever
do add support for external merge tools, then the file clearly can't
live in the in-memory working-copy object anyway). So, since it
doesn't matter where the file is stored, we can simplify by always
putting them in the system's temp directory.
Differential Revision: https://phab.mercurial-scm.org/D12187
Martin von Zweigbergk <martinvonz@google.com> [Tue, 15 Feb 2022 20:18:57 -0800] rev 48781
filemerge: remove unused `repo` argument from `_maketempfiles()`
I missed this in D12171.
Differential Revision: https://phab.mercurial-scm.org/D12194
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Feb 2022 23:45:30 +0100] rev 48780
upgrade: make dirstate-v2 format variant compatible with share
This only affects the dirstate and is safe to upgrade in the share.
Differential Revision: https://phab.mercurial-scm.org/D12197
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Feb 2022 23:09:07 +0100] rev 48779
upgrade: prepare code (and output) for the idea of upgrading share
This would work for a subset of action only. Our first target is dirstate-v2.
Differential Revision: https://phab.mercurial-scm.org/D12196
Augie Fackler <augie@google.com> [Tue, 15 Feb 2022 13:32:30 -0500] rev 48778
sparse: add timing block for parsing sparse configs
This was showing up in an operation I was doing today, and I'd like to
be able to get trace spans for it instead of just profiler samples.
Differential Revision: https://phab.mercurial-scm.org/D12186
Augie Fackler <augie@google.com> [Tue, 15 Feb 2022 13:32:11 -0500] rev 48777
narrowspec: add timing block for validating narrowspec
This was showing up in an operation I was doing today, and I'd like to
be able to get trace spans for it instead of just profiler samples.
Differential Revision: https://phab.mercurial-scm.org/D12185
Martin von Zweigbergk <martinvonz@google.com> [Tue, 15 Feb 2022 20:24:46 -0800] rev 48776
branching: merge with stable
Martin von Zweigbergk <martinvonz@google.com> [Fri, 11 Feb 2022 16:52:48 -0800] rev 48775
filemerge: put temporary files in single temp dir by default
The feature introduced in D2888 seems like a pure improvement to
me. It makes the names' of temporary file easier to read. Let's have
it always enabled.
I also removed the config option for the path prefix because it
doesn't seem useful. I asked Kyle (the author of the feature) about it
and he couldn't think of a reason to keep it. I suspect it was just
that we to have a config to turn it on/off while it was experimental,
so it might as well be a configurable prefix then.
Differential Revision: https://phab.mercurial-scm.org/D12171
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Feb 2022 05:20:46 +0100] rev 48774
dirstate-tracked-key: update the config value to match latest discussion
Special cases are not special enough, we align the option name on the other.
The `version` value is undocumented for now as it can only have a single value.
It is supported in the code to properly detect and abort if more value are
introduced in the future value.
Differential Revision: https://phab.mercurial-scm.org/D12184
Raphaël Gomès <rgomes@octobus.net> [Fri, 26 Nov 2021 15:38:04 +0100] rev 48773
rhg: signal when falling back in logs
We use the `trace` level for the actual message because it can get really busy.
Differential Revision: https://phab.mercurial-scm.org/D11814
pacien <pacien.trangirard@pacien.net> [Mon, 07 Feb 2022 13:23:58 +0100] rev 48772
revlog: register changelogv2 C implementation in parsers
This allows Python code to make use of the C implementation of the changelogv2
base operations when the C extensions are enabled.
The `format_version` values are now shared between the C and Python sides,
avoiding an additional translation for the selection of the format version to
use.
Differential Revision: https://phab.mercurial-scm.org/D12179
pacien <pacien.trangirard@pacien.net> [Mon, 14 Feb 2022 12:34:02 +0100] rev 48771
revlog: implement changelogv2 packing and unpacking in C
This introduces a C implementation of changelogv2 records packing and unpacking
operations matching the pure Python counterpart, similarly to what we already
have for revlogv1 and revlogv2.
This is also necessary to access changelogv2 record fields from future Rust
code without going through the Python part, which would annihilate any
performance benefit.
Differential Revision: https://phab.mercurial-scm.org/D12178
pacien <pacien.trangirard@pacien.net> [Thu, 10 Feb 2022 16:20:14 +0100] rev 48770
revlog: memset whole record instead of dealing with padding
This is less error-prone.
Differential Revision: https://phab.mercurial-scm.org/D12177
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 11 Feb 2022 05:37:19 +0100] rev 48769
revlog: do not compute node location by hand in index_invalidate_added
The node is not guaranteed to be at the same location all the time (e.g:
changelog v2), so let's use the official existing API to get that value.
Differential Revision: https://phab.mercurial-scm.org/D12176
pacien <pacien.trangirard@pacien.net> [Fri, 28 Jan 2022 11:54:44 +0100] rev 48768
rank: compute property incrementally
This replaces the naive rank computation with a more efficient incremental
method, avoiding computing the whole ancestor set when possible.
Differential Revision: https://phab.mercurial-scm.org/D12143
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 11:45:33 +0100] rev 48767
rank: add test with golden values
This adds a regression test for the computation of the rank, using the current
values computed with the naive algorithm as the "golden" reference.
Differential Revision: https://phab.mercurial-scm.org/D12142
pacien <pacien.trangirard@pacien.net> [Fri, 28 Jan 2022 11:45:18 +0100] rev 48766
rank: add minimal test
This adds a small test checking the rank computation in the case of a merge.
Differential Revision: https://phab.mercurial-scm.org/D12141
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 11:35:41 +0100] rev 48765
rank: add context and template keyword
This makes the stored rank property accessible, to be expanded and printed.
Differential Revision: https://phab.mercurial-scm.org/D12140
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 11:33:01 +0100] rev 48764
rank: naive rank property computation and retrieval
This stores the rank (size of the ancestor set of a revision, including itself)
in a changelog field and allows this property to be retrieved.
This new property is used as part of stable-range computations, which will be
introduced later on.
The value is computed in a naive way from the definition of the rank. This will
be replaced by a more efficient version subsequently.
Differential Revision: https://phab.mercurial-scm.org/D12139
Martin von Zweigbergk <martinvonz@google.com> [Mon, 07 Feb 2022 22:54:38 -0800] rev 48763
filemerge: move check for identical sides out of filemerge()
`filemerge.filemerge()` returns `None` if no merge was necessary
because the two sides were identical. I don't think it should be that
function's responsibility to handle that case; we should ideally not
even call `filemerge.filemerge()` if the two inputs identical. This
patch therefore moves the check out to the caller (`mergestate.py`).
The largefiles test changed because we now notice that the two sides
made the same change, so we don't consider it a merge. Also note that
the new message better matches the line above it in the test output.
Differential Revision: https://phab.mercurial-scm.org/D12154
Martin von Zweigbergk <martinvonz@google.com> [Mon, 07 Feb 2022 20:12:09 -0800] rev 48762
mergestate: use an early return for trivial merges
`filemerge.filemerge()` returns `None` if no merge was needed because
the two sides were identical. I'd like to move that to the
caller. This is a little refactoring to prepare for that.
Differential Revision: https://phab.mercurial-scm.org/D12153
Martin von Zweigbergk <martinvonz@google.com> [Mon, 07 Feb 2022 14:07:04 -0800] rev 48761
simplemerge: remove now-unused arguments
The `ui` argument is no longer needed now that we don't handle
`--print` in the library code.
Differential Revision: https://phab.mercurial-scm.org/D12151
Martin von Zweigbergk <martinvonz@google.com> [Tue, 18 Jan 2022 13:22:55 -0800] rev 48760
merge: fix documented order of `labels` argument
Differential Revision: https://phab.mercurial-scm.org/D12150
Martin von Zweigbergk <martinvonz@google.com> [Tue, 18 Jan 2022 12:57:55 -0800] rev 48759
filemerge: when not keeping premerge, don't write markers to context
When premerge is enabled (as it is for non-binary inputs by default)
and the markers are not kept, we currently still write it to the
output context and then restore the previous content right after. With
the refactoring in the previous patch, we can easily avoid that step
and instead write the output in the opposite case (i.e. when it's
successful or when the markers are supposed to be kept).
Differential Revision: https://phab.mercurial-scm.org/D12149
Martin von Zweigbergk <martinvonz@google.com> [Fri, 14 Jan 2022 08:17:13 -0800] rev 48758
simplemerge: move printing of merge result to extension
The `mercurial.simplemerge` module still has some command-lines
processing that doesn't belong in such a low-level module. This patch
moves the handling of `hg simplemerge --print` to the extension by
having `mercurial.simplemerge.simplemerge()` return the merged text.
Differential Revision: https://phab.mercurial-scm.org/D12148
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Feb 2022 15:48:01 -0800] rev 48757
simplemerge: remove code for checking binary input now that callers do it
The callers now do the checking for binary inputs and handle warnings
and/or errors, so we can remove that code from the low-level
`simplemerge` module now. After this patch we just raise an error
unless the caller told us to allow binary inputs.
Differential Revision: https://phab.mercurial-scm.org/D12169
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Feb 2022 15:27:58 -0800] rev 48756
simplemerge: let filemerge check for binary inputs
This is similar to the previous patch, but here we put a specialized
copy of `simplemerge._verifytext()` in the the `filemerge` module
instead.
Differential Revision: https://phab.mercurial-scm.org/D12147
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Feb 2022 13:36:09 -0800] rev 48755
simplemerge: let extension check for binary inputs (unless `--text`)
The `simplemerge` module does too much UI-related things. This patch
puts a specialized copy of `simplemerge._verifytext()` in the
simplemerge extension.
Differential Revision: https://phab.mercurial-scm.org/D12146
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Feb 2022 11:00:32 -0800] rev 48754
simplemerge: store input data in MergeInput
I want to be able to update the file contents for support for partial
conflict resolution. Having the text available (and later settable) on
`MergeInput` will enable that.
Differential Revision: https://phab.mercurial-scm.org/D12144
Martin von Zweigbergk <martinvonz@google.com> [Fri, 04 Feb 2022 18:36:36 -0800] rev 48753
simplemerge: convert MergeInput to regular, non-attr.ib class
I'm about to add more logic and state to it.
Differential Revision: https://phab.mercurial-scm.org/D12145
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Feb 2022 09:59:07 -0800] rev 48752
simplemerge: replace `**opts` passed to `simplemerge()` by keyword arguments
The `simplemerge` module is library code; it should not get an
unmodified `opts` dict from the `simplemerge` extension.
Differential Revision: https://phab.mercurial-scm.org/D12152
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 03 Feb 2022 18:14:25 +0100] rev 48751
narrow: add support for merging add and remove outside of the tracked set
This extend f1eb77dceb36 to test and support the remaining action. Or, at least,
the simple incarnation of them.
Differential Revision: https://phab.mercurial-scm.org/D12181
Simon Sapin <simon.sapin@octobus.net> [Fri, 21 Jan 2022 17:54:03 +0100] rev 48750
status: prefer relative paths in Rust code
… when the repository root is under the current directory,
so the kernel needs to traverse fewer directory in every call
to `read_dir` or `symlink_metadata`.
Better yet would be to use libc functions like `openat` and `fstatat`
to remove such repeated traversals entirely, but the standard library
does not provide APIs based on those.
Maybe with a crate like https://crates.io/crates/openat instead?
Benchmarks of `rhg status` show that this patch is neutral in some configurations,
and makes the command up to ~20% faster in others.
Below is semi-arbitrary subset of results. The four numeric columns are:
time (in seconds) with this changeset’s parent, time with this changeset,
time difference (negative is better), time ratio (less than 1Â is better).
```
mercurial-dirstate-v1 | default-plain-clean.no-iu.pbr | 0.0061 -> 0.0059: -0.0002 (0.97)
mercurial-dirstate-v2 | default-plain-clean.no-iu.pbr | 0.0029 -> 0.0028: -0.0001 (0.97)
mozilla-dirstate-v1 | default-plain-clean.no-iu.pbr | 0.2110 -> 0.2102: -0.0007 (1.00)
mozilla-dirstate-v2 | default-copies-clean.ignored.pbr | 0.0489 -> 0.0401: -0.0088 (0.82)
mozilla-dirstate-v2 | default-copies-clean.no-iu.pbr | 0.0479 -> 0.0393: -0.0085 (0.82)
mozilla-dirstate-v2 | default-copies-large.all.pbr | 0.1262 -> 0.1210: -0.0051 (0.96)
mozilla-dirstate-v2 | default-copies-small.ignored-unknown.pbr | 0.1262 -> 0.1200: -0.0062 (0.95)
mozilla-dirstate-v2 | default-copies-small.ignored.pbr | 0.0536 -> 0.0417: -0.0119 (0.78)
mozilla-dirstate-v2 | default-copies-small.no-iu.pbr | 0.0482 -> 0.0393: -0.0089 (0.81)
mozilla-dirstate-v2 | default-plain-clean.ignored.pbr | 0.0518 -> 0.0402: -0.0116 (0.78)
mozilla-dirstate-v2 | default-plain-clean.no-iu.pbr | 0.0481 -> 0.0392: -0.0088 (0.82)
mozilla-dirstate-v2 | default-plain-large.all.pbr | 0.1271 -> 0.1218: -0.0052 (0.96)
mozilla-dirstate-v2 | default-plain-small.ignored-unknown.pbr | 0.1225 -> 0.1202: -0.0022 (0.98)
mozilla-dirstate-v2 | default-plain-small.ignored.pbr | 0.0510 -> 0.0418: -0.0092 (0.82)
mozilla-dirstate-v2 | default-plain-small.no-iu.pbr | 0.0480 -> 0.0394: -0.0086 (0.82)
netbeans-dirstate-v1 | default-plain-clean.no-iu.pbr | 0.1442 -> 0.1422: -0.0020 (0.99)
netbeans-dirstate-v2 | default-plain-clean.no-iu.pbr | 0.0325 -> 0.0282: -0.0043 (0.87)
```
Differential Revision: https://phab.mercurial-scm.org/D12175
Simon Sapin <simon.sapin@octobus.net> [Mon, 14 Feb 2022 18:51:43 +0100] rev 48749
rust: remove unused `StatusError::IO` enum variant
All `io::Error` cases are now handled through PatternFileWarning or BadMatch
Differential Revision: https://phab.mercurial-scm.org/D12174
Simon Sapin <simon.sapin@octobus.net> [Mon, 14 Feb 2022 18:57:12 +0100] rev 48748
rust: fix code formatting
Differential Revision: https://phab.mercurial-scm.org/D12173
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Mon, 07 Feb 2022 00:33:22 -0500] rev 48747
sparse: rework debugsparse's interface
hg debugsparse supports arguments like --include, similar to `hg
tracked --addinclude` or `hg log --include`. But in `hg debugsparse`,
the pattern is not an argument of the flag, instead the patterns are
the anonymous command line arguments.
Not only is this surprising, it makes it impossible to use --include
and --exclude in the same invocation, or --reset --exclude.
So I propose making debugsparse making --include, --exclude take an
argument, and rejecting anonymous command line arguments, as well as
allowing mixing several of these flags in one invocations.
Differential Revision: https://phab.mercurial-scm.org/D12155
Mitchell Hentges <mhentges@mozilla.com> [Wed, 09 Feb 2022 13:04:37 -0500] rev 48746
color: don't infer vt status from TERM on Windows
Previously, it was assumed that Windows environments with
"xterm" in the TERM environment variable meant that either
"virtual terminal mode" was already enabled, or that
we are running in an environment that didn't need a "virtual
terminal mode" (such as mintty, that interprets ANSI sequences
itself).
However, modern Cygwin and MSYS2 set TERM=xterm when using the
Command Prompt as the terminal, which needs "virtual terminal
mode" to be manually enabled. However, due to (issue6640),
the vtmode wasn't being enabled.
This patch ensures that we always try to enable vtmode on
Windows regardless of the state of TERM, so that:
* ANSI-based colors work in modern Cygwin/MSYS2 (with Command
Prompt), and
* The vtmode is unnecessarily set when running in a different
terminal such as mintty, but it is simply redundant and doesn't
appear to have ill effects.
Differential Revision: https://phab.mercurial-scm.org/D12158
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 19:26:10 +0100] rev 48745
rhg: enable `rhg status` by default, without config or env opt-in
The full test suite now passes with `hg` pointing to rhg.
Differential Revision: https://phab.mercurial-scm.org/D12162
Simon Sapin <simon.sapin@octobus.net> [Tue, 08 Feb 2022 14:20:58 +0100] rev 48744
rhg: Colorize `rhg status` output when appropriate
Differential Revision: https://phab.mercurial-scm.org/D12168
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 12:59:32 +0100] rev 48743
rhg: Add support for colored output
The same "label" system is used as in Python code
Differential Revision: https://phab.mercurial-scm.org/D12167
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 13:56:43 +0100] rev 48742
rhg: Add parsing for the --color global CLI argument
Differential Revision: https://phab.mercurial-scm.org/D12166
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 12:52:25 +0100] rev 48741
rhg: Make Ui::new falliable, add Ui::new_infallible
This allows propagating color configuration errors
Differential Revision: https://phab.mercurial-scm.org/D12165
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 12:12:56 +0100] rev 48740
rhg: Pass a &Config to Ui::new
When a Ui object is needed to print errors about configuration-loading errors,
an empty (default) configuration is used.
Differential Revision: https://phab.mercurial-scm.org/D12164
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 11:58:04 +0100] rev 48739
rhg: Add support for HGPLAINEXPECT
Differential Revision: https://phab.mercurial-scm.org/D12163
Augie Fackler <augie@google.com> [Thu, 10 Feb 2022 13:24:38 -0500] rev 48738
merge: with stable
Anton Shestakov <av6@dwimlabs.net> [Mon, 07 Feb 2022 12:29:43 +0300] rev 48737
scmutil: obsrevs is already a frozenset
Differential Revision: https://phab.mercurial-scm.org/D12157
Anton Shestakov <av6@dwimlabs.net> [Mon, 07 Feb 2022 12:25:46 +0300] rev 48736
obsolete: always return frozensets from obsolete.getrevs()
getrevs function already returns an empty frozenset when there is no obsstore,
but let's make sure to return a frozenset in any case. This makes it possible
to use the result of this function as a dict key or provide it to hash()
built-in function without any conversions.
Differential Revision: https://phab.mercurial-scm.org/D12156
pacien <pacien.trangirard@pacien.net> [Wed, 26 Jan 2022 13:18:48 +0100] rev 48735
revlog: split revlog v1 and revlog v2 handling
Explicitly splitting their fields packing and unpacking makes it easier to
extend the existing C implemenation to handle the new changelog format, whose
fields and offsets are not simply a superset of the revlog.
Differential Revision: https://phab.mercurial-scm.org/D12137
pacien <pacien.trangirard@pacien.net> [Wed, 26 Jan 2022 13:08:36 +0100] rev 48734
revlog: extract entry byte offsets into named constants
Labelling the fields pointed by the given offsets shared by revlog v1 and v2.
Differential Revision: https://phab.mercurial-scm.org/D12136
Anton Shestakov <av6@dwimlabs.net> [Mon, 07 Feb 2022 13:24:30 +0300] rev 48733
branchmap: split a long condition in branchcache.validfor(), add comments
Differential Revision: https://phab.mercurial-scm.org/D12138
Anton Shestakov <av6@dwimlabs.net> [Sun, 06 Feb 2022 19:31:39 +0300] rev 48732
branchmap: don't add branch entries if there are no heads
We definitely don't want any empty entries to be present in repo.branchmap()
just for the sake of not breaking test-notify.t.
No test changes required because the previous patch made notify extension to
not raise any tracebacks in case of RepoLookupErrors.
Differential Revision: https://phab.mercurial-scm.org/D12135
Anton Shestakov <av6@dwimlabs.net> [Sun, 06 Feb 2022 19:14:51 +0300] rev 48731
notify: don't produce errors if a revision is not found
Notify extension has a way to only subscribe to a specific revset, such as
"branch(foo)". Before this patch, when there was no branch with that name, it
would produce a traceback saying "unknown revision: foo". With this patch it
would no longer do that, and instead it'll assume there are no revisions that
match this revset. I think this patch is an improvement in general, but there's
a reason I'm sending it now.
test-notify.t has a test case where it obsoletes the only revision on a branch,
and previously that wouldn't produce any complications, because head
computation wasn't obsolescence-aware. Now if the only revision on a branch is
obsolete, repo should not see that branch at all.
That branch will still be present in branchcache (with an empty list of
revisions) until the next patch.
Differential Revision: https://phab.mercurial-scm.org/D12134
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 03 Feb 2022 18:14:11 +0100] rev 48730
narrow: allow merging non-conflicting change outside of the narrow spec
We use the mergestate to carry information about these merge action and
reprocess them at commit time to apply the necessary update.
The dirstate itself is never affected and remains "pure", with content only in
the narrow-spec. This file involved in such merge are therefor not listed in `hg
status`.
The current testing is based on a modification of the previous testing, that
refused to do such merges. As a result it is a bit simple and more extensive
code and testing testing will have to be introduced later. I am planning to do
this extra testing, soon.
In addition, this only works for flat manifest. Support for tree manifest will
need more work. I am not currently planning to do this work.
Differential Revision: https://phab.mercurial-scm.org/D12119
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 30 Jan 2022 06:01:42 +0100] rev 48729
merge-actions: add some information about the "changes" the action do
This will be useful when processing merges action outside of the narrow-spec.
"support" outside of narrow file on commit
Differential Revision: https://phab.mercurial-scm.org/D12118
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 29 Jan 2022 06:21:32 +0100] rev 48728
merge-actions: have an attribute for narrow safetiness
This allow the core doing narrow filtering to process action without
explicitely listing all possible actions. This is important to make the actions
system more flexible in the future.
Differential Revision: https://phab.mercurial-scm.org/D12117
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 15:19:58 +0100] rev 48727
merge-actions: add an explicite "no_op" attribute
This make the MergeAction smarter and able to describe themself. This is useful
to help introducing more MergeAction object that better the complexity of the
situation.
Differential Revision: https://phab.mercurial-scm.org/D12116
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 19:46:37 +0100] rev 48726
merge-actions: gather all created action into a set
This is mostly to demonstrate we can do this before we start adding more
specialized set.
Differential Revision: https://phab.mercurial-scm.org/D12115
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 17:08:30 +0100] rev 48725
merge-actions: make merge action a full featured object
This open the way for having "smarter" value as action, making the usage code
simpler and more flexible.
We have to explicitly use __bytes__ call in a couple of place because Python2…
Differential Revision: https://phab.mercurial-scm.org/D12114
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 16:25:41 +0100] rev 48724
convert: use the merge action constant
The constant exists, lets use them. Otherwise we cannot make these constant more
powerful.
Differential Revision: https://phab.mercurial-scm.org/D12113
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 16:11:42 +0100] rev 48723
large-file: use the merge action constant
The constant exists, lets use them. Otherwise we cannot make these constant more
powerful.
Differential Revision: https://phab.mercurial-scm.org/D12112
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 16:41:45 +0100] rev 48722
merge: stop using merge action for pathconflict option
This is not the b'r' you are looking for.
Differential Revision: https://phab.mercurial-scm.org/D12111
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:25:51 +0100] rev 48721
merge: break up a not-so-one-liner for readability
Differential Revision: https://phab.mercurial-scm.org/D12110
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:25:45 +0100] rev 48720
merge: break up a not-so-one-liner for readability
Differential Revision: https://phab.mercurial-scm.org/D12109
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:25:39 +0100] rev 48719
merge: break up a not-so-one-liner for readability
Differential Revision: https://phab.mercurial-scm.org/D12108
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:25:32 +0100] rev 48718
merge: break up a not-so-one-liner for readability
Differential Revision: https://phab.mercurial-scm.org/D12107
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:25:05 +0100] rev 48717
merge: break up two not-so-one-liner for extra readability
Differential Revision: https://phab.mercurial-scm.org/D12106
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:24:41 +0100] rev 48716
merge: break up a not-so-one-liner for readability
Differential Revision: https://phab.mercurial-scm.org/D12105
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:24:30 +0100] rev 48715
merge: break up a not-so-one-liner for readability
(even if not fully satisfied this time)
Differential Revision: https://phab.mercurial-scm.org/D12104
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:23:56 +0100] rev 48714
merge: break up a not-so-one-liner for readability
Differential Revision: https://phab.mercurial-scm.org/D12103
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:23:49 +0100] rev 48713
merge: break up a not-so-one-liner for readability
Differential Revision: https://phab.mercurial-scm.org/D12102
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:23:37 +0100] rev 48712
merge: break up a not-so-one-liner for readability
Differential Revision: https://phab.mercurial-scm.org/D12101
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 03 Feb 2022 06:49:48 +0100] rev 48711
phabricator-refresh: add a magic value to skip it in the CI
When maintaining (light) fork, it is useful to be able to disable this.
Differential Revision: https://phab.mercurial-scm.org/D12133
Anton Shestakov <av6@dwimlabs.net> [Thu, 27 Jan 2022 20:04:56 +0300] rev 48710
interfaces: add missing caches kwarg of localrepo.updatecaches()
Added to localrepo: in 1337bfaa88ca, added to the interface: now.
Differential Revision: https://phab.mercurial-scm.org/D12092
Anton Shestakov <av6@dwimlabs.net> [Mon, 31 Jan 2022 18:05:36 +0300] rev 48709
obsolete: don't import from .node twice
See d55b71393907.
Differential Revision: https://phab.mercurial-scm.org/D12121
Anton Shestakov <av6@dwimlabs.net> [Mon, 31 Jan 2022 18:04:11 +0300] rev 48708
dagop: don't import nullrev from .node twice
See 59fa3890d40a.
Differential Revision: https://phab.mercurial-scm.org/D12120
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Jan 2022 22:24:11 +0100] rev 48707
stream-clone: allow to change persistent-nodemap format during stream clone
Persistent nodemap affect the store format. However it is fairly isolated and
fast to generate locally. So not making it a fixed part of the stream clone is
useful.
This allow clients without persistent-nodemap support (default for client
without Rust enabled, or simply older client). So it make it possible to enable
persistent nodemap on client, where it can provide a massive boost. without too
much consequence.
To do so, we stop using it in the advertisement requirements for streaming and
let the client add/remove the necessary file depending of its configuration.
We still send the files as it seems like a small save to not regenerate them.
In addition, the way we match them will overlap with the changelog-v2/revlog-v2
so we can't simply skip the associated patterns.
Differential Revision: https://phab.mercurial-scm.org/D12096
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Jan 2022 15:22:09 +0100] rev 48706
stream-clone: add 5000 changesets to test-clone-stream-format
This make sure the changelog is not inlined. We needs this to test coming
behavior change around persistent-nodemap.
Differential Revision: https://phab.mercurial-scm.org/D12095
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Jan 2022 15:22:04 +0100] rev 48705
debugbuilddag: add a flag to allow running it from a non-empty repository
Allow that by default seems "dangerous", but having a flag to make it possible
will be useful to help building some repository incrementally. The newly introduced support is basic, but already useful.
Differential Revision: https://phab.mercurial-scm.org/D12094