Commit Graph

35100 Commits

Author SHA1 Message Date
Matt Harbison
3e757c482b lfs: restore the local blob store after a repo upgrade
This also ends up testing the local extension wrapping for dstrepo during
upgrade, which was fixed in f0a28956f345.
2017-12-08 00:18:30 -05:00
Matt Harbison
de1f4a0c73 lfs: override walk() in lfsvfs
In order to fix the missing lfs store after an upgrade, I attempted to walk the
store vfs to hardlink to the upgraded repo's store.  But the custom join()
clashes with the default walk() implementation.  First, 'path=None' blew up in
the regex matcher, because it wanted a string.  But even if that is fixed, the
join to walk the root of the vfs wouldn't match the required xx/xx...xx pattern.

The first cut of this was a copy/paste/tweak of the base implementation, but
this version of walk() hides the internal directories, and treats the vfs as a
flat store.  I think this makes sense because most vfs methods call join() on
input paths, which wants the simple oid format.  It also relieves the caller
from having to deal with bogus files/directories in the store.
2017-12-07 23:44:06 -05:00
Matt Harbison
b798276c65 tests: add coverage for preserving 'lfs' requirement on repo upgrade
The test also shows that the local blob store is erroneously lost.
2017-12-07 22:36:31 -05:00
Matt Harbison
0474cfef45 test-upgrade-repo: glob away timing values 2017-12-07 22:35:19 -05:00
Pulkit Goyal
113475a070 py3: handle keyword arguments correctly in httppeer.py
Differential Revision: https://phab.mercurial-scm.org/D1635
2017-12-10 04:47:21 +05:30
Pulkit Goyal
90a31fc989 py3: handle keyword arguments correctly in httpconnection.py
Differential Revision: https://phab.mercurial-scm.org/D1634
2017-12-10 04:47:04 +05:30
Pulkit Goyal
30c3b22414 py3: handle keyword arguments correctly in hook.py
Differential Revision: https://phab.mercurial-scm.org/D1633
2017-12-10 04:46:50 +05:30
Pulkit Goyal
4a3c34a274 py3: handle keyword arguments correctly in help.py
Differential Revision: https://phab.mercurial-scm.org/D1632
2017-12-10 04:46:39 +05:30
Pulkit Goyal
ca041d8604 py3: handle keyword arguments correctly in exchange.py
Differential Revision: https://phab.mercurial-scm.org/D1631
2017-12-10 04:46:25 +05:30
Pulkit Goyal
616684d4c9 py3: handle keyword arguments correctly in dispatch.py
Differential Revision: https://phab.mercurial-scm.org/D1630
2017-12-10 04:46:13 +05:30
Pulkit Goyal
56f56fc9fd py3: handle keyword arguments correctly in context.py
Differential Revision: https://phab.mercurial-scm.org/D1629
2017-12-10 04:45:56 +05:30
Pulkit Goyal
b642a8adf8 py3: handle keyword arguments correctly in commands.py
Differential Revision: https://phab.mercurial-scm.org/D1628
2017-12-10 04:45:41 +05:30
Pulkit Goyal
cb53297841 py3: handle keyword arguments correctly in color.py
Differential Revision: https://phab.mercurial-scm.org/D1627
2017-12-10 04:45:27 +05:30
Pulkit Goyal
217c0c34ad py3: handle keyword arguments correctly in cmdutil.py
Differential Revision: https://phab.mercurial-scm.org/D1626
2017-12-10 04:45:10 +05:30
Pulkit Goyal
2e95019c37 py3: handle keyword arguments correctly in archival.py
Differential Revision: https://phab.mercurial-scm.org/D1625
2017-12-10 04:43:41 +05:30
Pulkit Goyal
625bb105d9 py3: handle keyword arguments correctly in hgext/largefiles/
Keys of keyword arguments must be str(unicode) on Python 3. The transformer
which we use on Python 3, appends b'' in front of each string literal, so this
may lead in KeyError or None return even when the key is present by we are using
bytes value and it's stored in unicodes. This patch and all the similar patches
handle this by either converting the keys of kwargs to bytes using
'pycompat.byteskwargs()' or adding r'' so that the transformer won't append
b''.

This next 23 patches follows the above mentioned way to handle keyword
arguments.

Differential Revision: https://phab.mercurial-scm.org/D1624
2017-12-10 02:52:48 +05:30
Pulkit Goyal
b53f06128c remotenames: rename related file and storage dir to logexchange
This patch renames remotenames.py to logexchange.py, test-remotenames.t to
test-logexchange.t. Also this patch renames the directory in which the data is
stored from remotenames to logexchange. After this patch, data about bookmarks
and branches from a server we pull is stored in
`.hg/logexchange/(bookmarks|branches)` files.

Thanks to smf for the suggestion.

Differential Revision: https://phab.mercurial-scm.org/D1607
2017-12-07 00:26:45 +05:30
Boris Feld
f5e5b27971 lfs: allow to run 'debugupgraderepo' on repo with largefiles
The extensions wrap the necessary function to ensure the 'lfs' requirements
won't be dropped.

It is now possible to run `hg debugupgraderepo` on a repository with lfs.
2017-12-07 21:56:18 +01:00
Boris Feld
d8aa8e36d8 upgrade: add a 'redeltafullall' mode
We add a new mode for delta recomputation, when selected, each full text will
go through the full "addrevision" mechanism again. This is slower than
"redeltaall" but this gives the opportunity for extensions to trigger special
logic. For example, the lfs extensions can decide to promote some revision to
lfs storage during the upgrade.
2017-12-07 20:27:03 +01:00
Boris Feld
84c9e6582a upgrade: use actual filelog to convert filelog
Extensions can add extra logic related to the config, so we must use the actual
class. The path used needs minimal transformation for this to work.
2017-12-07 22:37:18 +01:00
Boris Feld
b70b33bf91 upgrade: more standard creation of the temporary repository
By using the standard path to create a repository we fill some hole in the
current initialization process. The one who triggered this changeset was the
lack of extensions initialization.
2017-12-07 18:56:10 +01:00
Boris Feld
826e838aa1 upgrade: use the repository 'ui' as the base for the new repository
The `repo.baseui` contains all the configuration but the one specific to the
repository (so it can be used when dealing with local peer and sub-
repository). However, we need the repository config to be taken into account
when doing the upgrade. Otherwise, the upgrade related config that exists in
the repository config won't be taken into account when performing the update.
A buggy and surprising behavior.

We had to work around protection set around `repo.ui.copy` since we are an
uncommon case.
2017-12-07 18:55:35 +01:00
Boris Feld
5c9784830a upgrade: add a test to show the repository config being ignored
The upgrade process ignores the config within the repository. The next
changeset fixes it, but we introduce this test before to show it actually
tests our target.
2017-12-07 20:50:24 +01:00
Boris Feld
9f250d48c5 upgrade: register compression as a format variants
Compression is a promising vector for speedup, let us make it easier to check
the compression used and upgrade existing repository.
2017-12-07 16:50:48 +01:00
Boris Feld
25342bccd7 debugformat: handle non-boolean value for variant 2017-12-07 16:49:24 +01:00
Boris Feld
c2382c14ab debugformat: update label depending on value difference
The new label highlight areas where the repo format differs from current
config or default. This should help people spot area where a repository
mismatch with the expected state.
2017-12-07 16:12:32 +01:00
Boris Feld
5ef878754c debugformat: add data about the config when verbose
In verbose mode, the command also displays the current configuration choice
for the variant and the global Mercurial default for it.
2017-12-07 16:05:20 +01:00
Boris Feld
3b270be25b debugformat: add a 'debugformat' command
The command displays basic data about all format variants registered for repo
upgrades. This gives a quick way to peek into a repository format.

The 'fm.write()' calls are very independent because more data will be added in
later changeset. Having more separate call make the later patch clearer.
2017-12-07 16:19:46 +01:00
Boris Feld
dd552bcef6 upgrade: rename 'removecldeltachain' to 'plain-cl-delta'
The new naming is more descriptive of a "state" while the older one was more
about "action". I'm looking into command exposing more of data about the state
of the repository so "state" oriented work better there.

The key has not been made public anywhere outside the debug area so it is fine
to update it.
2017-12-07 15:55:59 +01:00
Augie Fackler
be4248f051 tests: glob away ' that doesn't occur on all platforms in lfs test
Differential Revision: https://phab.mercurial-scm.org/D1623
2017-12-08 23:48:23 -05:00
Phil Cohen
c223c40a1c rebase: extract _assignworkingcopy
Slightly cleaner, and makes it easier to hook this in an extension.

Differential Revision: https://phab.mercurial-scm.org/D1617
2017-12-08 12:44:27 -08:00
Phil Cohen
56b0205ed4 rebase: disable inmemory if the rebaseset contains the working copy
As described in the comment, rebasing the working copy parent with in-memory
merge, and then updating to the new commit, isn't much faster because of the
extra overhead of uppdating. Best to leave it off in that case.

This commit makes deploying in-memory merge via an extension easier, because
you can just set `inmemory=True` based on some config or probability, and this
will turn off the cases where it's not desired.

Differential Revision: https://phab.mercurial-scm.org/D1616
2017-12-08 15:27:58 -08:00
Pulkit Goyal
3e6a480b54 clone: add support for storing remotenames while cloning
If `experimental.remotenames` is set to True, we store the remotenames in case
of `hg pull`. This patch adds that support to clone command also.

Differential Revision: https://phab.mercurial-scm.org/D1601
2017-12-06 06:40:27 +05:30
Jun Wu
4ca48aa8cc revset: use phasecache.getrevset to calculate public()
Other revsets like secret(), draft(), _nonpublic() are using
phasescache.getrevset already. The latter is more efficient after D1606.
So let's migrate the public() revset function too.

Tested using:

  $ hg debugshell --hidden --cwd hg-committed`
  In [1]: %timeit len(repo.revs('public()'))

* Before D1606: 10 loops, best of 3: 22.5 ms per loop
* Before this change, after D1606: 10 loops, best of 3: 28.6 ms per loop
* After this change: 10 loops, best of 3: 20.2 ms per loop

Therefore `public()` revset becomes even slightly faster after the data
structure change by D1606. A similar performance win could also be observed
on a large repo.

A side effect is `phasecache.getrevset` needs to take a `subset` parameter.
That was added with a default value so it won't cause BC issues.

Differential Revision: https://phab.mercurial-scm.org/D1620
2017-12-08 14:20:34 -08:00
Augie Fackler
b909a40cda highlight: eagerly discover plugin lexers while demandimport is off
Since highlight is only relevant for servers, it seems worthwhile to
just trigger this eagerly, which avoids really weird traceback
problems caused by demandimport messing with some of the lexer plugins.

Differential Revision: https://phab.mercurial-scm.org/D1619
2017-12-08 16:14:19 -05:00
Matthieu Laneuville
eb58359793 patch: move part of tabsplitter logic in _inlinediff
It cannot be entirely moved within _inlinediff as long as worddiff is
experimental (when turned off, matches is always an empty dict).
2017-12-08 17:20:11 +09:00
Phil Cohen
8364d14980 overlayworkingctx: invalidate the manifest cache when changing parents
This fixes problems noticeable when rebasing several commits into one
destination commit using ``--collapse``. The manifest cache needs to be cleared
each time.

Differential Revision: https://phab.mercurial-scm.org/D1244
2017-12-07 16:07:06 -08:00
Phil Cohen
4a5355ea73 overlayworkingctx: add _compact()
Alas, presence of a key in the cache isn't sufficient evidence that the file
is actually dirty.

Differential Revision: https://phab.mercurial-scm.org/D1243
2017-12-07 16:07:06 -08:00
Phil Cohen
b5b63f89d9 overlayworkingctx: add `tomemctx()`
Differential Revision: https://phab.mercurial-scm.org/D1242
2017-12-07 22:26:07 -08:00
Phil Cohen
bea2c78914 overlayworkingctx: add _auditconflicts to write()
Alas, part of Mercurial's conflict detection (for file<->folder conflicts,
for example) depends on the filesystem. We don't have the filesystem with IMM,
so we have to run these checks ourselves.

Differential Revision: https://phab.mercurial-scm.org/D1241
2017-12-07 16:07:06 -08:00
Phil Cohen
2ec2189e8b overlayworkingctx: inherit from committablectx instead of workingctx
We should find a better name for this context at some point. (mutablememctx?)

Differential Revision: https://phab.mercurial-scm.org/D1240
2017-12-07 16:07:06 -08:00
Phil Cohen
d5ed058435 overlayworkingctx: add a no-op `clearunknown()`
We no longer inherit ``workingctx``'s version, but we also don't need to do
anything anymore.

Differential Revision: https://phab.mercurial-scm.org/D1239
2017-12-07 16:07:06 -08:00
Phil Cohen
b24f3aaa75 overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Differential Revision: https://phab.mercurial-scm.org/D1238
2017-12-07 16:07:06 -08:00
Phil Cohen
13c1452d62 rebase: rerun a rebase on-disk if IMM merge conflicts arise
Differential Revision: https://phab.mercurial-scm.org/D1249
2017-12-08 12:14:38 -08:00
Phil Cohen
993b6df471 rebase: add concludememorynode(), and call it when rebasing in-memory
Differential Revision: https://phab.mercurial-scm.org/D1248
2017-12-07 22:35:43 -08:00
Phil Cohen
32f682c3c2 rebase: pass the wctx object (IMM or on-disk) to merge.update
Differential Revision: https://phab.mercurial-scm.org/D1247
2017-12-07 16:07:06 -08:00
Phil Cohen
bfa6af20ae rebase: do not update if IMM; instead, set the overlaywctx's parents
Differential Revision: https://phab.mercurial-scm.org/D1246
2017-12-07 16:07:06 -08:00
Phil Cohen
52e3fa5c0f rebase: pass wctx to rebasenode()
Differential Revision: https://phab.mercurial-scm.org/D1245
2017-12-07 16:07:06 -08:00
Yuya Nishihara
2cc325585b check-code: allow tabs in heredoc 2017-12-09 00:39:15 +09:00
Anton Shestakov
80d803c705 hgweb: rewrite template = A and B or C to be a proper ternary operator 2017-12-08 22:27:14 +08:00