Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 18:25:45 +0200] rev 45263
commitctx: extract all the manual logic to process the files
That branch of the if is significantly more complicated than the other two.
Moving it to its own function make it simple to keep the scope limited and to
read to the higher level function.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 23:08:00 +0200] rev 45262
commitctx: treat `filesadded` more like `filesremoved`
Accumulating the filename in a list will have a negligible cost and deal with
the list of added files like the other ones will make is code cleaning simpler.
The two variable with very close name is not great, but my plan is to split most
of the code in a separated function which will make the "problem" go away by
itself.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 22:58:29 +0200] rev 45261
commitctx: move `writechangesetcopy` business at the end a code section
This code is to handle a specific subcase so we move it a the end. This allow
to gather the rest of the "core" code closer to the related logic.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 21:09:42 +0200] rev 45260
commitctx: move copy meta config reading in a dedicated function
The logic is non trivial, make it contained in a function is clearer. It also
unlock easy re-use of that logic without having the pass the value around.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 21:03:30 +0200] rev 45259
commitctx: no longer use the `writecopiesto` variable in the function
The `writefilecopymeta` variable already carry the same information, so we can
use `writefilecopymeta` in the one conditional where `writecopiesto` was used.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Jul 2020 14:58:21 +0200] rev 45258
commitctx: extract the function that commit a new manifest
The logic is large enough and isolated enough to be extracted, this reduce the
size of the main function, making it simpler to follow.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 24 Jul 2020 12:52:32 +0200] rev 45257
commitctx: stop using weakref proxy for transaction
This weakref proxy was introduced in 2007 by 30d4d8985dd8.
If I understand it correctly, the logic at that time was relying on the
transaction destructor, triggered at garbage collection time to rollback failed
transaction. passing the object to sub function directly mean it would live in
the function scope and be trapped in the traceback on exception, leading to the
transaction rollback too late in some case.
Modern transaction usage use explicit opening and closing of transaction and no
longer rely on some internal reference counting details. So this weakref proxy
is no longer necessary. Absolutely no test are affected when we drop it.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 22 Jul 2020 16:10:33 +0200] rev 45256
commitctx: document the None return for "touched" value
Martin von Zweigbergk <martinvonz@google.com> [Thu, 23 Jul 2020 22:06:36 -0700] rev 45255
tests: add tests trying to use dir as style, as %include, and as __base__
Differential Revision: https://phab.mercurial-scm.org/D8800
Martin von Zweigbergk <martinvonz@google.com> [Thu, 23 Jul 2020 22:06:31 -0700] rev 45254
tests: fix mistaken copy&paste from commit 4489e9a22763
Differential Revision: https://phab.mercurial-scm.org/D8802
Joerg Sonnenberger <joerg@bec.de> [Mon, 06 Jul 2020 15:10:53 +0200] rev 45253
manifest: kill one more instance of the old merge hash hack
Differential Revision: https://phab.mercurial-scm.org/D8766
Joerg Sonnenberger <joerg@bec.de> [Sat, 25 Jul 2020 04:29:17 +0200] rev 45252
dirstate: isolate node len dependency for the pure version
When switching to a 256bit hash function, this still needs adjustment,
but concentrates the change in one place.
Differential Revision: https://phab.mercurial-scm.org/D8815
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Jul 2020 08:38:19 -0700] rev 45251
fix: update documentation to reflect preference for --source over --rev
I should have updated the documentation in 5205b46bd887 (fix: add a -s
option to format a revision and its descendants, 2020-03-13) and/or
a6ef1e8e2f6d (fix: mark -r as advanced, 2020-03-13)...
Differential Revision: https://phab.mercurial-scm.org/D8808
Kyle Lippincott <spectral@google.com> [Fri, 24 Jul 2020 16:32:45 -0700] rev 45250
tests: make check-py3-compat.py actually load the specified files correctly
For most uses, this change is essentially a no-op, as this script is generally
only run by test-check-py3-compat.t, which will already put `$TESTDIR/..` in
`$PYTHONPATH`.
When running outside of tests, however, `$PYTHONPATH` is likely not set, causing
check-py3-compat.py to parse the file from the repo, but then import the
installed version, and raise any errors about the installed version, not the one
currently in the repo.
Additionally, this helps users (like me) who have a strange set up where their
home directory (and thus their hg repos) happen to be in a subdirectory of
sys.prefix (which is /usr on my system). Since the '.' entry added to sys.path
takes precedence over the absolute path of `$TESTDIR/..` in `$PYTHONPATH`, the
path to the modules that it imports (and that show up in any stack trace) are
*relative*, meaning that we don't detect them as starting with `sys.prefix`.
Sample non-test invocation, and the difference this change makes (the path for
'error at <path>:<line>' is correct now)::
Before:
```
$ python3 contrib/check-py3-compat.py mercurial/win*.py
mercurial/win32.py: error importing: <ValueError> _type_ 'v' not supported (error at check-py3-compat.py:65)
mercurial/windows.py: error importing: <ModuleNotFoundError> No module named 'msvcrt' (error at check-py3-compat.py:65)
```
After:
```
$ python3 contrib/check-py3-compat.py mercurial/win*.py
mercurial/win32.py: error importing: <ValueError> _type_ 'v' not supported (error at win32.py:11)
mercurial/windows.py: error importing: <ModuleNotFoundError> No module named 'msvcrt' (error at windows.py:12)
```
Differential Revision: https://phab.mercurial-scm.org/D8814
Kyle Lippincott <spectral@google.com> [Fri, 24 Jul 2020 12:13:10 -0700] rev 45249
tests: virtualenv is only used on py2, rename and conditionalize
If I have I have the Debian `python3-virtualenv` package installed on my
machine, the import succeeds but then I receive an AttributeError because the
package is essentially completely different between py2 and py3, and
test-hghave fails.
Differential Revision: https://phab.mercurial-scm.org/D8812
Kyle Lippincott <spectral@google.com> [Thu, 23 Jul 2020 13:31:45 -0700] rev 45248
morestatus: mention --stop even if not using --verbose
Differential Revision: https://phab.mercurial-scm.org/D8811
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Jul 2020 11:24:59 -0700] rev 45247
templater: handle None returned from templatedir()
My recent 91aa9bba3dc9 (templater: make templatepaths() return a
single path, or None, 2020-07-21) didn't account for the fact that
`templatedir()` returns `None` in frozen binaries. That is ironic,
since the reason I'm working on this is to add support for built-in
mapfiles in frozen binaries. This patch updates the callers to handle
the `None` case. It's somewhat ugly, but I will have to revisit this
soon anyway, since my goal is to make all callers handle that case by
trying to read the map file using the resources API instead.
Differential Revision: https://phab.mercurial-scm.org/D8810
Martin von Zweigbergk <martinvonz@google.com> [Wed, 22 Jul 2020 00:09:17 -0700] rev 45246
templater: do search for include of unqualified builtin outside of config code
Commit 081b08e4ea13 (templater: look for mapfiles in template paths,
2015-05-15) added support for using things like `%include
map-cmdline.default` to include built-in map files without using a
valid path to them. This patch rewrites that support by moving it into
`_readmapfile()` so it can later be adapted for reading from a
non-file resource.
Differential Revision: https://phab.mercurial-scm.org/D8792
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 21:59:12 -0700] rev 45245
templater: switch to lower-level config.parse() in _readmapfile()
I hope to modify this code to also work with resources loaded from
memory (for PyOxidizer support). For that, we'll need to handle the
lookup of relative `%include` path (not joined with the base directory
of the containing file). This patch prepares for that by using
`config.parse()` instead of `config.read()`, since the latter expects
a file in the file system.
As it happens, this change also lets us clean up the `config` class to
not need the `_includepaths` field. That will happen next.
Differential Revision: https://phab.mercurial-scm.org/D8791
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 23:50:42 -0700] rev 45244
config: pass both relative and absolute paths to `include` callback
The `include` callback is responsible for loading configs from
`%include` statements. The callback currently gets passed the absolute
path [1] to the config to read. That is created by joining the dirname
of the file that contains the `%include` statement. For PyOxidizer
support, I'm trying to reduce dependence on paths. This patch helps
with that by passing the relative path found in the `%include`
statement (but with username expansion, etc.) to the `include`
callback. It also turns out that the existing callers can easily adapt
to using the relative path. Coming patches will clean that up and then
we'll remove the absolute path from the callback.
[1] The "absolute path" bit is a bit of a lie -- it's going to be an
absolute path if the path that was passed into `config.parse()` was
absolute.
Differential Revision: https://phab.mercurial-scm.org/D8790
Martin von Zweigbergk <martinvonz@google.com> [Wed, 22 Jul 2020 22:38:42 -0700] rev 45243
tests: add test for bad template %include and __base__
It doesn't seem like we had any tests for `%include non-existent` and
`__base__ = non-existent`. The latter raises an error while the former
ignores the include. We should probably also make the former an error.
Differential Revision: https://phab.mercurial-scm.org/D8798
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 22:52:22 -0700] rev 45242
tests: add test for unqualified include of a built-in template map
The feature was added in 081b08e4ea13 (templater: look for mapfiles in
template paths, 2015-05-15), but no test case was added.
Differential Revision: https://phab.mercurial-scm.org/D8797
Augie Fackler <augie@google.com> [Wed, 22 Jul 2020 22:09:38 -0400] rev 45241
merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Jul 2020 00:18:15 +0200] rev 45240
commitctx: extract _filecommit too
This function is exclusively used in `commitctx`. So we should extract it too
for consistency and to reduce the `localrepo` bloat.
This is part of a larger refactoring/cleanup of the commitctx code to clarify
and augment the logic gathering metadata useful for copy tracing. The current
code is a tad too long and entangled to make such update easy.
Differential Revision: https://phab.mercurial-scm.org/D8710
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 23:14:52 +0200] rev 45239
commitctx: extract the function in a dedicated module
the function have few callers (< 15) is quite long a mostly independent from the
repository itself. It seems like a good candidate to reduce the bloatness of the
localrepository class. Extracting it will help us cleaning the code up and
splitting it into more reasonable-size function.
We don't use a copy trick because the amount of code extract is quite small
(<5%) and the de-indent means every single line change anyway. So this is not
deemed valuable to do so.
This is part of a larger refactoring/cleanup of the commitctx code to clarify
and augment the logic gathering metadata useful for copy tracing. The current
code is a tad too long and entangled to make such update easy.
Differential Revision: https://phab.mercurial-scm.org/D8709
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 19:13:19 +0200] rev 45238
commitctx: document a fast path in _filecommit
This block cut off a lot of logic, documenting the why and how seems useful to
future reader.
This is part of a larger refactoring/cleanup of the commitctx code to clarify
and augment the logic gathering metadata useful for copy tracing. The current
code is a tad too long and entangled to make such update easy. We start with
easy and small cleanup.
Differential Revision: https://phab.mercurial-scm.org/D8700
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 13:36:48 -0700] rev 45237
hgweb: simplify now that we always have a single path
Both `templatedir()` and `web.templatepath` are now always a single
path (or None).
Differential Revision: https://phab.mercurial-scm.org/D8788
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 13:41:26 -0700] rev 45236
templater: simplify stylemap() now that templatedir() returns a single path
Differential Revision: https://phab.mercurial-scm.org/D8787
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 13:11:49 -0700] rev 45235
templater: make templatepaths() return a single path, or None
The function returns either a singleton list or an empty list, so it
makes more sense to return a value or None. The plural in the name
also doesn't make sense, but `templatepath()` is already taken, so I
renamed it to `templatedir()` instead.
Differential Revision: https://phab.mercurial-scm.org/D8786
Martin von Zweigbergk <martinvonz@google.com> [Tue, 21 Jul 2020 13:05:37 -0700] rev 45234
templater: simplify templatepaths() to avoid iterating a singleton list
The function iterates over a hard-coded list of one element since
d844e220792a (templater: don't search randomly for templates - trust
util.datapath, 2014-09-28).
Differential Revision: https://phab.mercurial-scm.org/D8785
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 22:46:49 +0200] rev 45233
commitctx: move a tiny else clause above the very long one
This is simple to have all the simple case unfold before the 100+ line one. Otherwise it is hard to relate the `else` to the initial conditionnal.
This is part of a larger refactoring/cleanup of the commitctx code to clarify
and augment the logic gathering metadata useful for copy tracing. The current
code is a tad too long and entangled to make such update easy. We start with
easy and small cleanup.
Differential Revision: https://phab.mercurial-scm.org/D8708
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 22:37:53 +0200] rev 45232
commitctx: consider removed as touched
This achieve the same result with clearer code.
This is part of a larger refactoring/cleanup of the commitctx code to clarify
and augment the logic gathering metadata useful for copy tracing. The current
code is a tad too long and entangled to make such update easy. We start with
easy and small cleanup.
Differential Revision: https://phab.mercurial-scm.org/D8707
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 22:35:34 +0200] rev 45231
commitctx: rename "changed" to touched
The variable contains content that are both added and modified. "changed" could
be confused with "modified" only, so we pick a less ambiguous naming that will
help with more unification.
For example, it would make sense to shove the "removed" item in there since
this is how the variable is used.
This is part of a larger refactoring/cleanup of the commitctx code to clarify
and augment the logic gathering metadata useful for copy tracing. The current
code is a tad too long and entangled to make such update easy. We start with
easy and small cleanup.
Differential Revision: https://phab.mercurial-scm.org/D8706
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Jul 2020 11:16:28 +0200] rev 45230
commitctx: more filesremoved assignment closer to removed computation
A small change that makes the code flow clearer.
This is part of a larger refactoring/cleanup of the commitctx code to clarify
and augment the logic gathering metadata useful for copy tracing. The current
code is a tad too long and entangled to make such update easy. We start with
easy and small cleanup.
Differential Revision: https://phab.mercurial-scm.org/D8704
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 20:03:30 +0200] rev 45229
commitctx: compute files added from _filecommit returns
When possible, lets avoid recomputing the same information again.
This is part of a larger refactoring/cleanup of the commitctx code to clarify
and augment the logic gathering metadata useful for copy tracing. The current
code is a tad too long and entangled to make such update easy. We start with
easy and small cleanup.
Differential Revision: https://phab.mercurial-scm.org/D8703
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 19:35:53 +0200] rev 45228
commitctx: return "touched" status from _filecommit
Instead of mutating a list passed in argument, we simply return the information
from the `_filecommit` function. This make for a cleaner API and allow for
richer information to be returned. That richer information will be used in the
next commit to avoid duplicated computation.
This is part of a larger refactoring/cleanup of the commitctx code to clarify
and augment the logic gathering metadata useful for copy tracing. The current
code is a tad too long and entangled to make such update easy. We start with
easy and small cleanup.
Differential Revision: https://phab.mercurial-scm.org/D8702
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Oct 2020 13:45:56 -0700] rev 45227
tests: fix test-check-module-imports.t broken by D9150
Differential Revision: https://phab.mercurial-scm.org/D9177
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Oct 2020 13:16:14 -0700] rev 45226
tests: make test-convert-git.t work across changed default branch name
Recent git versions default to "main" instead of "master", which
breaks our test.
Differential Revision: https://phab.mercurial-scm.org/D9174
Joerg Sonnenberger <joerg@bec.de> [Mon, 05 Oct 2020 15:08:15 +0200] rev 45225
tests: skip doctests if not running from a hg repo
Differential Revision: https://phab.mercurial-scm.org/D9150
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Oct 2020 19:19:01 +0530] rev 45224
Added signature for changeset 07731064ac41
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Oct 2020 19:18:54 +0530] rev 45223
Added tag 5.5.2 for changeset 07731064ac41
Ludovic Chabant <ludovic@chabant.com> [Tue, 29 Sep 2020 14:38:46 -0700] rev 45222
hgdemandimport: exclude more sqlalchemy modules
We could potentially exclude the entire sqlalchemy library.
Martin von Zweigbergk <martinvonz@google.com> [Wed, 23 Sep 2020 15:36:15 -0700] rev 45221
repoview: don't crash if mergestate points to non-existent node
Differential Revision: https://phab.mercurial-scm.org/D9078
Martin von Zweigbergk <martinvonz@google.com> [Wed, 23 Sep 2020 16:07:14 -0700] rev 45220
tests: demonstrate crash caused by pinning of non-existent mergestate node
If the mergestate somehow contains a reference to a non-existent node,
it causes most commands to crash since aaeccdb6e654 (repoview: pin
revisions for `local` and `other` when a merge is active,
2020-09-04). This patch adds a test showing that.
Differential Revision: https://phab.mercurial-scm.org/D9077
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 18 Sep 2020 12:20:28 +0200] rev 45219
strip: with --keep, consider all revs "removed" from the wcp (issue6270)
The current code was blink to change from other branches when stripping merges
that are ancestors of the working copy parents.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 18 Sep 2020 12:10:12 +0200] rev 45218
test-strip: display more information highlight buggy behavior
When using `hg strip --keep` on a set of changeset that contains a merge, the
set of file considered when rebuilding the dirstate is missing files updated by
changeset that are not directly inside the `new-parent::old-parent` range.
We start with updating the test with new output highlighting the issue.
This issue was spotted because that dirstate inconsistency made the test flaky.
The new command make the test less flaky (but still wrong).
Yuya Nishihara <yuya@tcha.org> [Sun, 13 Sep 2020 15:59:23 +0900] rev 45217
py3: fix formatting of LookupError for workingctx
Spotted while writing broken tests for "hg grep -fr'wdir()'".
basectx._fileinfo() raises ManifestLookupError(self._node, ..), but _node
of the workingctx is None for historical reasons.
Yuya Nishihara <yuya@tcha.org> [Fri, 11 Sep 2020 14:41:05 +0900] rev 45216
log: fix crash and bad filematcher lookup by -fr'wdir()' PATH
"-fr'wdir()' ADDED-PATH" is still wrong, which will be fixed in default
branch.
Augie Fackler <augie@google.com> [Wed, 09 Sep 2020 14:48:55 -0400] rev 45215
hgdemandimport: bypass demandimport for _ast module (issue6407)
This is broken on Python 3.9rc1, and while it sounds like there may be
a fix in Python, we probably also should have this workaround in place
in hg. See the bug for more details (including on bugs at redhat and
b.p.o).
Differential Revision: https://phab.mercurial-scm.org/D9004
Matt Harbison <matt_harbison@yahoo.com> [Fri, 04 Sep 2020 15:21:02 -0400] rev 45214
repoview: pin revisions for `local` and `other` when a merge is active
I've hit this a couple of times, where pulling with a dirty `wdir` obsoletes
`p1` and updating to the successor results in merge conflicts. The problem was
resolving them failed immediately, complaining that the old checkout was
filtered.
The change in `test-rebase-obsolete.t` is because there's an outstanding merge
conflict in a rebase operation. The summary prompt to merge seems incorrect for
this scenario, but that's an existing issue.
Differential Revision: https://phab.mercurial-scm.org/D8980
Harald Klimach <harald@klimachs.de> [Wed, 02 Sep 2020 12:31:37 +0200] rev 45213
hgweb: compatibility of hgweb.cgi template with Python 3
When running Mercurial on Python 3 hgweb expects the config variable to be a
bytestring.
The solution proposed by Anton Shestakov is to use a byteprefix to the literal
string defined cgi script as provided in this patch for hgweb.cgi,
contrib/hgweb.fcgi and contrib/hgweb.wsgi.
I am not sure whether this covers all relevant templates, but I couldn't find
others.
Differential Revision: https://phab.mercurial-scm.org/D8978
Augie Fackler <augie@google.com> [Tue, 01 Sep 2020 10:33:10 -0400] rev 45212
genosxversion: don't give up if we can't find a path to hg libraries
This doesn't work if you have a PyOxidized hg on $PATH, but everything
is fine if you just ignore that problem.
Differential Revision: https://phab.mercurial-scm.org/D8975
Manuel Jacob <me@manueljacob.de> [Wed, 02 Sep 2020 01:30:56 +0200] rev 45211
tests: fix test-demandimport.py on Python 3.9
Starting with Python 3.9, importing importlib.resources (indirectly) imports
the zipfile module. Therefore, the module is not suitable for the test.
Instead, we can use the ftplib module, which is very unlikely to be imported
during the test run.
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 01 Sep 2020 16:27:25 +0530] rev 45210
Added signature for changeset f62bb5d07848
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 01 Sep 2020 16:27:18 +0530] rev 45209
Added tag 5.5.1 for changeset f62bb5d07848
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Aug 2020 09:06:35 +0200] rev 45208
test: add `test-repo` requirement to `test-check-format` (issue6395)
Kindly reported by Tristan Seligmann <mithrandi@mithrandi.net>
Cédric Krier <ced@b2ck.com> [Sun, 02 Aug 2020 17:40:35 +0200] rev 45207
keepalive: Do not append _rbuf if _raw_readinto exists (issue6356)
The readline method append to the chunks the content of the _rbuf then there
is a loop that call _raw_read which on Python3 call readinto. But the readinto
version in mercurial append again the _rbuf content. So this creates the
duplicate content. This does not happen in Python2 because _raw_read does not
call readinto.
Differential Revision: https://phab.mercurial-scm.org/D8859
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 23:13:58 +0530] rev 45206
Added signature for changeset 7fc3c5fbc65f
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 03 Aug 2020 23:13:52 +0530] rev 45205
Added tag 5.5 for changeset 7fc3c5fbc65f
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 01 Aug 2020 18:39:28 +0530] rev 45204
mergestate: fix BC breakage introduced because of removal of a merge record
In fcd0cff3400a I removed the usage of RECORD_RESOLVED_OTHER. However I also
removed the reading support, hence if there is any user who runs into merge
conflict with older version of hg, upgrades hg and then tries to read
mergestate, they will end up with an MergeRecordUnsupportedError.