Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Jan 2021 17:32:08 -0800] rev 46225
tests: make test-subrepo-git.t compatible with git's master->main rename
Git is about to change the default branch from "master" to
"main". Recent versions has started warning about that, which makes
tests fail. I assume the tests would fail in a different way once the
default has changed. To make us compatible with that name change,
let's set configure the default to be "master". That value makes the
tests still work on older Git version (those where the default branch
name is not configurable).
Differential Revision: https://phab.mercurial-scm.org/D9746
Jun Wu <quark@fb.com> [Tue, 12 Jan 2021 14:45:32 -0800] rev 46224
revlog: use size_t for nodetree capacity
This allows handling revlog containing more than
33554432 (INT_MAX /
sizeof(nodetreenode)) revisions on x64 platforms.
Differential Revision: https://phab.mercurial-scm.org/D9745
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 08 Jan 2021 22:38:33 +0530] rev 46223
upgrade: demonstrate that a no-op upgrade still performs everything
An upgrade operation which is not adding or removing anything should ideally
error out. However, it does the whole cloning and everything. Next patch will
fix it.
Differential Revision: https://phab.mercurial-scm.org/D9694
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 31 Dec 2020 19:42:10 +0530] rev 46222
upgrade: migrated -> upgraded in ui messages
Differential Revision: https://phab.mercurial-scm.org/D9676
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 31 Dec 2020 19:24:23 +0530] rev 46221
upgrade: remove unnecessary `is None` check
`upgrade_engine.upgrade()` always return the `backuppath` value and there are
not early returns. Hence I don't see how `backuppath` can be None.
Adding extra unncessary safe checks hides unknown bugs. Hence removing it.
Differential Revision: https://phab.mercurial-scm.org/D9675
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 31 Dec 2020 14:45:16 +0530] rev 46220
engine: refactor code to replace stores in separate function
In not all upgrades, we need to change the whole store. For example, when
upgrading repository to share-safe mode, we don't touch revlogs at all hence
store cloning and copying is not required.
The store replacing code needs to be made aware about what all has changed and
hence only copy/rename those things. To kickstart that, this patch moves
existing logic into a separate function.
Differential Revision: https://phab.mercurial-scm.org/D9674
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 31 Dec 2020 14:10:25 +0530] rev 46219
engine: make hook point for extension a public function
Well there are no private public functions in Python, but we generally treat
functions and variables starting with `_` as private ones.
A function which needs to be overrided in extension should be a public one.
Differential Revision: https://phab.mercurial-scm.org/D9672
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 30 Dec 2020 16:39:35 +0530] rev 46218
engine: prevent multiple checking of re-delta-multibase
The _perform_clone function is called for each revlog cloned, hence we should
prevent this function call overhead.
Differential Revision: https://phab.mercurial-scm.org/D9669
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 30 Dec 2020 16:33:49 +0530] rev 46217
engine: pass upgrade operation inside `_perform_clone()`
Same as previous patch.
Differential Revision: https://phab.mercurial-scm.org/D9668
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 30 Dec 2020 16:29:33 +0530] rev 46216
engine: pass upgrade operation inside _clonerevlogs()
Better to pass the operation instead of passing three of it's members (one of
the them is a function call) separately.
This will also be useful in future when we will like to control which things are
upgraded.
Differential Revision: https://phab.mercurial-scm.org/D9667
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 30 Dec 2020 16:20:25 +0530] rev 46215
actions: store deltareuse mode of whole operation in UpgradeOperation
UpgradeOperation should provide easy access to all the things related to the
current operation. Clients should not need to compute them.
Differential Revision: https://phab.mercurial-scm.org/D9666
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 30 Dec 2020 16:11:24 +0530] rev 46214
engine: refactor how total dstsize is calculated
Instead of increasing it with each revlog, we just get the sum of total
destination changelog, manifest and filelogs sizes.
Differential Revision: https://phab.mercurial-scm.org/D9665
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 16 Dec 2020 14:00:41 +0530] rev 46213
upgrade: introduce post upgrade and downgrade message for improvements
For certain imporvements, we will like to show a message after the operation
completed. This patch introduces that functionality.
Right now it's only used by share-safe feature.
Differential Revision: https://phab.mercurial-scm.org/D9619
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 16 Dec 2020 15:04:17 +0530] rev 46212
actions: introduce function to calculate downgrades
An upgrade operation can also downgrade/remove some format variants. Before this
patch there was no clean way to find out all such variants which will be
removed. This patch adds a function for that.
It will be used in next patch.
Differential Revision: https://phab.mercurial-scm.org/D9618
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 16 Dec 2020 14:55:27 +0530] rev 46211
debugupgraderepo: minor documentation fix
When we specify `--no-changelog --no-manifest --no-filelog` we skip all revlog
optimization instead of all filelog optimization.
Also while I was here, for consistency, I did `optimisation` -> `optimization`
to make it consistent with rest of occurrences.
Note: I am not native speaker and I only changed it because of consistency. I
don't know which one is correct.
Differential Revision: https://phab.mercurial-scm.org/D9617
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 16 Dec 2020 14:16:10 +0530] rev 46210
upgrade: rename actions to upgrade_actions
The `actions` were a list of optimizations and format upgrades which will be
upgraded. This does not include things which will be downgraded.
Let's rename the variable for clarity. It now makes obvious that we don't have
any concrete information on what things are downgraded.
Differential Revision: https://phab.mercurial-scm.org/D9616
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 16 Dec 2020 14:06:24 +0530] rev 46209
upgrade: move optimization addition to determineactions()
The documentation of `determineactions()` mention that it is given a list
returned from `findoptimizations()` however it was not true before this patch.
The code extending actions with optimizations also mentioned about it that this
should be in determineactions.
So let's do what comments at couple of places say.
Differential Revision: https://phab.mercurial-scm.org/D9615
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 16 Dec 2020 12:39:15 +0530] rev 46208
upgrade: drop support for old style optimization names
Old style optimization names like `redeltaparent` were converted into
`re-delta-parent` more than two years ago. The old names were kept around for
sometime because of BC reasons.
Refer
5608b5a6c3231c4ec771171cc3079142c7672be6. The commit states the map is
there for a while and we can drop them as the underlying command is a debug
command.
Differential Revision: https://phab.mercurial-scm.org/D9614
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 14 Dec 2020 16:15:01 +0530] rev 46207
upgrade: add a missing space in status message
Found while reading the code to refactor.
Differential Revision: https://phab.mercurial-scm.org/D9583
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 30 Dec 2020 14:56:34 +0530] rev 46206
actions: rename DEFICIENCY constant to FORMAT_VARIANT
It was not obvious what does deficieny means and every format change can't be a
deficiency. There are some format changes like compression levels, share-safe
which can't be understood at deficiencies.
This patch renames the constant to make things clearer.
Differential Revision: https://phab.mercurial-scm.org/D9664
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 14 Dec 2020 16:03:15 +0530] rev 46205
upgrade: rename finddeficiences() to find_format_upgrades()
It was not obvious what does deficieny means and every format upgrade can't be a
deficiency. There are some format upgrades like compression levels, share-safe
which can't be understood at deficiencies.
A change can be an upgrade or downgrade, however this `finddeficiences()` only
used to find upgrades.
This patch renames the function and related variables to make things more
clearer. The ui message also got improved which is a good thing.
Next patch will rename deficiency in general across the upgrade code.
Differential Revision: https://phab.mercurial-scm.org/D9582
msuozzo@google.com [Sat, 02 Jan 2021 01:48:12 -0500] rev 46204
beautifygraph: change the current commit symbol
The existing "circle with vertical fill" character renders as full width in
many terminals making the beautified symbols have uneven size. Additionally,
the proposed "fisheye" character is the logic 'active' version of the current
merge symbol, "bullseye."
Differential Revision: https://phab.mercurial-scm.org/D9678
Augie Fackler <augie@google.com> [Mon, 11 Jan 2021 14:10:31 -0500] rev 46203
merge with stable
Joerg Sonnenberger <joerg@bec.de> [Mon, 28 Dec 2020 01:21:58 +0100] rev 46202
statichttprepo: explicitly convert error message to str (
issue6247)
For Python 2.7, the implicit conversion of the HTTPError instance to
str was good enough. For Python 3.x, this fails later when hitting the
str to bytes conversion logic.
Differential Revision: https://phab.mercurial-scm.org/D9661
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 07 Dec 2020 22:27:43 +0100] rev 46201
debugsetparents: add various warning in the help message
I am tired to see people shooting themself in the foot with this. So lets add
more warning. At that point we should probably rename it or add extra
confirmation flag. This is a debug command anyway we can break BC on it.
Differential Revision: https://phab.mercurial-scm.org/D9534
Joerg Sonnenberger <joerg@bec.de> [Mon, 28 Dec 2020 03:18:16 +0100] rev 46200
largefiles: redo heads interception
The largefiles extension replaces the "heads" wire command and tries to
redirect all uses towards the custom "lheads" wire command. As seen in
issue6384, this doesn't currently work for ssh. Instead of hooking into
the _callstream interface, properly register the command for the peer
instance and monkeypatch the executor to do the redirection. This works
transparently for both all kinds of peers and both for the batch and
non-batch case.
Differential Revision: https://phab.mercurial-scm.org/D9663
Joerg Sonnenberger <joerg@bec.de> [Thu, 07 Jan 2021 11:51:18 +0100] rev 46199
nodemap: match comment to actual code
REV_OFFSET constant is 2, not 10.
Differential Revision: https://phab.mercurial-scm.org/D9688
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sun, 20 Dec 2020 15:38:50 +0100] rev 46198
clone: update to active bookmark, if set
This cannot happen during a normal Mercurial clone, but is useful for extensions like hg-git where we know what to check out — the Git HEAD — but do not wish to track it later on using the `@` bookmark.
Test Plan:
I have not included an explicit test, as this is much more easily tested within the `hg-git` test suite.
Differential Revision: https://phab.mercurial-scm.org/D9638
Joerg Sonnenberger <joerg@bec.de> [Thu, 17 Dec 2020 13:29:50 +0100] rev 46197
branchmap: micro-optimize branchinfo
changelogrevision() is supposed to be used if not all data of
changelog.read is used. This is the case here as only the extra field is
used. This also improves extensibility as at least hgext.git doesn't
implement changelog.read.
Differential Revision: https://phab.mercurial-scm.org/D9626
Joerg Sonnenberger <joerg@bec.de> [Wed, 06 Jan 2021 19:41:15 +0100] rev 46196
contrib: py3 compat for perfnodemap
Differential Revision: https://phab.mercurial-scm.org/D9687
Joerg Sonnenberger <joerg@bec.de> [Thu, 07 Jan 2021 14:15:24 +0100] rev 46195
comments: fix typos
Differential Revision: https://phab.mercurial-scm.org/D9689
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 14 Dec 2020 14:38:01 +0530] rev 46194
engine: unwrap a hard to understand for loop
The loop was iterating over all the datafiles and maintaining a set to check
whether filelogs have been processed, manifests have been processed or not.
The code was hard to understand and it assumed that `alldatafiles` are ordered
in a certain way.
This refactors the for loop in separate parts for each manifests, changelog and
filelogs. This will also help in future work where we will like more better
handling on whether we want to upgrade filelogs or not.
Differential Revision: https://phab.mercurial-scm.org/D9580
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 14 Dec 2020 14:18:38 +0530] rev 46193
engine: refactor actual cloning code into separate function
The `for ...` under which this cloning code exists is too complicated and based
on certain assumptions. I am going to refactor it in next patches and make it
bit saner.
Differential Revision: https://phab.mercurial-scm.org/D9579
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 14 Dec 2020 13:48:25 +0530] rev 46192
upgrade: move printing of unused optimizations to UpgradeOperation class
Differential Revision: https://phab.mercurial-scm.org/D9578
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 12 Dec 2020 18:09:16 +0530] rev 46191
upgrade: move `printrequirements()` to UpgradeOperation class
Part of refactor where we make things more arranged and integrated into single
`UpgradeOperation` class.
Differential Revision: https://phab.mercurial-scm.org/D9577
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 12 Dec 2020 18:00:18 +0530] rev 46190
upgrade: move `printoptimisations() to UpgradeOperation class
Part of refactor where we make things more arranged and integrated into single
`UpgradeOperation` class.
Differential Revision: https://phab.mercurial-scm.org/D9576
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 12 Dec 2020 17:54:59 +0530] rev 46189
upgrade: move `printupgradeactions()` to UpgradeOperation class
Part of refactor where we make things more arranged and integrated into single
`UpgradeOperation` class.
Differential Revision: https://phab.mercurial-scm.org/D9575
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 12 Dec 2020 17:51:27 +0530] rev 46188
upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Part of refactor where we make things more arranged and integrated into single
`UpgradeOperation` class.
Differential Revision: https://phab.mercurial-scm.org/D9574
Raphaël Gomès <rgomes@octobus.net> [Tue, 29 Dec 2020 10:53:45 +0100] rev 46187
hg-core: add basic config module
The config module exposes a `Config` struct, unused for now.
It only reads the config file local to the repository, but handles all valid
patterns and includes/unsets.
It is structured in layers instead of erasing by reverse order of precedence,
allowing us to transparently know more about the config for debugging purposes,
and potentially other things I haven't thought about yet.
This change also introduces `format_bytes!` to `hg-core`.
Differential Revision: https://phab.mercurial-scm.org/D9408
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 14 Dec 2020 12:08:56 +0100] rev 46186
copies-tests: update to null in test-copies-chain-merge.t
This avoid some unrelated output changeset when adding more cases.
Differential Revision: https://phab.mercurial-scm.org/D9589
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 14 Dec 2020 12:08:16 +0100] rev 46185
copies-tests: add a summary of all cases created in test-copies-chain-merge.t
This helps to keep track of existing branch when adding new cases.
Differential Revision: https://phab.mercurial-scm.org/D9588
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Dec 2020 00:29:29 +0100] rev 46184
copies: stop attempt to avoid extra dict copies around branching
In the python code, we attempt to avoid unnecessary dict copies when gathering
copy information. However that logic is wobbly and I keep running into case
where independent branches affects each others.
With the current code we can't ensure we are the only "user" of dict when
dealing with merge.
This caused havoc in the next series on tests I am about to introduce.
So for now I am disabling the faulty optimisation. I believe we will need a
dedicated overlay to deal with the "copy on write logic" to have something
correct. I am also hoping to find time to build dedicated test case for this
category of problem instead of relying on side effect in other tests. However
for now I am focussing on another issue.
Differential Revision: https://phab.mercurial-scm.org/D9608
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 14 Dec 2020 02:03:36 +0100] rev 46183
copies: deal with the "same revision" special case earlier
This can happens a lot in case of deletion so we better deal with it early.
Differential Revision: https://phab.mercurial-scm.org/D9592
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sun, 20 Dec 2020 15:47:02 +0100] rev 46182
tags: describe all abnormal tag types in `hg tags -v`
In particular, this affects `git` and `git-remote` tags when using hg-git.
Test Plan:
I have not included an explicit test, as this is much more easily tested within the `hg-git` test suite.
Differential Revision: https://phab.mercurial-scm.org/D9639
Raphaël Gomès <rgomes@octobus.net> [Tue, 01 Dec 2020 14:46:55 +0100] rev 46181
hg-core: add format-bytes dependency
This will be used in the next patch to make error messages that require
bytestring concatenation clearer.
Differential Revision: https://phab.mercurial-scm.org/D9409
Sushil khanchi <sushilkhanchi97@gmail.com> [Sat, 26 Dec 2020 18:26:32 +0530] rev 46180
rebase: handle the case when nothing to rebase (dry-run)
In dry-run mode, even when there was no rebase in progress it tried
to abort (for context, at the end of dry-run mode we abort the in-memory
performed rebase) because we were not early checking if there was any rebase
started.
Changes in test file reflect the fixed behavior.
Differential Revision: https://phab.mercurial-scm.org/D9659
Sushil khanchi <sushilkhanchi97@gmail.com> [Sat, 26 Dec 2020 18:04:30 +0530] rev 46179
rebase: add test to demonstrate an issue in dry-run
In dry-run mode, the case when there is nothing to rebase
is not handled correctly. Added test show that it try to
abort a rebase while there is no rebase in progress.
This will be fixed in next patch.
Differential Revision: https://phab.mercurial-scm.org/D9658
Joerg Sonnenberger <joerg@bec.de> [Mon, 28 Dec 2020 01:40:08 +0100] rev 46178
pycompat: fix typos
Differential Revision: https://phab.mercurial-scm.org/D9662
Yuya Nishihara <yuya@tcha.org> [Sat, 19 Dec 2020 12:07:24 +0900] rev 46177
chg: format code by clang-format version 11.0.1-+rc1-1
test-check-clang-format.t started failing on my Debian sid environment, and
new style looks slightly better. So let's bump the required clang-format
version to 11.
Yuya Nishihara <yuya@tcha.org> [Sat, 19 Dec 2020 12:01:58 +0900] rev 46176
test-check-interface: do not expect bare "python" executable exists
The test would crash if python executable had version suffix.
Yuya Nishihara <yuya@tcha.org> [Fri, 18 Dec 2020 20:09:11 +0900] rev 46175
procutil: assign pseudo file object if sys.stdout/stderr is missing
This basically simulates the Python 2 behavior. If libc stdio were used,
these file objects would be available and raise EBADF. There is subtle
difference between py2 and py3, but I think py3 behavior (i.e. exit 255)
is more correct.
"if" conditions are adjust so that they look similar to
dispatch.initstdio().
Yuya Nishihara <yuya@tcha.org> [Sat, 19 Dec 2020 11:10:18 +0900] rev 46174
procutil: introduce pseudo file object that just raises EBADF
This should be safer than closing underlying fd as the fd may be reused.
On Python 2, closed sys.stdin could be redirected to a random file having
fd=0, but we'd be better not copying this behavior.
Only readinto() and write() are implemented according to the following ABC
table. fileno() is not implemented since fd=0/1/2 may be assigned later
to other files.
https://docs.python.org/3/library/io.html#class-hierarchy
Yuya Nishihara <yuya@tcha.org> [Fri, 18 Dec 2020 20:14:54 +0900] rev 46173
dispatch: gate against missing stdout/stderr
We do need procutil.stdin/stdout/stderr, but we don't care much for sys.std*.
Let's leave them be None as it is the Python 3 way.
Yuya Nishihara <yuya@tcha.org> [Fri, 18 Dec 2020 20:35:11 +0900] rev 46172
dispatch: remove stale comment about fdopen()-ed stdio
On Python 3, stdout is just wrapped by LineBufferedWrapper.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 19 Dec 2020 01:42:51 -0500] rev 46171
mergetools: add BeyondCompare 4 for Windows
This is a copy of the TortoiseHg configuration, but dropping the 3-way diff and
dirdiff settings (since those aren't supported in core Mercurial), and swapping
the 'parent1', 'parent2', and 'base' literals for `$labellocal`, `$labelother,
and `$labelbase` respectively. (That functionality was apparently never ported
to TortoiseHg.)
Additionally, the single quotes were removed from around these arguments, since
none of the other configs have them.
Differential Revision: https://phab.mercurial-scm.org/D9635
Matt Harbison <matt_harbison@yahoo.com> [Sat, 19 Dec 2020 01:19:02 -0500] rev 46170
mergetools: add support for 32-bit BeyondCompare 3 on 64-bit Windows
Again, marginal usefulness, but other tools have this config and it eliminates a
diff from the TortoiseHg file.
Differential Revision: https://phab.mercurial-scm.org/D9634