Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 22:45:17 -0800] rev 46285
shelve: move method for creating backup to new shelf class
Differential Revision: https://phab.mercurial-scm.org/D9712
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 23:09:04 -0800] rev 46284
shelve: make gennames() helper generate relative backup paths
When I saw `gennames()`, I thought it was meant to take a relative
filename as argument. Maybe it was or maybe it wasn't, but it seems
simpler to pass it a relative path anyway, so that's what this patch
does. That also makes the call to backupvfs.exists() more natural (I
expect a relative path to be passed there too).
Differential Revision: https://phab.mercurial-scm.org/D9711
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 22:38:19 -0800] rev 46283
shelve: use listshelves() in cleanup function
The point of this patch is to make it so all the callers of
`shelvedfile.movetobackup()` look the same, so I can move it over to
the new `Shelf` class next.
Differential Revision: https://phab.mercurial-scm.org/D9710
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 16:08:30 -0800] rev 46282
shelve: inline shelvedfile.filename() since there are no callers outside class
Differential Revision: https://phab.mercurial-scm.org/D9709
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 15:24:46 -0800] rev 46281
shelve: make listshelves() return shelf names instead of filenames
All three callers now prefer the shelf name over the filename (already
before my recent patches, two out of three callers preferred the shelf
name).
Differential Revision: https://phab.mercurial-scm.org/D9708
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 14:54:56 -0800] rev 46280
shelve: move method for getting stat (mtime) to new shelf class
Only the mtime was needed, so I made it restricted to that in the
move.
The new `Shelf` class expects its argument to be a shelf name (not a
arbitrary filename like `shelvedfile` would accept), so only the
shelf name is now passed in.
Differential Revision: https://phab.mercurial-scm.org/D9707
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 15:24:15 -0800] rev 46279
shelve: open patch using new shelf class instead of open()
For some reason the existing code didn't use `shelvedfile().opener()`
so here we migrate to `shelf().open_patch()` from the `open()` system
call instead.
Differential Revision: https://phab.mercurial-scm.org/D9706
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 14:48:57 -0800] rev 46278
shelve: move function for opening .patch file to new shelf class
The `opener()` method was used specifically for the `.patch` file, and
the new `Shelf` class deals with all files involved in a shelf, so I
renamed the function in the process.
Differential Revision: https://phab.mercurial-scm.org/D9705
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 13:57:21 -0800] rev 46277
shelve: move method for reading .hg to new shelf class
Differential Revision: https://phab.mercurial-scm.org/D9704
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 11:25:39 -0800] rev 46276
shelve: move method for writing bundle to new shelf class
Differential Revision: https://phab.mercurial-scm.org/D9703
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 11:28:41 -0800] rev 46275
shelve: move method for reading .shelve file to new shelf class
Differential Revision: https://phab.mercurial-scm.org/D9702
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 11:22:21 -0800] rev 46274
shelve: move method for writing .shelve to new shelf class
Differential Revision: https://phab.mercurial-scm.org/D9701
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 11:07:21 -0800] rev 46273
shelve: introduce class representing a shelf
I'm about to make phase-based shelve not write `.hg` and `.patch`
files. Having a class that represents a single shelf, regardless of
which files it uses will help. I'm starting small with just a
`.exists()` function. I plan to eventually remove the `shelvedfile`
class once all functionality has been moved to the new class.
By the way, I know that things you shelve are not typically themselves
shelves. I still picked `Shelf` for the class because it's short
(compared to e.g. `ShelvedChange`).
Differential Revision: https://phab.mercurial-scm.org/D9700
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 12:26:32 -0800] rev 46272
shelve: raise more specific errors
Differential Revision: https://phab.mercurial-scm.org/D9699
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 12:58:43 -0800] rev 46271
shelve: trust caller of shelvedfile.opener() to check that the file exists
The only place we call `shelvedfile.opener()` is when we're about to
apply a bundle. The file should always exist. If it doesn't, the
`.hg/` directory is corrupt and we don't provide any guarantees about
supporting corrupt repos (besides, telling the user that the shelve
doesn't exist when `hg shelve --list` lists it is not very helpful).
Differential Revision: https://phab.mercurial-scm.org/D9698
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 12:22:39 -0800] rev 46270
shelve: rewrite check for unknown shelf to delete
The code would try to delete the shelf's .patch file and if that
raised an exception, it would convert it to an `error.Abort`. This
patch rewrites it so the check is done upfront. I find it easier to
read that way. It's now clear enough that I removed the comment
explaining it as well.
As Joerg pointed out during review, another differences is that the
old code would move a `.hg` file without its `.patch` friend to backup
before it realized that the `.patch` file was missing. The new code
will error out earlier and not move the `.hg` file, which seems like
an improvement. That should only matter on corrupt `.hg/shelved/`
directories, however.
Differential Revision: https://phab.mercurial-scm.org/D9697
Martin von Zweigbergk <martinvonz@google.com> [Thu, 07 Jan 2021 12:37:14 -0800] rev 46269
shelve: remove a bundlerepo method
It was added in
43816070284e (shelve: add a bundlerepo method,
2014-10-10), but I haven't been able to find a place it was used.
Differential Revision: https://phab.mercurial-scm.org/D9696
Martin von Zweigbergk <martinvonz@google.com> [Fri, 08 Jan 2021 16:38:41 -0800] rev 46268
tests: add tests for corrupt .hg/shelved/ directory
I don't care much how we behave in these cases, except that we should
provide a way for the user to get out of the broken state.
Differential Revision: https://phab.mercurial-scm.org/D9718
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 13 Jan 2021 18:29:19 +0100] rev 46267
ui: add a "config_default" method
This allow code to access the expected value for a config. This is useful in the
context of dynamic default value, and short term it will be useful to write
dynamically "correct" code.
Differential Revision: https://phab.mercurial-scm.org/D9759
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 14 Jan 2021 11:46:30 +0100] rev 46266
test: split tests/test-merge-combination.t into multiple parts
That test is quite slow, lets split it in smaller bits.
Differential Revision: https://phab.mercurial-scm.org/D9768
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 14 Jan 2021 11:33:09 +0100] rev 46265
test: extract the `genmerges` out of test-merge-combination.t
This open the way to splitting this slow test in multiple ones.
Differential Revision: https://phab.mercurial-scm.org/D9767
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 15 Jan 2021 14:05:32 +0100] rev 46264
hghave: clarify `sqlite` requirements
We need more than the python module, we also need the sqlite3 command line.
Differential Revision: https://phab.mercurial-scm.org/D9787
Joerg Sonnenberger <joerg@bec.de> [Fri, 15 Jan 2021 01:21:58 +0100] rev 46263
localrepo: fix comment typo
Differential Revision: https://phab.mercurial-scm.org/D9782
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Jan 2021 11:53:55 -0800] rev 46262
error: use detailed exit code 10 for command errors
Command errors (unknown or ambiguous commands, or bad command
arguments or options) are handled in the `dispatch` module. Most other
errors are handled in the `scmutil` module. This patch therefore has
to duplicate a little bit of code from the `scmutil` module. It's just
a few lines, however, so it seems fine to me. It's a pretty common
category of errors, so it's important to have them respect
`ui.detailed-exit-code`.
Differential Revision: https://phab.mercurial-scm.org/D9777
Martin von Zweigbergk <martinvonz@google.com> [Wed, 13 Jan 2021 22:37:21 -0800] rev 46261
errors: raise InputError when non-existent help section requested
Differential Revision: https://phab.mercurial-scm.org/D9776
Augie Fackler <augie@google.com> [Fri, 15 Jan 2021 12:56:25 -0500] rev 46260
revlog: migrate from PyEval_CallObject to PyObject_Call
The former was deprecated in 3.9.0.
Differential Revision: https://phab.mercurial-scm.org/D9791
Augie Fackler <augie@google.com> [Fri, 15 Jan 2021 12:52:52 -0500] rev 46259
fuzz: fix Makefile default PYTHON_CONFIG_FLAGS to be modern
This is actually what we already do on oss-fuzz, so it's more correct as tests
go.
Differential Revision: https://phab.mercurial-scm.org/D9790
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 14 Jan 2021 06:52:36 +0100] rev 46258
tests: wider work around matching in test-narrow-shallow.t
Since
issue6150 is still not fixed, we have to accommodate a larger array of
possible results. Otherwise we get frequent flakiness of local and CI runs.
Differential Revision: https://phab.mercurial-scm.org/D9766
Augie Fackler <augie@google.com> [Wed, 13 Jan 2021 15:44:24 -0500] rev 46257
fuzz: try and ensure fuzzer tests run against the right python-config
Also only under python 3.
Differential Revision: https://phab.mercurial-scm.org/D9752
Raphaël Gomès <rgomes@octobus.net> [Fri, 08 Jan 2021 16:25:18 +0100] rev 46256
contrib: remove testing for `dirstate-tree` Rust feature
This feature will be replaced in a few months, and served more as a
proof-of-concept. Keeping it in CI when no one is using it anymore is just
wasteful.
Differential Revision: https://phab.mercurial-scm.org/D9716
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 13 Jan 2021 17:21:51 +0100] rev 46255
perf: don't turn byte to string when formatting perfbranchmap
I am not sure why this `str` all is there is the first place.
Differential Revision: https://phab.mercurial-scm.org/D9751
Joerg Sonnenberger <joerg@bec.de> [Fri, 18 Dec 2020 14:45:28 +0100] rev 46254
branchmap: avoid ancestor computations in absence of non-continous branches
The branchhead computation is one of the more heavy operations for
bigger repositories as it has to scan all changesets and potentially
involves the expensive computation of the ancestor sets. Redo the
computation to handle the common cases directly and use tighter
conditions for when the ancestor scan is necessary. Most importantly,
avoid it completely if the non-continous branches are processed in one
update as seen in the initial computation after a clone.
For the Mercurial repository, it gives a small 2-3% performance boost.
For the NetBSD test repository, it cuts the time in half.
Differential Revision: https://phab.mercurial-scm.org/D9631
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 12 Jan 2021 19:49:18 +0100] rev 46253
persistent-nodemap: also list related file as part of the store
This make sure they are will be selected during upgrade, and copy based clone.
Differential Revision: https://phab.mercurial-scm.org/D9749
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 13 Jan 2021 12:50:47 +0100] rev 46252
upgrade: explicitly test for revlog index
We do not want to exclude `.d` we want to only include `.i`. We are about to add
more extension type (for the persistent nodemap: `.n`, `.nd`) so lets make the
list explicit instead.
Differential Revision: https://phab.mercurial-scm.org/D9748
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 12 Jan 2021 19:47:34 +0100] rev 46251
persistent-nodemap: highlight that node is not sent when streaming
We have a local work-around, however having that data sent in the first place
would be better. So we start with a test that monitor what is sent, and notice
they are not.
Differential Revision: https://phab.mercurial-scm.org/D9736
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 12 Jan 2021 18:13:55 +0100] rev 46250
persistent-nodemap: test it (does not) exist after a stream clone
This is currently buggy. We add a test before fixing the bug.
Differential Revision: https://phab.mercurial-scm.org/D9734
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 12 Jan 2021 18:19:17 +0100] rev 46249
persistent-nodemap: test it (does not) exist after a local clone
This is currently buggy. We add a test before fixing the bug.
Differential Revision: https://phab.mercurial-scm.org/D9733
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 12 Jan 2021 18:19:01 +0100] rev 46248
persistent-nodemap: test that is it present after a clone
The persistent nodemap is actually missing after local and stream
clone. We start by adding a test for the case that works so that we
can compare output after the fix.
Differential Revision: https://phab.mercurial-scm.org/D9732
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 12 Jan 2021 23:27:24 +0100] rev 46247
narrow: overwrite readfast in excludeddirmanifestctx
The excludeddirmanifestctx does not have underlying storage (because it is
excluded) so the implementation of the `readfast` trying to access it crash.
This was reveled while running some cache warning code on narrow repositories.
That code will be introduced further down in the series.
Differential Revision: https://phab.mercurial-scm.org/D9731
Kyle Lippincott <spectral@google.com> [Mon, 11 Jan 2021 17:46:55 -0800] rev 46246
patch: handle filenames with trailing spaces
I have no idea if this is *actually* supported by the patch file format, but at
least when reading from a patch file created by running `hg shelve`, it is
written out such that there's a trailing space after the second (`b`) filename.
When we read the patch file, we remove the space before parsing the filenames,
so it doesn't end up matching the other sources of what files are in the shelve.
We observed this internally due to a wrapper around unshelve that called into
patch.changedfiles, but `hg patch` is able to reproduce the issue as well, so
I've included both tests.
Differential Revision: https://phab.mercurial-scm.org/D9729
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Tue, 29 Dec 2020 23:15:26 +0100] rev 46245
rust: fix testing with $TMPDIR ≠ /tmp
Differential Revision: https://phab.mercurial-scm.org/D9670
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Mon, 11 Jan 2021 15:16:36 +0100] rev 46244
ci: avoid a global before_script definition
This removes the implicit assumption that all jobs are test runs.
Differential Revision: https://phab.mercurial-scm.org/D9723
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Mon, 21 Dec 2020 15:50:01 +0100] rev 46243
setup: when possible, build and bundle man pages
This makes it so the manual pages are built as part of the Python
build, and includes them in any wheel generated. This should make
Python wheels a much more useful and complete way of distributing
Mercurial binaries.
Differential Revision: https://phab.mercurial-scm.org/D9640
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 08 Dec 2020 16:41:13 +0530] rev 46242
scmutil: improve documentation of writereporequirements()
This makes it easier to understand the difference between `writerequires()`
and `writereporequirements()`.
Differential Revision: https://phab.mercurial-scm.org/D9568
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 20 Nov 2020 08:02:25 +0100] rev 46241
command: automatically create alias for command using '-' in names
As discussed during the "5.6 Sprint" ignoring dash in command name open the way
to using them more. We can now move existing command to more readable (dash
using) names without breaking any compatibility.
Differential Revision: https://phab.mercurial-scm.org/D9515
Joerg Sonnenberger <joerg@bec.de> [Mon, 28 Dec 2020 01:05:09 +0100] rev 46240
worker: POSIX only supports workers from main thread (
issue6460)
The POSIX backend sets signal handlers for SIGINT (maybe avoidable) and
SIGCHLD (necessary for waitpid). Python up to 3.9 only allow this from
the main thread, so disable the worker feature otherwise.
Differential Revision: https://phab.mercurial-scm.org/D9660
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 08 Jan 2021 21:47:31 +0530] rev 46239
sharesafe: introduce config to disallow outdated shares if upgrade fails
After this patch, we have config option to control all aspects of shares
when share source is upgraded or downgraded.
Differential Revision: https://phab.mercurial-scm.org/D9692
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 08 Jan 2021 21:34:16 +0530] rev 46238
sharesafe: make warning about outdated share configurable
If the source repository upgrades to use sharesafe mode, we show a warning in
shares. This patch makes that warning configurable and some might not want their
users see this warning.
Differential Revision: https://phab.mercurial-scm.org/D9691
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 08 Jan 2021 18:07:33 +0530] rev 46237
debuglock: rename flag names to better clarity
`--force-lock` sounds as if we are taking the lock however in reality it's the
opposite.
Differential Revision: https://phab.mercurial-scm.org/D9690
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 06 Jan 2021 18:31:16 +0530] rev 46236
sharesafe: add functionality to automatically downgrade shares
Reasoning is same as previous patch which adds automatic upgrade support.
Downgrade is required as if automatic upgrade is enabled, all shares upgrade and
then source repository downgrades, shares won't work. We need to downgrade them.
Differential Revision: https://phab.mercurial-scm.org/D9680
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 06 Jan 2021 16:18:06 +0530] rev 46235
sharesafe: introduce functionality to automatically upgrade shares
In past few months, we have developed a `share-safe` mode for sharing repository
in which share source requirements and config values are shared with the shares.
To get it rolling, an important task is to get these shares automatically
upgraded. We are focusing on an installation where shares are created by scripts
and test jobs. It will be difficult to manually upgrade these and we need some
functionality to do so automatically.
This patch introduces a config option to deal with it. If all of the following
conditions are met, we upgrade the share repository automatically:
* If the config option is enabled
* Share source repository is share-safe enabled
* Share is not share-safe enabled
* Any command is run in the share
Upgrading the share is pretty easy as it involves only editing the requirements
file.
Differential Revision: https://phab.mercurial-scm.org/D9679
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 06 Jan 2021 16:01:19 +0530] rev 46234
localrepo: move storevfs calculation out of if statement
In next patch, we will need this variable in else statement too. So, let's take
it out.
Differential Revision: https://phab.mercurial-scm.org/D9681
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Mon, 11 Jan 2021 13:48:13 +0100] rev 46233
setup: don't import distutils prior to checking FORCE_SETUPTOOLS
I've seen warnings about importing distutils before setuptools,
although I can't reproduce them at the moment.
Differential Revision: https://phab.mercurial-scm.org/D9722
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 13 Jan 2021 15:42:15 +0530] rev 46232
largefiles: remove unused imports
This fixes test-check-pyflakes.t
Differential Revision: https://phab.mercurial-scm.org/D9747
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 08 Jan 2021 23:08:39 +0530] rev 46231
upgrade: don't perform anything if nothing to do
Before this patch, upgrade will process everything, re-clone all revlogs, write
requirements file again even there is no change to be made.
This patch makes it exit earlier.
Differential Revision: https://phab.mercurial-scm.org/D9695
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 08 Jan 2021 23:06:38 +0530] rev 46230
downgrade: if a compression is removed, consider that too
For compression format variant, the result of `fromrepo()` and `fromconfig()` is
not a boolean and we have to actually equate those to find change.
Differential Revision: https://phab.mercurial-scm.org/D9693
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 31 Dec 2020 14:28:00 +0530] rev 46229
engine: prevent a function call for each store file
Python function calls are not cheap. Instead of calling the function once for
each file in store, we use a dedicated function which filters and yields the
required files.
Differential Revision: https://phab.mercurial-scm.org/D9673
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Jan 2021 18:36:22 +0100] rev 46228
rhg: use a release-mode executable in tests
This allows the rhg build for test-rhg.t to share compiled dependencies
such as hg-core with the hg-cpython build for other tests.
For context, my wrapper script for the typical edit-compile-test
cycle now looks like this:
(cd rust && cargo +nightly-2020-10-04 fmt)
(cd rust && cargo build --release -p rhg)
make --silent local PURE=--rust
python test/run-tests.py --local "$@"
Differential Revision: https://phab.mercurial-scm.org/D9728
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Wed, 30 Dec 2020 00:14:28 +0100] rev 46227
rust: fix file folding map
The file folding map, frequently used on macOS, had two issues:
* the means for converting it to Python didn't work
* a minor typo when copying the python code, where `!=` became `==`
With this, the rust code passes all tests on macOS.
Test Plan:
I'm currently doing a full test run on a case-insensitive file system. If it passes, perhaps we can change the platform check from an error to a warning?
Differential Revision: https://phab.mercurial-scm.org/D9671
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 12 Jan 2021 22:43:55 +0100] rev 46226
test: replace a many occurence of `python` with `$PYTHON`
Otherwise this can use the wrong python version, or worse, not find any python
at all.
Differential Revision: https://phab.mercurial-scm.org/D9730
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
Matt Harbison <matt_harbison@yahoo.com> [Sat, 19 Dec 2020 01:15:44 -0500] rev 46169
mergetools: enable the `checkconflicts` option for Araxis Merge
This must have been a typo. This matches the config read in filemerge, as well
as the TortoiseHg config file.
Differential Revision: https://phab.mercurial-scm.org/D9633
Matt Harbison <matt_harbison@yahoo.com> [Sat, 19 Dec 2020 01:10:57 -0500] rev 46168
mergetools: sync up comments with the TortoiseHg copy of the config file
It's of limited value, but a step towards making the diff between the two less
noisy.
Differential Revision: https://phab.mercurial-scm.org/D9632
Simon Sapin <simon.sapin@octobus.net> [Mon, 14 Dec 2020 16:33:15 +0100] rev 46167
rust: introduce Repo and Vfs types for filesystem abstraction
This is similar to the corresponding Python classes.
Repo represents a repository and knows the path to the `.hg` directory,
the `store` directory, and the working directory.
Separating these will enable supporting the share extension.
A Vfs is created from a Repo for one of these three directories.
It has filesystem access APIs that take a relative std::path::Path
as a parameter.
Differential Revision: https://phab.mercurial-scm.org/D9596
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 19 Dec 2020 15:56:54 +0100] rev 46166
bundle2: drop some outdated comment
This commend trace back to a very early bundle2 changeset
c7ceae0faf69. And the
code moved past this warning over 5 years ago.
Differential Revision: https://phab.mercurial-scm.org/D9637