##// END OF EJS Templates
setdiscovery: make progress on most connected groups each roundtrip...
setdiscovery: make progress on most connected groups each roundtrip Consider history like this: o | o | | | o | | | o |/ o | o | | | o | | | o |/ o | o | | | o | | | o |/ o ~ Assume the left mainline is available in the remote repo and the other commits are only in the local repo. Also imagine that instead of 3 local branches with 3 commits on each, there are 1000 branches (the number of commits on each doesn't matter much here). In such a scenario, the current setdiscovery code will pick a sample size of 200 among these branches and ask the remote which of them it has. However, the discovery for each such branch is completely independent of the discovery for the others -- knowing whether the remote has a commit in one branch doesn't give us any information about the other branches. The discovery will therefore take at least 5 roundtrips (maybe more depending on which commit in each linear chain was sampled). Since the discovery for each branch is independent, there is no reason to let one branch wait for another, so this patch makes it so we sample at least as many commits as there are branches. It may still happen (it's very likely, even) that we get multiple samples from one branch and none from another, but that will even out over a few rounds and I think this is still a big improvement. Because of http header size limits, we still use the old behavior unless experimental.httppostargs=true. I've timed this by running `hg debugdiscovery mozilla-unified --debug` in the mozilla-try repo. Both repos were local. Before this patch, last part of the output was: 2249 total queries in 5276.4859s elapsed time: 5276.652634 seconds heads summary: total common heads: 13 also local heads: 4 also remote heads: 8 both: 4 local heads: 28317 common: 4 missing: 28313 remote heads: 12 common: 8 unknown: 4 local changesets: 2014901 common: 530373 missing: 1484528 common heads: 1dad417c28ad 4a108e94d3e2 4d7ef530fffb 5350524bb654 777e60ca8853 7d97fafba271 9cd2ab4d0029 a55ce37217da d38398e5144e dcc6d7a0dc00 e09297892ada e24ec6070d7b fd559328eaf3 After this patch, the output was (including all the samples, since there were so few now): taking initial sample query 2; still undecided: 1599476, sample size is: 108195 sampling from both directions query 3; still undecided: 810922, sample size is: 194158 sampling from both directions query 4; still undecided: 325882, sample size is: 137302 sampling from both directions query 5; still undecided: 111459, sample size is: 74586 sampling from both directions query 6; still undecided: 26805, sample size is: 23960 sampling from both directions query 7; still undecided: 2549, sample size is: 2528 sampling from both directions query 8; still undecided: 21, sample size is: 21 8 total queries in 24.5064s elapsed time: 24.670051 seconds heads summary: total common heads: 13 also local heads: 4 also remote heads: 8 both: 4 local heads: 28317 common: 4 missing: 28313 remote heads: 12 common: 8 unknown: 4 local changesets: 2014901 common: 530373 missing: 1484528 common heads: 1dad417c28ad 4a108e94d3e2 4d7ef530fffb 5350524bb654 777e60ca8853 7d97fafba271 9cd2ab4d0029 a55ce37217da d38398e5144e dcc6d7a0dc00 e09297892ada e24ec6070d7b fd559328eaf3 Differential Revision: https://phab.mercurial-scm.org/D2647

File last commit:

r34950:ff178743 stable
r42594:5b34972a default
Show More
phases.txt
100 lines | 3.0 KiB | text/plain | TextLexer
Matt Mackall
help: add phases topic
r15996 What are phases?
FUJIWARA Katsunori
doc: unify section level between help topics...
r17267 ================
Matt Mackall
help: add phases topic
r15996
Phases are a system for tracking which changesets have been or should
be shared. This helps prevent common mistakes when modifying history
(for instance, with the mq or rebase extensions).
Each changeset in a repository is in one of the following phases:
- public : changeset is visible on a public server
- draft : changeset is not yet published
- secret : changeset should not be pushed, pulled, or cloned
These phases are ordered (public < draft < secret) and no changeset
can be in a lower phase than its ancestors. For instance, if a
changeset is public, all its ancestors are also public. Lastly,
Johan Samyn
help: add verb to sentence in phases.txt
r16244 changeset phases should only be changed towards the public phase.
Matt Mackall
help: add phases topic
r15996
How are phases managed?
FUJIWARA Katsunori
doc: unify section level between help topics...
r17267 =======================
Matt Mackall
help: add phases topic
r15996
For the most part, phases should work transparently. By default, a
changeset is created in the draft phase and is moved into the public
phase when it is pushed to another repository.
Once changesets become public, extensions like mq and rebase will
refuse to operate on them to prevent creating duplicate changesets.
Phases can also be manually manipulated with the :hg:`phase` command
if needed. See :hg:`help -v phase` for examples.
Matt Harbison
help: minor copy editing for grammar
r34950 To make your commits secret by default, put this in your
timeless
phases: mention how to make secret commits in help
r27514 configuration file::
[phases]
new-commit = secret
Matt Mackall
help: add phases topic
r15996 Phases and servers
FUJIWARA Katsunori
doc: unify section level between help topics...
r17267 ==================
Matt Mackall
help: add phases topic
r15996
Normally, all servers are ``publishing`` by default. This means::
- all draft changesets that are pulled or cloned appear in phase
public on the client
- all draft changesets that are pushed appear as public on both
client and server
- secret changesets are neither pushed, pulled, or cloned
.. note::
Simon Heimberg
help: remove last occurrences of ".. note::" without two newlines...
r20532
Matt Mackall
help: add phases topic
r15996 Pulling a draft changeset from a publishing server does not mark it
as public on the server side due to the read-only nature of pull.
Sometimes it may be desirable to push and pull changesets in the draft
phase to share unfinished work. This can be done by setting a
repository to disable publishing in its configuration file::
[phases]
Matt Mackall
help: fix publish option spelling in phases topic
r16000 publish = False
Wagner Bruna
help/phases: remove trailing whitespace
r15998
Jordi Gutiérrez Hermoso
doc: reword "config file" to "configuration file"...
r19295 See :hg:`help config` for more information on configuration files.
Matt Mackall
help: add phases topic
r15996
.. note::
Simon Heimberg
help: remove last occurrences of ".. note::" without two newlines...
r20532
Matt Mackall
help: add phases topic
r15996 Servers running older versions of Mercurial are treated as
publishing.
Pierre-Yves David
phases: add a formal note that hash of secret changeset may leak out...
r20299 .. note::
Simon Heimberg
help: remove last occurrences of ".. note::" without two newlines...
r20532
Pierre-Yves David
phases: add a formal note that hash of secret changeset may leak out...
r20299 Changesets in secret phase are not exchanged with the server. This
applies to their content: file names, file contents, and changeset
metadata. For technical reasons, the identifier (e.g. d825e4025e39)
of the secret changeset may be communicated to the server.
Matt Mackall
help: add examples to phases topic
r16011 Examples
FUJIWARA Katsunori
doc: unify section level between help topics...
r17267 ========
Matt Mackall
help: add examples to phases topic
r16011
- list changesets in draft or secret phase::
hg log -r "not public()"
- change all secret changesets to draft::
hg phase --draft "secret()"
- forcibly move the current changeset and descendants from public to draft::
hg phase --force --draft .
Matt Harbison
help: minor copy editing for grammar
r34950 - show a list of changeset revisions and each corresponding phase::
Matt Mackall
help: add examples to phases topic
r16011
hg log --template "{rev} {phase}\n"
Matt Mackall
phases: add resync example to help topic
r16041 - resynchronize draft changesets relative to a remote repository::
FUJIWARA Katsunori
doc: use double quotation mark to quote arguments in examples for Windows users...
r19959 hg phase -fd "outgoing(URL)"
Matt Mackall
phases: add resync example to help topic
r16041
Matt Mackall
help: add examples to phases topic
r16011 See :hg:`help phase` for more information on manually manipulating phases.