Mercurial > hg
annotate tests/test-update-dest.t @ 40393:229d23cdb203
exchangev2: support fetching shallow files history
This commit teaches the exchangev2 client code to handle fetching shallow
files data.
Only shallow fetching of files data is supported: shallow fetching of
changeset and manifest data is explicitly not yet supported.
Previously, we would fetch file revisions for changesets that were received
by the current pull operation. In the new model, we calculate the set of
"relevant" changesets given the pull depth and only fetch files data for
those changesets.
We also teach the "filesdata" command invocation to vary parameters as needed.
The implementation here is far from complete or optimal. Subsequent pulls will
end up re-fetching a lot of files data. But the application of this data should
mostly be a no-op on the client, so it isn't a big deal.
Depending on the order file revisions are fetched in, revisions could get
inserted with the wrong revision number relationships. I think the best way
to deal with this is to remove revision numbers from storage and to either
dynamically derive them (by reconstructing a DAG from nodes/parents) or remove
revision numbers from the file storage interface completely.
A missing API that we'll likely want to write pretty soon is "ensure files
for revision(s) are present." We can kind of cajole exchangev2.pull() to do
this. But it isn't very efficient. For example, in simple cases like
widening the store to obtain data for a single revision, it is probably
more efficient to walk the manifest and find exactly which file revisions
are missing and to make explicit requests for just their data. In more
advanced cases, asking the server for all files data may be more efficient,
even though it requires sending data the client already has. There is tons
of room for future experimentation here. And TBH I'm not sure what the
final state will be.
Anyway, this commit gets us pretty close to being able to have shallow
and narrow checkouts with exchangev2/sqlite storage. Close enough that a
minimal extension should be able to provide fill in the gaps until the code
in core stabilizes and there is a user-facing way to trigger the
narrow/shallow bits from `hg clone` without also implying using of the
narrow extension...
Differential Revision: https://phab.mercurial-scm.org/D5169
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Fri, 19 Oct 2018 12:30:49 +0200 |
parents | eb586ed5d8ce |
children | 8d72e29ad1e0 |
rev | line source |
---|---|
31844
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
1 Test update.requiredest |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
2 $ cd $TESTTMP |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
3 $ cat >> $HGRCPATH <<EOF |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
4 > [commands] |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
5 > update.requiredest = True |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
6 > EOF |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
7 $ hg init repo |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
8 $ cd repo |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
9 $ echo a >> a |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
10 $ hg commit -qAm aa |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
11 $ hg up |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
12 abort: you must specify a destination |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
13 (for example: hg update ".::") |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
14 [255] |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
15 $ hg up . |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
16 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
17 $ HGPLAIN=1 hg up |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
18 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
19 $ hg --config commands.update.requiredest=False up |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
20 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
21 |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
22 $ cd .. |
478999e8281d
tests: move update requiredest test to own test file
Ryan McElroy <rmcelroy@fb.com>
parents:
diff
changeset
|
23 |
31845
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
24 Check update.requiredest interaction with pull --update |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
25 $ hg clone repo clone |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
26 updating to branch default |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
27 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
28 $ cd repo |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
29 $ echo a >> a |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
30 $ hg commit -qAm aa |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
31 $ cd ../clone |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
32 $ hg pull --update |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
33 abort: update destination required by configuration |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
34 (use hg pull followed by hg update DEST) |
86246530b8d2
pull: abort pull --update if config requires destination (issue5528)
Ryan McElroy <rmcelroy@fb.com>
parents:
31844
diff
changeset
|
35 [255] |
33980
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
36 |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
37 $ cd .. |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
38 |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
39 update.requiredest should silent the "hg update" text after pull |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
40 $ hg init repo1 |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
41 $ cd repo1 |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
42 $ hg pull ../repo |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
43 pulling from ../repo |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
44 requesting all changes |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
45 adding changesets |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
46 adding manifests |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
47 adding file changes |
8abbae93045a
pull: do not prompt "hg update" if update.requiredest is set
Jun Wu <quark@fb.com>
parents:
31845
diff
changeset
|
48 added 2 changesets with 2 changes to 1 files |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
33980
diff
changeset
|
49 new changesets 8f0162e483d0:048c2cb95949 |