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
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Sep 2020 10:55:30 +0200] rev 45638
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 45637
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 45636
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
Raphaël Gomès <rgomes@octobus.net> [Mon, 05 Oct 2020 10:33:52 +0200] rev 45635
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 45634
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 45633
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 45632
branching: merge with stable
Yuya Nishihara <yuya@tcha.org> [Thu, 10 Sep 2020 17:44:34 +0900] rev 45631
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 45630
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 45629
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 45628
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.