Yuya Nishihara <yuya@tcha.org> [Wed, 09 Sep 2020 16:00:03 +0900] rev 45698
grep: move getbody() to grepsearcher class
Yuya Nishihara <yuya@tcha.org> [Wed, 09 Sep 2020 15:56:40 +0900] rev 45697
grep: add stub class that maintains cache and states of grep operation
Prepares for extracting stateful functions from commands.grep().
Yuya Nishihara <yuya@tcha.org> [Wed, 09 Sep 2020 15:23:49 +0900] rev 45696
grep: move match and diff logic to new module
commands.grep() has lots of functions and classes. Let's split it into
reusable components so we can leverage them to implement a revset predicate
for 'hg grep --diff'. I want to do 'hg log -r "diff(pattern)"'.
Yuya Nishihara <yuya@tcha.org> [Wed, 09 Sep 2020 15:17:26 +0900] rev 45695
grep: explicitly pass regexp to closure functions
These functions will be extracted to new module.
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 08 Oct 2020 17:29:51 +0530] rev 45694
upgrade: improve documentation of matchrevlog()
It was not clear what selected for cloning meant. I updated with an extra line
of description.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 09 Oct 2020 09:46:03 -0700] rev 45693
automation: support running against Python 3.9
We just added CPython 3.9.0 to the automation environment. Let's
support actions targeting it.
One side-effect of this change is that we'll produce Windows wheels
for Python 3.9 by default. This is desirable.
Differential Revision: https://phab.mercurial-scm.org/D9189
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 09 Oct 2020 09:22:59 -0700] rev 45692
automation: upgrade packages in Linux environment
It's been a while since we've ran `pip-compile -U`. Let's do that.
When I ran this command, black was upgraded and newer versions of
black complains about formatting differences. I didn't feel like
shaving a yak, so I pinned the current black version to avoid
churn.
I manually ran tests against all major Python versions and I'm fairly
certain no new test failures were introduced.
Differential Revision: https://phab.mercurial-scm.org/D9188
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Oct 2020 18:17:20 -0700] rev 45691
packaging: upgrade packages in Windows environment
I ran `pip-compile -U` to update all packages to latest versions.
I did this so the Windows environment is more modern.
dulwich 0.20 dropped support for Python 2.7. Rather than add
yet another requirements.txt file, I decided to just pin at an
older release to minimize complexity.
Differential Revision: https://phab.mercurial-scm.org/D9187
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Oct 2020 18:07:34 -0700] rev 45690
contrib: install Python 3.9.0
We update the Windows and Linux environments to install CPython 3.9.0,
which was released a few days ago.
Differential Revision: https://phab.mercurial-scm.org/D9186
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Oct 2020 18:02:47 -0700] rev 45689
contrib: stop installing Python 3.5 and 3.6 in Windows environment
We're only publishing Python 3.7+ wheels and other builds on Windows.
Python 3.5 and 3.6 are not supported on this platform. Let's stop
installing them in the development environment.
Differential Revision: https://phab.mercurial-scm.org/D9185
Martin von Zweigbergk <martinvonz@google.com> [Fri, 09 Oct 2020 09:17:47 -0700] rev 45688
py3: convert an exception message to bytes
One of our users ran into this (unrelated to my recent work on
more specific errors).
Differential Revision: https://phab.mercurial-scm.org/D9184
Martin von Zweigbergk <martinvonz@google.com> [Fri, 09 Oct 2020 08:08:54 -0700] rev 45687
tests: fix test-url.py on py3, broken by D9179
Differential Revision: https://phab.mercurial-scm.org/D9180
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Oct 2020 16:14:06 +0200] rev 45686
revset: add a `node` key for sorting
Sorting by node give an arbitrary, but stable order which is useful for
sampling.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 Oct 2020 22:32:41 -0700] rev 45685
pyoxidizer: produce working Python 3 Windows installers (issue6366)
While we've had code to produce Python 3 Windows installers with
PyOxidizer, we haven't been advertising them on the web site due to
a bug in making TLS connections and issues around resource handling.
This commit upgrades our PyOxidizer install and configuration to
use a recent Git commit of PyOxidizer. This new version of PyOxidizer
contains a *ton* of changes, improvements, and bug fixes. Notably,
Windows shared distributions now mostly "just work" and the TLS bug
and random problems with Python extension modules in the standard
library go away. And Python has been upgraded from 3.7 to 3.8.6.
The price we pay for this upgrade is a ton of backwards incompatible
changes to Starlark.
I applied this commit (the overall series actually) on stable to
produce Windows installers for Mercurial 5.5.2, which I published
shortly before submitting this commit for review.
In order to get the stable branch working, I decided to take a
less aggressive approach to Python resource management. Previously,
we were attempting to load all Python modules from memory and were
performing some hacks to copy Mercurial's non-module resources
into additional directories in Starlark. This commit implements
a resource callback function in Starlark (a new feature since
PyOxidizer 0.7) to dynamically assign standard library resources
to in-memory loading and all other resources to filesystem loading.
This means that Mercurial's files and all the other packages we ship
in the Windows installers (e.g. certifi and pygments) are loaded
from the filesystem instead of from memory. This avoids issues
due to lack of __file__ and enables us to ship a working Python
3 installer on Windows.
The end state of the install layout after this patch is not
ideal for @: we still copy resource files like templates and
help text to directories next to the hg.exe executable. There
is code in @ to use importlib.resources to load these files and
we could likely remove these copies once this lands on @. But for
now, the install layout mimics what we've shipped for seemingly
forever and is backwards compatible. It allows us to achieve the
milestone of working Python 3 Windows installers and gets us a
giant step closer to deleting Python 2.
Differential Revision: https://phab.mercurial-scm.org/D9148
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Oct 2020 13:19:18 -0700] rev 45684
tests: set git config using `git config` for simplicity
I also took the liberty to not set the same config value twice as we
did before.
Differential Revision: https://phab.mercurial-scm.org/D9176
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Oct 2020 13:10:16 -0700] rev 45683
tests: use `git init` instead of unusual synonym `git init-db`
I had never heard of `git init-db` until I saw our tests.
Differential Revision: https://phab.mercurial-scm.org/D9175
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Oct 2020 13:37:31 -0700] rev 45682
errors: name arguments to Abort constructor
Differential Revision: https://phab.mercurial-scm.org/D9179
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Oct 2020 15:35:44 -0700] rev 45681
errors: stop passing non-strings to Abort's constructor
The next patch will change `Abort`'s constructor and `__bytes__`
functions and they will start assuming that the first argument is the
messages as `bytes`.
Differential Revision: https://phab.mercurial-scm.org/D9178
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Oct 2020 21:06:18 -0700] rev 45680
errors: name arguments to UnknownCommand constructor
Differential Revision: https://phab.mercurial-scm.org/D9166
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Oct 2020 20:45:52 -0700] rev 45679
errors: name arguments to AmbiguousCommand constructor
Differential Revision: https://phab.mercurial-scm.org/D9165
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Oct 2020 20:37:35 -0700] rev 45678
errors: name arguments to CommandError constructor
Because readability counts.
Differential Revision: https://phab.mercurial-scm.org/D9164
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Oct 2020 21:52:27 -0700] rev 45677
errors: move UnknownCommand and AmbiguousCommand near CommandError
They seem closely related.
Differential Revision: https://phab.mercurial-scm.org/D9163
Aay Jay Chan <aayjaychan@itopia.com.hk> [Wed, 07 Oct 2020 00:45:41 +0800] rev 45676
templatekw: make {successorssets} always return a list (issue6342)
Previously, {successorssets} returns an empty string instead of an empty list
for a non-obsolete changeset. The changing type of the JSON output makes it
hard to consume from statically-typed languages.
Differential Revision: https://phab.mercurial-scm.org/D9158
Aay Jay Chan <aayjaychan@itopia.com.hk> [Wed, 07 Oct 2020 00:39:52 +0800] rev 45675
tests: test output of {predecessors}, {successorssets} for non-obsolete csets
Differential Revision: https://phab.mercurial-scm.org/D9157
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Oct 2020 23:19:01 -0700] rev 45674
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 01 Oct 2020 09:45:00 +0200] rev 45673
copies: move `merged` testing sooner
previously `is_merged` was an expensive callback. Now that all this data is
pre-computed, this is is a simple membership testing.
So it is probably cheaper than the membership testing.
Differential Revision: https://phab.mercurial-scm.org/D9141
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 01 Oct 2020 09:42:39 +0200] rev 45672
copies: return None instead of ChangingFiles when relevant
If they are not relevant data, they are no need to fetch them.
Differential Revision: https://phab.mercurial-scm.org/D9140
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 01 Oct 2020 09:29:49 +0200] rev 45671
copies: add a HASCOPIESINFO flag to highlight rev with useful data
If some files changes that may impact copy tracing are detected, we set this
flag. This helps the copy tracing algorithm to skip fetching possibly expensive
data when unnecessary.
Differential Revision: https://phab.mercurial-scm.org/D9139
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 16 Sep 2020 21:00:02 +0200] rev 45670
salvaged: properly deal with salvaged file during copy tracing
When salvaged files are encountered, the removal have been reverted and we
should keep the rename information from the other side.
The conditional was starting to be quite hairy, so we spell it out in multiple
elif case for readability.
This fixes the associated test cases introduced a while back. The changeset centric copy tracing is now (known) bug free.
Differential Revision: https://phab.mercurial-scm.org/D9130
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Sep 2020 10:55:17 +0200] rev 45669
salvaged: persist the salvaged set on disk
With the new side data storage, this is trivial.
Differential Revision: https://phab.mercurial-scm.org/D9129
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 29 Sep 2020 22:47:54 +0200] rev 45668
changing-files: add clean computation of changed file for merges
This is "a tad more complicated" than the previous cases. See inline
documentation for details (have fun).
Differential Revision: https://phab.mercurial-scm.org/D9128
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 29 Sep 2020 22:46:29 +0200] rev 45667
changing-files: add clean computation of changed files for linear changesets
The `files` field is not reliable, so we need to compute things from scratch. We
deal with the second simplest case, linear changesets. We diff the current
manifest with the parent manifest. This reveal the file added, changed and
removed.
Differential Revision: https://phab.mercurial-scm.org/D9127
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 29 Sep 2020 22:38:08 +0200] rev 45666
changing-files: add clean computation of changed files for roots
The `files` field is not reliable, so we need to compute things from scratch. We
start with the simplest case root changesets. In the beginning they was nothing,
then user said "let there be files" and there were added files.
Differential Revision: https://phab.mercurial-scm.org/D9126
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 30 Sep 2020 09:21:33 +0200] rev 45665
changing-files: add a debug command display changed files
The binary output from sidedata is useful to verify the underlying data do not
get corrupted. However having a human readable version is much simpler for
debuging the changed files data itself.
So we add a debug command to dump this information and we use it in the tests.
Differential Revision: https://phab.mercurial-scm.org/D9125
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 29 Sep 2020 23:16:09 +0200] rev 45664
side-data: add a test to check sidedata upgrade
We want to make sure that sidedata computed at commit time and during upgrade
are the same. To do so, we upgrade the repository in `test-copies-chain-merge.t`
since the file is checking all the special case that we need to catch. The
sidedata content in both case should be the same.
Differential Revision: https://phab.mercurial-scm.org/D9124
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 29 Sep 2020 22:19:46 +0200] rev 45663
changing-files: split the changing files computation from encoding
The side data encoding is already in its own function, now we move the changing
files computation in it own function, it will receive more updates in the
coming changesets.
Differential Revision: https://phab.mercurial-scm.org/D9123
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 14 Sep 2020 23:47:42 +0200] rev 45662
salvaged: record salvaged in ChangingFiles at commit time
The new code is a simple but effective way to detect this information. We might
be able to move it inside the various conditionnal above, but I want to focus
on simplicity until we have a full working stack.
It is worth noting that if we record the information in the ChangingFiles
object, it is not persisted yet. This will comes with later changesets.
Differential Revision: https://phab.mercurial-scm.org/D9120
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 14 Sep 2020 23:46:38 +0200] rev 45661
salvaged: track removal-candidates in more cases
If we want to use this information for copy tracing, then we need to be able to
record it.
First we unlock the recording of deletion candidates, and we will actually record
the data in the next changeset.
Differential Revision: https://phab.mercurial-scm.org/D9119
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 30 Sep 2020 12:46:49 +0200] rev 45660
salvaged: explicitly skip salvaged file while encoding
This is a temporary measure to avoid diverging test cases (between commit time
sidedata and upgraded sidedata) while we implement salvaged tracking in the
different cases. This will be dropped soon.
Differential Revision: https://phab.mercurial-scm.org/D9122
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 14 Sep 2020 23:46:21 +0200] rev 45659
changing-files: add a "salvaged" set to track file that were not removed
We need this set for the copy tracing algorithm. See documentation for details
about this set.
Differential Revision: https://phab.mercurial-scm.org/D9118
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Oct 2020 23:14:41 -0700] rev 45658
tests: back out accidentally queued changeset 0627cd03b1e9
I accidentally queued other people's patches on top of my own and
pushed mine along with theirs.
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Oct 2020 15:23:10 -0700] rev 45657
tests: update test-copies-chain-merge.t to not use empty files
Merging empty files is not very interesting or realistic.
Raphaël Gomès <rgomes@octobus.net> [Thu, 08 Oct 2020 10:07:19 +0200] rev 45656
tests: only diff the `Cargo.lock` in `test-check-cargo-lock.t`
While not perfect (you could be running tests while developing with a justified
modification to `Cargo.lock`), that use-case is small enough that I don't think
it's really going to be an issue.
This stops the test from failing for unrelated changes when running it locally.
Differential Revision: https://phab.mercurial-scm.org/D9170
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 07 Oct 2020 13:24:03 +0530] rev 45655
tests: update/remove outdated comments in test-copies-chain-merge.t
1b8fd4af3318 fixed the test case but missed updating the comments mentioning the
bug. Thanks for @martinvonz who spotted these outdated comments.
Differential Revision: https://phab.mercurial-scm.org/D9168
Yuya Nishihara <yuya@tcha.org> [Mon, 21 Sep 2020 12:36:17 +0900] rev 45654
churn: leverage logcmdutil to filter revisions by --date
Yuya Nishihara <yuya@tcha.org> [Thu, 10 Sep 2020 18:57:31 +0900] rev 45653
cmdutil: remove remainder of old walkchangerevs() implementation
Yuya Nishihara <yuya@tcha.org> [Thu, 10 Sep 2020 18:01:43 +0900] rev 45652
cmdutil: rewrite walkchangerevs() by using logcmdutil functions
cmdutil.walkchangerevs() now takes (revs, makefilematcher) in place of
(match, opts), and only provides the "windowing" functionality. Unused
classes and functions will be removed by the next patch.
"hg grep --follow" (--all-files) is still broken since there is no logic
to follow copies while traversing changelog, but at least, it does follow
the DAG.
Yuya Nishihara <yuya@tcha.org> [Thu, 10 Sep 2020 17:14:03 +0900] rev 45651
grep: filter target files by matcher
Prepares for the migration to logcmdutil's logic, where cmdutil.walkchangerevs()
won't always build an exact set of paths to be scanned.
Yuya Nishihara <yuya@tcha.org> [Thu, 10 Sep 2020 16:14:48 +0900] rev 45650
cmdutil: make walkchangerevs() call prepare with matcher instead of filenames
Prepares for migrating walkchangerevs() to logcmdutil's logic, which provides
matcher-based interface.
Yuya Nishihara <yuya@tcha.org> [Thu, 10 Sep 2020 18:40:01 +0900] rev 45649
grep: add option for logcmdutil.makewalker() to not filter revs by file pats
This is needed to implement "grep --all-files".
Raphaël Gomès <rgomes@octobus.net> [Thu, 01 Oct 2020 09:48:41 +0200] rev 45648
rust-parsers: use in-place mutation instead of allocating a new `Vec`
This is not done for the `dirstate-tree` feature, since it lacks `iter_mut`.
Differential Revision: https://phab.mercurial-scm.org/D9136
Joerg Sonnenberger <joerg@bec.de> [Tue, 06 Oct 2020 02:21:14 +0200] rev 45647
revlog: pre-compute null revlog item for pure version
The dynamically created tuple shows up in memory profiles and the use of
nullid prevents the normal constant building to work.
Differential Revision: https://phab.mercurial-scm.org/D9154
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 Oct 2020 22:17:52 -0700] rev 45646
packaging: normalize - to _ in WiX Id values
- is not a valid identifier character in WiX Ids. So let's
normalize accordingly.
I discovered this issue after a subsequent change which introduces
a directory with a - in its name.
Differential Revision: https://phab.mercurial-scm.org/D9147
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Oct 2020 14:44:11 -0700] rev 45645
contrib: install Rust 1.46.0
Let's use the latest/greatest version of Rust in the automation
environment.
Differential Revision: https://phab.mercurial-scm.org/D9146
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Oct 2020 19:52:52 -0700] rev 45644
contrib: install latest versions of Python
Let's keep our build environment modern.
We upgrade 3.5-3.8 on Linux. Just 3.7 and 3.8 on Windows because we
don't use <3.7 on Windows.
Differential Revision: https://phab.mercurial-scm.org/D9145
Ludovic Chabant <ludovic@chabant.com> [Wed, 30 Sep 2020 00:33:53 -0700] rev 45643
help: extract logic for listing commands and topics
Differential Revision: https://phab.mercurial-scm.org/D9134
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 25 Sep 2020 15:05:08 +0200] rev 45642
copies: directly pass a changes object to the copy tracing code
The object contains all the data we need. For example, the `is_merged` callback
can now use the associated precomputed data.
This will be useful again soon when the `salvaged` set will be introduce to
solve the issue with delete file reverted during a merge. See 4b582a93316a and
14be07d5603c for details.
Differential Revision: https://phab.mercurial-scm.org/D9117
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 25 Sep 2020 14:54:43 +0200] rev 45641
copies: no longer change the sidedata flag
With the new sidedata storage that include data about all file changes, every
revision has one, so the sidedata flag is not longer a good way to spot
changeset with copy information. So we drop this check to simplify the code
We optimisation itself provided an interesting speedup, so we will likely
reintroduce something similar, with a dedicated flag, in the future.
Differential Revision: https://phab.mercurial-scm.org/D9116
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 25 Sep 2020 14:52:34 +0200] rev 45640
copies: use dedicated `_revinfo_getter` function and call
We want to return data in a different form, so we need different revinfo
function. At that point it make sense to have different getter.
Differential Revision: https://phab.mercurial-scm.org/D9115
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 25 Sep 2020 14:39:04 +0200] rev 45639
copies: make two version of the changeset centric algorithm
They are two main ways to run the changeset-centric copy-tracing algorithm. One
fed from data stored in side-data and still in development, and one based on
data stored in extra (with a "compatibility" mode).
The `extra` based is used in production at Google, but still experimental in
code. It is mostly unsuitable for other users because it affects the hash.
The side-data based storage and algorithm have been evolving to store more data, cover more cases
(mostly around merge, that Google do not really care about) and use lower level
storage for efficiency.
All this changes make is increasingly hard to maintain de common code base,
without impacting code complexity and performance. For example, the
compatibility mode requires to keep things at different level than what we
need for side-data.
So, I am duplicating the involved functions. The newly added `_extra` variants
will be kept as today, while I will do some deeper rework of the side data
versions.
Long terms, the side-data version should be more featureful and performant than
the extra based version, so I expect the duplicated `_extra` functions to
eventually get dropped.
Differential Revision: https://phab.mercurial-scm.org/D9114