Ludovic Chabant <ludovic@chabant.com> [Wed, 30 Sep 2020 00:33:53 -0700] rev 45641
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 45640
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 45639
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 45638
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 45637
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
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Sep 2020 10:55:30 +0200] rev 45636
changing-files: retrieve changelogrevision.files from the sidedata block
The `files` field is know to have issue, using a list with fixed, and fixable,
computation can only help. For example, using a fixes `files` field would be
enough to fix
issue6219 once this feature get usable in production.
We focus on having thing working for now, we will deal with performance later.
Right now we have a ironic situation were we parse sorted value from disk to
turn them into a set and then having to sort it again.
Differential Revision: https://phab.mercurial-scm.org/D9092
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Sep 2020 10:49:50 +0200] rev 45635
changing-files: drop the now useless changelogrevision argument
Since all filename are now included in the sidedata block, we no longer need to decode the `files` from the revision.
Differential Revision: https://phab.mercurial-scm.org/D9091
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Sep 2020 10:55:17 +0200] rev 45634
changing-files: rework the way we store changed files in side-data
We need to store new data so this is a good opportunity to rework this fully.
1) We directly store the list of affected file in the side data:
* This avoid having to fetch and parse the `files` list in the revision in
addition to the sidedata. Making the data more self sufficient.
* This work around situation where that `files` field contains wrong
information, and open the way to other bug fixing (eg:
issue6219)
* The format (fixed initial index, sorted files) allow for fast lookup of
filename within the structure.
* This unify the storage of affected files and copies sources and destination,
limiting the number filename stored redundantly.
* This prepare for the fact we should drop the `files` as soon as we do any
change affecting the revision schema.
* This rely on compression to avoid a significant increase of the changelog.d.
More testing on this will be done before we freeze the final format.
2) We can store additional data:
* The new "merged" field,
* A future "salvaged" set recording files that might have been deleted but have
were still present in the final result.
Differential Revision: https://phab.mercurial-scm.org/D9090
Joerg Sonnenberger <joerg@bec.de> [Mon, 05 Oct 2020 15:08:15 +0200] rev 45633
tests: skip doctests if not running from a hg repo
Differential Revision: https://phab.mercurial-scm.org/D9150
Raphaël Gomès <rgomes@octobus.net> [Mon, 05 Oct 2020 10:33:52 +0200] rev 45632
py3: use native string when comparing with a function's argspec
I only found two such bugs in `contrib/perf.py`
Differential Revision: https://phab.mercurial-scm.org/D9149
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 02 Oct 2020 10:29:22 +0200] rev 45631
test: try to unflaky test-profile.t
That test rely on timing measurement, because it is about timing measurement. We
try to filter out the most common source of flakyness (slow disk stating)
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Oct 2020 18:40:39 +0530] rev 45630
merge: check for conflicting actions irrespective of length of bids
We should for whether bids contain a combination of actions which conflict with
each other. Since right now we only have couple of such combination, and
combinations also consist of two actions, we were checking for them only when
length of bids is 2. Let's check that irrespective of the length of bids.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 02 Oct 2020 07:56:01 -0700] rev 45629
branching: merge with stable
Yuya Nishihara <yuya@tcha.org> [Thu, 10 Sep 2020 17:44:34 +0900] rev 45628
log: extract function that builds (revs, makefilematcher) from walkopts
"hg grep" and "hg churn" will use this interface.
Yuya Nishihara <yuya@tcha.org> [Sat, 12 Sep 2020 22:42:58 +0900] rev 45627
log: move --graph and topo sort options to walkopts
This is the last opts.get() found in getrevs(). It might be better to define
an enum, but for now, it is just a string.
Yuya Nishihara <yuya@tcha.org> [Sat, 12 Sep 2020 22:03:53 +0900] rev 45626
log: move miscellaneous filter/matcher options to walkopts
Maybe this is the most uninteresting patch. I want to remove the dependency
on untyped/unlabeled opts dict at all.
I thought --no-merges and --only-merges could be merged into a single enum
value, but actually they both can be set to filter out everything.
Yuya Nishihara <yuya@tcha.org> [Sat, 12 Sep 2020 21:54:58 +0900] rev 45625
log: map --removed to walkopts.force_changelog_traversal
This is the flag to forcibly enable the slowpath. I'm not sure if the
slowpath parameter should be merged with this flag, so let's keep it as
an immutable flag for now.
I'll add another flag to support "grep --all-files". These two will be the
flags which aren't directly mapped from the command-line options.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 25 Sep 2020 14:33:05 +0200] rev 45624
copies: rename some function to the new naming scheme
We are about to introduce more function and more variants, it seems better to
align everything on the new scheme, allowing `_` for clarify. We do this aligned
in a dedicated changeset to make the next changesets simpler.
Differential Revision: https://phab.mercurial-scm.org/D9113
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 28 Sep 2020 12:26:09 +0200] rev 45623
changing-files: cache the various property
We are going to start using them more having some basic caching would be good.
The focus is not about performance yet, however avoid some easy N² trap seems
reasonable.
Differential Revision: https://phab.mercurial-scm.org/D9112
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 25 Sep 2020 14:16:35 +0200] rev 45622
changing-files: always use `mark_touched` to update the touched set
We use this function internally too because that will make cache invalidation
simpler.
Differential Revision: https://phab.mercurial-scm.org/D9111
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 02 Oct 2020 08:57:43 +0200] rev 45621
changing-files: fix docstring
As pointed by Pulkit Goyal.
Differential Revision: https://phab.mercurial-scm.org/D9143
Martin von Zweigbergk <martinvonz@google.com> [Thu, 01 Oct 2020 09:09:35 -0700] rev 45620
rust: move rustfmt.toml to repo root so it can be used by `hg fix`
`hg fix` runs the formatters from the repo root so it doesn't pick up
the `rustfmt.toml` configs we had in each the `hg-core`, `hg-cpython`,
and `rhg` packages, which resulted in warnings about `async fn` not
existing in Rust 2015. This patch moves the `rustfmt.toml` file to the
root so `hg fix` will use it.
By putting the `rustfmt.toml` file in a higher-level directory, it
also applies to the `chg` and `hgcli` packages. That makes
`test-check-rust-format.t` fail, so this patch also applies the new
formatting rules to those packages.
Differential Revision: https://phab.mercurial-scm.org/D9142
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 30 Sep 2020 18:07:21 +0530] rev 45619
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
ACTION_KEEP_NEW and ACTION_CHANGED_DELETED are conflicting actions as one says
that file is new while other says that file was present earlier and has
changed-delete conflicts.
Let's do changed-delete which will lead to conflicts and make user choose the
right way.
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 30 Sep 2020 17:51:40 +0530] rev 45618
tests: fix a typo in `desc()` revset in test-merge-criss-cross.t
I was looking into fixing the broken behavior only to find out that we had a
typo in the commit message and merge was not performed.
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 30 Sep 2020 15:46:54 +0530] rev 45617
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
ACTION_GET represents that either the file is created on remote or it's newer on
the remote side. However, since we have a ACTION_DELETE_CHANGED too, it means
the file is not present locally and ACTION_GET is representing that file was
created on remote.
Having both ACTION_GET and ACTION_DELETED_CHANGED is conflicting because one
says that file was created on remote and other says file has delete-changed
conflicts.
Let's choose ACTION_DELETED_CHANGED which will result in conflicts and make user
choose the right way forward.
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 30 Sep 2020 15:09:25 +0530] rev 45616
tests: add newfilenode test case in test-merge-changedelete.t
Raphaël Gomès <rgomes@octobus.net> [Thu, 01 Oct 2020 09:49:33 +0200] rev 45615
rust: leverage improved match ergonomics
Differential Revision: https://phab.mercurial-scm.org/D9137
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Sep 2020 15:08:02 +0200] rev 45614
rust: update minimum supported Rust compiler version
Debian stable backported `rustc 1.41.1` for a Firefox release that needed it,
so we can finally update the compiler version to something that isn't more than
a year old.
This means that (among other things [1]), `async await` syntax is usable!
Differential Revision: https://phab.mercurial-scm.org/D9138
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 25 Sep 2020 11:29:19 +0200] rev 45613
changing-files: add a utility to compute the merged files post-commit
We will need it in `_getsidedata` as soon as we start persisting that set.
Differential Revision: https://phab.mercurial-scm.org/D9089
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 25 Sep 2020 02:01:32 +0200] rev 45612
changing-files: record merged files at commit time
The data is easy to gather at commit time, and we need it for changeset centric
copy tracing. Right now, it is not persisted so we cannot use it. However we
will fix this part very soon, gathering something to persist was necessary
first.
Differential Revision: https://phab.mercurial-scm.org/D9088
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 24 Sep 2020 09:50:09 +0200] rev 45611
changing-files: add the ability to track merged files too
The set of merged files is used when doing changeset centric copy tracing (cf
`is_merged` in `mercurial/copies.py`. So tracking (and persisting) this set will
be useful. We start with adding the attribute on the new object.
Differential Revision: https://phab.mercurial-scm.org/D9087
Raphaël Gomès <rgomes@octobus.net> [Wed, 30 Sep 2020 18:10:29 +0200] rev 45610
rust: start plugging the dirstate tree behind a feature gate
The previous patch added the `dirstate-tree` feature gate to enable the two
dirstate implementations to co-habit while the tree-based one gets better.
This patch copies over the code that differs, be it because the algorithm
changed or because the borrowing rules are different.
Indeed, `DirstateTree` is not observationally equivalent to the std `HashMap` in
the APIs we use: it does not have the `Entry` API (yet?) and its iterator
returns owned values instead of references. This last point is because the
implementation needs to be changed to a more clever and efficient solution.
Differential Revision: https://phab.mercurial-scm.org/D9133
Raphaël Gomès <rgomes@octobus.net> [Wed, 30 Sep 2020 18:10:53 +0200] rev 45609
rust: introduce `dirstate-tree` cargo feature
This feature gates (at compile-time) the use of the newly-added dirstate tree.
The motivation for this is that the dirstate tree is currently *very* slow;
replacing the current hashmap-based dirstate is not a viable solution in terms
of performance... and why would you be using the Rust implementation if not
for performance?
The feature will also help reviewers better understand the differences that
will slowly appear as the dirstate tree gets better.
Differential Revision: https://phab.mercurial-scm.org/D9132
Raphaël Gomès <rgomes@octobus.net> [Wed, 30 Sep 2020 18:23:43 +0200] rev 45608
rust: fix formatting
Maybe there is a small divergence in the nightly formatter? This didn't seem to
trip the CI.
Differential Revision: https://phab.mercurial-scm.org/D9131
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Sep 2020 10:02:16 +0200] rev 45607
rust-matchers: make `Matcher` trait object-safe
Before this patch, it is not possible to create a `Matcher` trait-object (like
`Box<dyn Matcher>`), because of the use of a generic parameters in some methods,
namely `impl AsRef<HgPath>`.
While this makes the interface less flexible for callers in theory, it does not
change anything in the current codebase.
Until something like [1] is implemented, this is a "tradeoff" that we need to
make anyway.
[1] https://internals.rust-lang.org/t/pre-rfc-expand-object-safety/12693
Differential Revision: https://phab.mercurial-scm.org/D9071
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Sep 2020 14:07:00 +0200] rev 45606
rust: clippy pass
This removes some justified warnings and one hard error that, while technically
not a bug, was an ugly oversight on my part.
Differential Revision: https://phab.mercurial-scm.org/D9094
Martin von Zweigbergk <martinvonz@google.com> [Mon, 28 Sep 2020 08:07:09 -0700] rev 45605
updaterepo: add deprecation warning
We just moved all in-tree callers off of the function, but we're
leaving it here for a bit to help extension writers.
Differential Revision: https://phab.mercurial-scm.org/D9110
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 16:54:35 +0200] rev 45604
rhg: use `.or(Err(Error))` not `.map_err(|_| Error)` (D9100#inline-15067)
Differential Revision: https://phab.mercurial-scm.org/D9109
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 16:52:35 +0200] rev 45603
hg-core: use `.or(Err(Error))` not `.map_err(|_| Error)` (D9100#inline-15067)
Differential Revision: https://phab.mercurial-scm.org/D9108
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 15:21:56 +0200] rev 45602
hg-core: return Err if `offset != bytes.len()`
(D8958#inline-14994 followup 2/2)
[X] make `Index` owner of its bytes
[X] make `Index::new` return an error if `offset != bytes.len()`
Differential Revision: https://phab.mercurial-scm.org/D9107
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 15:13:51 +0200] rev 45601
hg-core: make `Index` owner of its bytes (D8958#inline-14994 followup 1/2)
Prevent building `Index` every time it is needed. It was a bad idea anyway.
When `Index::new` will return `Result` it will avoid things like `Revlog::len`
returning `Result<usize>` instead of `usize`.
[X] make `Index` owner of its bytes
[ ] make `Index::new` return an error if `offset != bytes.len()`
Differential Revision: https://phab.mercurial-scm.org/D9106
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 14:33:52 +0200] rev 45600
hg-core: renaming of `Chunk` offset methods (D8958#inline-15002 followup)
Differential Revision: https://phab.mercurial-scm.org/D9105
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 14:31:58 +0200] rev 45599
hg-core: minor rewording in docstring (D8958#inline-15005 followup)
Differential Revision: https://phab.mercurial-scm.org/D9104
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 14:29:05 +0200] rev 45598
hg-core: use anonymous lifetime for `impl Chunk` (D8958#inline-15003 followup)
Differential Revision: https://phab.mercurial-scm.org/D9103
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 14:27:04 +0200] rev 45597
hg-core: use `u32` instead of `i32` in `Chunk` (D8958#inline-15001 followup)
Differential Revision: https://phab.mercurial-scm.org/D9102
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 14:16:31 +0200] rev 45596
hg-core: use the term `chunk` instead of `frag` (D8958#inline-15000 followup)
Differential Revision: https://phab.mercurial-scm.org/D9101
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 14:06:23 +0200] rev 45595
hg-core: return `Err` on decompression error (D8958#inline-15004 followup)
Differential Revision: https://phab.mercurial-scm.org/D9100
Antoine cezar<acezar@chwitlabs.fr> [Mon, 28 Sep 2020 14:01:57 +0200] rev 45594
hg-core: remove useless code (D8958#inline-14988 followup)
Differential Revision: https://phab.mercurial-scm.org/D9099