Boris Feld <boris.feld@octobus.net> [Thu, 07 Dec 2017 16:49:24 +0100] rev 35348
debugformat: handle non-boolean value for variant
Boris Feld <boris.feld@octobus.net> [Thu, 07 Dec 2017 16:12:32 +0100] rev 35347
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.
Boris Feld <boris.feld@octobus.net> [Thu, 07 Dec 2017 16:05:20 +0100] rev 35346
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.
Boris Feld <boris.feld@octobus.net> [Thu, 07 Dec 2017 16:19:46 +0100] rev 35345
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.
Boris Feld <boris.feld@octobus.net> [Thu, 07 Dec 2017 15:55:59 +0100] rev 35344
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.
Augie Fackler <augie@google.com> [Fri, 08 Dec 2017 23:48:23 -0500] rev 35343
tests: glob away ' that doesn't occur on all platforms in lfs test
Differential Revision: https://phab.mercurial-scm.org/D1623
Phil Cohen <phillco@fb.com> [Fri, 08 Dec 2017 12:44:27 -0800] rev 35342
rebase: extract _assignworkingcopy
Slightly cleaner, and makes it easier to hook this in an extension.
Differential Revision: https://phab.mercurial-scm.org/D1617
Phil Cohen <phillco@fb.com> [Fri, 08 Dec 2017 15:27:58 -0800] rev 35341
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
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 06 Dec 2017 06:40:27 +0530] rev 35340
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
Jun Wu <quark@fb.com> [Fri, 08 Dec 2017 14:20:34 -0800] rev 35339
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
Augie Fackler <augie@google.com> [Fri, 08 Dec 2017 16:14:19 -0500] rev 35338
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
Matthieu Laneuville <matthieu.laneuville@octobus.net> [Fri, 08 Dec 2017 17:20:11 +0900] rev 35337
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).
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 16:07:06 -0800] rev 35336
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
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 16:07:06 -0800] rev 35335
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
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 22:26:07 -0800] rev 35334
overlayworkingctx: add ``tomemctx()``
Differential Revision: https://phab.mercurial-scm.org/D1242
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 16:07:06 -0800] rev 35333
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
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 16:07:06 -0800] rev 35332
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
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 16:07:06 -0800] rev 35331
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
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 16:07:06 -0800] rev 35330
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Differential Revision: https://phab.mercurial-scm.org/D1238
Phil Cohen <phillco@fb.com> [Fri, 08 Dec 2017 12:14:38 -0800] rev 35329
rebase: rerun a rebase on-disk if IMM merge conflicts arise
Differential Revision: https://phab.mercurial-scm.org/D1249
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 22:35:43 -0800] rev 35328
rebase: add concludememorynode(), and call it when rebasing in-memory
Differential Revision: https://phab.mercurial-scm.org/D1248
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 16:07:06 -0800] rev 35327
rebase: pass the wctx object (IMM or on-disk) to merge.update
Differential Revision: https://phab.mercurial-scm.org/D1247
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 16:07:06 -0800] rev 35326
rebase: do not update if IMM; instead, set the overlaywctx's parents
Differential Revision: https://phab.mercurial-scm.org/D1246
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 16:07:06 -0800] rev 35325
rebase: pass wctx to rebasenode()
Differential Revision: https://phab.mercurial-scm.org/D1245
Yuya Nishihara <yuya@tcha.org> [Sat, 09 Dec 2017 00:39:15 +0900] rev 35324
check-code: allow tabs in heredoc
Anton Shestakov <av6@dwimlabs.net> [Fri, 08 Dec 2017 22:27:14 +0800] rev 35323
hgweb: rewrite `template = A and B or C` to be a proper ternary operator
Eamonn Kent <ekent@fb.com> [Wed, 06 Dec 2017 18:37:49 -0800] rev 35322
fsmonitor: fsmonitor should send wlock notifications to watchman
The fsmonitor extension should send state-enter and state-leave
notifications to watchman when the wlock is acquired/release, respectively.
This will allow watchman and watchman subscribers to customize behavior based
on whether source control operations are occurring.
Test Plan:
Tested checkout, update and working copy changes with extension enabled.
Differential Revision: https://phab.mercurial-scm.org/D1612
Eamonn Kent <ekent@fb.com> [Wed, 06 Dec 2017 18:37:49 -0800] rev 35321
fsmonitor: remove watchman transaction and working copy change notifications
Remove working copy change and transaction notifications. We were relying
upon callbacks on transaction function. This caused issues with lock ordering.
A different approach will be adopted in a subsequent commit.
Differential Revision: https://phab.mercurial-scm.org/D1611
Matthieu Laneuville <matthieu.laneuville@octobus.net> [Fri, 08 Dec 2017 16:54:59 +0900] rev 35320
patch: catch unexpected case in _inlinediff
If operation is neither 'diff.inserted' or 'diff.deleted', label and token won't
be define. This patch explicitely catches that exception.
Matthieu Laneuville <matthieu.laneuville@octobus.net> [Fri, 08 Dec 2017 16:47:18 +0900] rev 35319
patch: reverse _inlinediff output for consistency
Joerg Sonnenberger <joerg@bec.de> [Wed, 06 Dec 2017 15:46:41 +0100] rev 35318
phases: drop the list with phase of each rev, always comput phase sets
Change the C implementation of phasecache.loadphaserevs to provide only
the sets for draft and secret phase as well as the number of revisions
seen.
Change the pure Python implementation of the same functino to compute
the sets instead of the list of phases for each revision.
Change phasecache.phase to check the phase sets and assume public if the
revision is in neither draft nor secret set. This is computationally
slightly more expensive.
Change phasecache.getrevset for public() based queries to compute the
set of non-matching revisions and return the result as filtered
fullreposet. A shortcut is taken when no draft or secret revision
exists.
Bump the module version for the changed interface contract.
Overall, this saves around 16 Bytes per revision whenever the phasecache
is used, for the test case in issue5691 it is around 3MB. getrevset()
for a large repository is around 13% slower here, that seems an
acceptable trade off. Performance impact for phase() should be similar.
Differential Revision: https://phab.mercurial-scm.org/D1606
Joerg Sonnenberger <joerg@bec.de> [Fri, 08 Dec 2017 01:23:34 +0100] rev 35317
transaction: build changes['revs'] as range instead of a set
Revisions are added consecutively, so a range can easily represent them
in the changes list. This saves around 45 Bytes / revision on 64bit
platforms and reduces the memory footprint of issue5691 by 15MB.
Don't copy changes['revs'] in getobsoleted. Ranges have a very efficient
contains implementation already.
Differential Revision: https://phab.mercurial-scm.org/D1615
Augie Fackler <augie@google.com> [Wed, 06 Dec 2017 16:43:07 -0500] rev 35316
ui: add diff.showfunc to tweakdefaults
This is a little risky, as I think we can have some encoding weirdness
crop up. showfunc also isn't the most robust feature, but it's still
often useful context...
Differential Revision: https://phab.mercurial-scm.org/D1610
Augie Fackler <augie@google.com> [Wed, 06 Dec 2017 16:42:24 -0500] rev 35315
ui: add curses interface to tweakdefaults
This was part of the original proposal, and while *I* don't like the
curses interface, most users anecdotally seem to greatly prefer it to
plain text interfaces.
Differential Revision: https://phab.mercurial-scm.org/D1609
Boris Feld <boris.feld@octobus.net> [Wed, 06 Dec 2017 23:33:01 +0100] rev 35314
push: restrict common discovery to the pushed set
This changeset make use of the ability of the set discovery to only search
common changeset for a subset of the repository. Restricting that search to the
pushed set avoid potential waste of time finding out the status of many
unrelated related revision.
Repository with many heads were especially badly affected by this. Here is an
example of findcommonhead discovery for pushing 11 outgoing changeset on a
repository with tens of thousand of unrelated heads. (discovery run over a ssh
link to localhost).
Before:
queries: 92
time: 44.1996s
After:
queries: 3
time: 0.6938s
A x63 speedup even with a network link without latency.
Boris Feld <boris.feld@octobus.net> [Wed, 06 Dec 2017 22:44:51 +0100] rev 35313
setdiscover: allow to ignore part of the local graph
Currently, the push discovery first determines the full set of common nodes
before looking into what changesets are outgoing. When pushing a specific
subset, this can lead to pathological situations where we search for the status
of thousand of local heads that are unrelated to the requested pushes.
To fix this, we need to teach the discovery to ignores part of the graph. Most
of the necessary pieces were already in place. This changeset just makes them
available to higher level API and tests them.
Change actually impacting pushes are coming in a later changeset.
Boris Feld <boris.feld@octobus.net> [Thu, 07 Dec 2017 01:53:14 +0100] rev 35312
largefiles: allow to run 'debugupgraderepo' on repo with largefiles
The extensions wrap the necessary function to ensure the 'largefiles'
requirements won't be dropped.
It is now possible to run `hg debugupgraderepo` on a repository with largefiles.
Boris Feld <boris.feld@octobus.net> [Thu, 07 Dec 2017 01:51:54 +0100] rev 35311
upgraderepo: allow extension to register preserved requirements
Some requirement does not directly result from config and needs more advanced
logic to be preserved. The current example is 'largefiles'. We add a hook
point in the upgrade code so that extensions can handle these cases.
The 'largefiles' extension will use it in the next changeset.
Yuya Nishihara <yuya@tcha.org> [Thu, 22 Sep 2016 19:41:42 +0900] rev 35310
revset: make follow() accept empty startrev
This is the same behavior as ancestors(emptyset).
Yuya Nishihara <yuya@tcha.org> [Thu, 22 Sep 2016 19:40:07 +0900] rev 35309
revset: alias follow(startrev=rev) to ancestors(rev)
This seems natural given 'log -frREV' (with no file pattern) is equivalent
to 'log -frREV *'.
Yuya Nishihara <yuya@tcha.org> [Thu, 22 Sep 2016 19:35:36 +0900] rev 35308
revset: make follow() accept keyword arguments
Also renamed the argument from 'pattern' to 'file' conforming to
followlines().
Yuya Nishihara <yuya@tcha.org> [Thu, 22 Sep 2016 19:11:26 +0900] rev 35307
revset: make follow() accept multiple startrevs
The diff might look slightly complicated, but the initial "c = repo['.']" was
effective if rev = None.
Yuya Nishihara <yuya@tcha.org> [Thu, 22 Sep 2016 18:41:51 +0900] rev 35306
dagop: use heap to compute max rev in filectxancestors()
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Oct 2017 18:57:42 +0900] rev 35305
dagop: add smartset interface to filectxancestors()
The original filectx API is kept public since we'll need it to walk ancestor
(rev, match) pairs efficiently. The current implementation scans ancestors
twice for 'hg log -fp FILE'.
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 13:20:47 -0800] rev 35304
overlayworkingctx: add `_checkexist(path)`
This is in preparation to switch this class to inheriting (and being based off
a) `commitctx` instead of a `workingctx`. `filectx` has no `exists` function,
so this is how we'll fall back in that case.
Differential Revision: https://phab.mercurial-scm.org/D1237
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 13:20:47 -0800] rev 35303
overlayworkingctx: fix a bad reference to `self._path`
Differential Revision: https://phab.mercurial-scm.org/D1236
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 13:20:47 -0800] rev 35302
overlayworkingctx: track copy information in the context
We can no longer do so in the dirstate, so add the functions to do so here.
Differential Revision: https://phab.mercurial-scm.org/D1235
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 13:20:47 -0800] rev 35301
rebaseruntime: raise InMemoryMergeConflictsError on merge conflicts
Differential Revision: https://phab.mercurial-scm.org/D1234
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 13:20:47 -0800] rev 35300
rebase: do not bail on uncomitted changes if rebasing in-memory
Differential Revision: https://phab.mercurial-scm.org/D1233
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 13:25:23 -0800] rev 35299
rebase: add the --inmemory option flag; assign a wctx object for the rebase
In the future, the --inmemory flag might be deprecated in favor of something more
intelligent (for example, always rebasing in-memory if the working copy parent
isn't in the rebaseset). But we might keep it as a way to explicitly force IMM
on or off.
Differential Revision: https://phab.mercurial-scm.org/D1232
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 13:20:47 -0800] rev 35298
overlayworkingctx: move _wrappedctx out of the constructor
With rebase, we will be setting the _wrappedctx at a different point from the
wctx construction (somewhat later, and possibly several times). Move it to a
public function.
Differential Revision: https://phab.mercurial-scm.org/D1231
Phil Cohen <phillco@fb.com> [Thu, 07 Dec 2017 13:20:47 -0800] rev 35297
merge: don't check for unknown files in IMM
Differential Revision: https://phab.mercurial-scm.org/D1214
Jun Wu <quark@fb.com> [Fri, 13 Oct 2017 14:08:14 -0700] rev 35296
rebase: enable multidest by default
This was intended to be done by D470. But there was a minor documentation
issue. The feature is quite usable now so it gets formally documented and
enabled.
There is no behavior change for people not using the `SRC` or `ALLSRC` in
rebase destination revset.
.. feature:: Rebase with different destination per source revision
Previously, rebase only supports one unique destination. Now ``SRC`` and
``ALLSRC`` can be used in rebase destination revset to precisely define
destination per each individual source revision.
For example, the following command could move some orphaned changesets to
reasonable new places so they become no longer orphaned::
hg rebase
-r 'orphan()-obsolete()'
-d 'max((successors(max(roots(ALLSRC) & ::SRC)^)-obsolete())::)'
Differential Revision: https://phab.mercurial-scm.org/D1063
Phil Cohen <phillco@fb.com> [Fri, 01 Dec 2017 00:07:23 -0800] rev 35295
overlayworkingctx: make clean() public
It will be called directly by rebase after concluding a node.
Differential Revision: https://phab.mercurial-scm.org/D1230
Phil Cohen <phillco@fb.com> [Fri, 01 Dec 2017 00:07:23 -0800] rev 35294
overlayworkingctx: remove flushall()
Differential Revision: https://phab.mercurial-scm.org/D1216
Phil Cohen <phillco@fb.com> [Fri, 01 Dec 2017 00:07:23 -0800] rev 35293
merge: skip subrepo state, update hooks, and updating the dirstate in IMM
Differential Revision: https://phab.mercurial-scm.org/D1215
Phil Cohen <phillco@fb.com> [Fri, 01 Dec 2017 00:07:23 -0800] rev 35292
merge: remove calls to flushall()
Since D1105, these are unnecessary since IMM will now never use workers.
Differential Revision: https://phab.mercurial-scm.org/D1213
Phil Cohen <phillco@fb.com> [Fri, 01 Dec 2017 00:07:23 -0800] rev 35291
filemerge: raise InMemoryMergeConflictsError if we hit merge conflicts in IMM
Merge conflicts might be supported in the future, but for now are kept out of
scope.
Any places where we used to call `flushall()` should be replaced with some kind
of exception. At this point, IMM M1 is no longer supported.
Differential Revision: https://phab.mercurial-scm.org/D1212
Phil Cohen <phillco@fb.com> [Fri, 01 Dec 2017 00:07:23 -0800] rev 35290
context: switch ctx() use to changectx()
I added `ctx()` to `overlayworkingfilectx`, (and before that, `absentfilectx`),
because `absentfilectx` had reference to this function in its `cmp()` function.
But the standard is actually `changectx()`, and no other class implements
`ctx()`. So let's use the standard name.
(As a result, I'm not sure that part of the `absentfilectx` comparator ever
worked! It was written before I added either function.)
This will be necessary in the next patch.
Differential Revision: https://phab.mercurial-scm.org/D1211
Matt Harbison <matt_harbison@yahoo.com> [Wed, 06 Dec 2017 22:56:15 -0500] rev 35289
lfs: introduce a user level cache for lfs files
This is the same mechanism in place for largefiles, and solves several problems
working with multiple local repositories. The existing largefiles method is
reused in place, because I suspect that there are other functions that can be
shared. If we wait a bit to identify more before `hg cp lfutil.py ...`, the
history will be easier to trace.
The push between repo14 and repo15 in test-lfs.t arguably shouldn't be uploading
any files with a local push. Maybe we can revisit that when `hg push` without
'lfs.url' can upload files to the push destination. Then it would be consistent
for blobs in a local push to be linked to the local destination's cache.
The cache property is added to run-tests.py, the same as the largefiles
property, so that test generated files don't pollute the real location. Having
files available locally broke a couple existing lfs-test-server tests, so the
cache is cleared in a few places to force file download.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 05 Dec 2017 23:08:59 -0500] rev 35288
largefiles: refactor _usercachedir() to allow reuse with lfs
Largefiles puts everything into a flat directory, while lfs divides files up by
creating subdirectories consisting of the first two characters of the hash.
Therefore, pointing at the largefiles cache won't work.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 16 Nov 2017 21:05:15 -0500] rev 35287
lfs-test: note a problem with unpushed lfs files and cloning/sharing
AFAIK, this isn't an issue with largefiles because it knows how to look in the
system-wide cache.
Matthieu Laneuville <matthieu.laneuville@octobus.net> [Thu, 26 Oct 2017 00:13:38 +0900] rev 35286
patch: add within-line color diff capacity
The `diff' command usually writes deletion in red and insertions in green. This
patch adds within-line colors, to highlight which part of the lines differ.
Lines to compare are decided based on their similarity ratio, as computed by
difflib SequenceMatcher, with an arbitrary threshold (0.7) to decide at which
point two lines are considered entirely different (therefore no inline-diff
required).
The current implementation is kept behind an experimental flag in order to test
the effect on performance. In order to activate it, set inline-color-diff to
true in [experimental].
Yuya Nishihara <yuya@tcha.org> [Thu, 22 Sep 2016 18:23:58 +0900] rev 35285
dagop: extend filectxancestors() to walk multiple files