Anton Shestakov <av6@dwimlabs.net> [Mon, 31 Jan 2022 18:13:00 +0300] rev 48789
obsolete: don't use os.stat in repo.obsstore.__nonzero__ if it's static HTTP
If a repo is accessed via static HTTP, then we obviously can't use os.stat() to
just peek at the file size. Let's download the entire file to check its size.
Yes, this feels wasteful, but:
1. If we're cloning or pulling a repo from a static HTTP server, we need the
contents of the obsstore anyway.
2. Implementing statichttpvfs.stat() that uses HEAD will result in one more
request to a static-only HTTP server, which is already slow. Also parsing a
response to a HEAD request to construct os.stat_result is pretty hacky.
There's also a question of the remote server properly supporting HEAD method
and reporting at least file size.
3. Implementing statichttpvfs.stat() that uses GET is pretty much the same
thing as we do here, except we can't even cache the response easily, unlike
simply accessing obsstore._data, which is @propertycache'd.
Importing statichttprepo locally to avoid circular import.
See also:
4507bc001365 and commit message of
f8f2ecdde4b5.
Differential Revision: https://phab.mercurial-scm.org/D12195
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:49:03 -0800] rev 48788
filemerge: make `_maketempfiles()` more reusable
`_maketempfiles()` is very specialized for its current use. I hope to
use it also when creating temporary files for input for tools that do
partial conflict resolution. That'll be possible if the function is
more generic. Instead of passing in two contexts (for "other" and
"base") and an optional path (for "local"), let's pass a single list
of files to make backups for. Even if we don't end up using for
partial conflict resolution, this is still a simplification (but I do
have a WIP patch for partial conflict resolution and it is able to
benefit from this).
Differential Revision: https://phab.mercurial-scm.org/D12193
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:16:29 -0800] rev 48787
filemerge: reduce some duplication in `_maketempfiles()`
The two callers of the local `maketempfrompath()` function used the
returned file object in the same way. We can reduce duplication by
moving that code into the function.
Differential Revision: https://phab.mercurial-scm.org/D12192
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:11:50 -0800] rev 48786
filemerge: use leverage `util.readfile()` in `_maketempfiles()`
Differential Revision: https://phab.mercurial-scm.org/D12191
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:04:50 -0800] rev 48785
filemerge: move removal of `.orig` extension on temp file close to context
The place where the `.orig` extension is removed in `_maketempfiles()`
doesn't make it clear that it's the backup path, which is why we have
a comment in the code explaining it. Let's instead move it out of the
function and close to where we get it from `backup.path()`, so that
becomes clear.
Differential Revision: https://phab.mercurial-scm.org/D12190
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 21:52:18 -0800] rev 48784
filemerge: remove `uselocalpath` argument from `_maketempfiles()`
The `localpath` argument is unused if `uselocalpath` is false, so we
can use `None` as a sentinel value for the variable instead and remove
extra `uselocalpath` argument. That's not much of a win, but it's a
small step towards further improvements.
Differential Revision: https://phab.mercurial-scm.org/D12189
Martin von Zweigbergk <martinvonz@google.com> [Fri, 11 Feb 2022 22:39:53 -0800] rev 48783
filemerge: remove an unnecessary join with absolute path
The `backup` path is now always absolute, so we don't need to join it
with the working copy path.
Differential Revision: https://phab.mercurial-scm.org/D12188
Martin von Zweigbergk <martinvonz@google.com> [Fri, 11 Feb 2022 21:39:55 -0800] rev 48782
filemerge: when using in-memory merge, always put backup files in temp dir
Before calling a merge tool, we create a backup of the local side of
the merge. That file can be put in the working copy or in a temporary
directory, depending on the user's config. When we're merging in
memory, we don't want to write to the actual, on-disk working copy, so
we write the file to the in-memory working copy instead. However,
since we don't support external merge tools with in-memory merge, it
makes no difference where the file is actually stored (and if we ever
do add support for external merge tools, then the file clearly can't
live in the in-memory working-copy object anyway). So, since it
doesn't matter where the file is stored, we can simplify by always
putting them in the system's temp directory.
Differential Revision: https://phab.mercurial-scm.org/D12187
Martin von Zweigbergk <martinvonz@google.com> [Tue, 15 Feb 2022 20:18:57 -0800] rev 48781
filemerge: remove unused `repo` argument from `_maketempfiles()`
I missed this in D12171.
Differential Revision: https://phab.mercurial-scm.org/D12194
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Feb 2022 23:45:30 +0100] rev 48780
upgrade: make dirstate-v2 format variant compatible with share
This only affects the dirstate and is safe to upgrade in the share.
Differential Revision: https://phab.mercurial-scm.org/D12197