mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
9d58066f0c
Summary: There was an issue where if the prefetch inside cansendtrees failed, it wouldn't allow it to actually try the operation. This is undesirable, since prefetch only talks to the server while the actual tree fetch will also attempt to generate a tree from an old flat manifest. Ideally we'd have a more unified flow here, where we could have the server let us know what nodes it couldn't find, then the client could try other options for the remaining nodes, but that requires significantly more refactoring. Reviewed By: quark-zju Differential Revision: D7450662 fbshipit-source-id: a023f27ee4b74786633e4dce7e62f3d9604c2b7f
322 lines
8.5 KiB
Perl
322 lines
8.5 KiB
Perl
$ . "$TESTDIR/library.sh"
|
|
$ . "$TESTDIR/infinitepush/library.sh"
|
|
|
|
$ setupcommon
|
|
|
|
$ hginit master
|
|
$ cd master
|
|
$ setupserver
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> pushrebase=
|
|
> treemanifest=
|
|
> [remotefilelog]
|
|
> server=True
|
|
> [treemanifest]
|
|
> server=True
|
|
> EOF
|
|
$ echo x > x
|
|
$ hg commit -qAm 'add x'
|
|
$ cd ..
|
|
|
|
Push a non-tree scratch branch from one client
|
|
|
|
$ hgcloneshallow ssh://user@dummy/master normal-client -q
|
|
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob)
|
|
$ cd normal-client
|
|
$ mkdir bar
|
|
$ echo >> bar/car
|
|
$ hg commit -qAm 'add bar/car'
|
|
$ echo >> bar/car
|
|
$ hg commit -qm 'edit bar/car'
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> treemanifest=
|
|
> fastmanifest=
|
|
>
|
|
> [remotefilelog]
|
|
> usefastdatapack=True
|
|
>
|
|
> [fastmanifest]
|
|
> usecache=False
|
|
> usetree=True
|
|
> EOF
|
|
$ hg push --to scratch/nontree --create
|
|
pushing to ssh://user@dummy/master
|
|
searching for changes
|
|
1 trees fetched over * (glob)
|
|
remote: pushing 2 commits:
|
|
remote: 42ec76eb772a add bar/car
|
|
remote: 6a9819ced061 edit bar/car
|
|
$ clearcache
|
|
$ cd ..
|
|
|
|
Push a tree-only scratch branch from another client
|
|
$ hgcloneshallow ssh://user@dummy/master client1 -q --config extensions.treemanifest= --config treemanifest.treeonly=True
|
|
1 trees fetched over * (glob)
|
|
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob)
|
|
$ cd client1
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> treemanifest=
|
|
>
|
|
> [remotefilelog]
|
|
> usefastdatapack=True
|
|
>
|
|
> [treemanifest]
|
|
> treeonly=True
|
|
> sendtrees=True
|
|
> EOF
|
|
|
|
$ mkdir subdir
|
|
$ echo "my change" >> subdir/a
|
|
$ hg commit -qAm 'add subdir/a'
|
|
$ echo "my other change" >> subdir/a
|
|
$ hg commit -qAm 'edit subdir/a'
|
|
$ hg push --to scratch/foo --create
|
|
pushing to ssh://user@dummy/master
|
|
searching for changes
|
|
remote: pushing 2 commits:
|
|
remote: 02c12aef64ff add subdir/a
|
|
remote: 5a7a7de8a420 edit subdir/a
|
|
$ cd ..
|
|
|
|
Pull a non-tree scratch branch into a normal client
|
|
|
|
$ hgcloneshallow ssh://user@dummy/master normal-client2 -q
|
|
$ cd normal-client2
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> treemanifest=
|
|
> fastmanifest=
|
|
>
|
|
> [remotefilelog]
|
|
> usefastdatapack=True
|
|
>
|
|
> [fastmanifest]
|
|
> usecache=False
|
|
> usetree=True
|
|
> EOF
|
|
$ hg pull -r scratch/nontree
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 2 changesets with 2 changes to 1 files
|
|
new changesets 42ec76eb772a:6a9819ced061
|
|
(run 'hg update' to get a working copy)
|
|
$ hg log -r tip -vp
|
|
changeset: 2:6a9819ced061
|
|
tag: tip
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files: bar/car
|
|
description:
|
|
edit bar/car
|
|
|
|
|
|
diff -r 42ec76eb772a -r 6a9819ced061 bar/car
|
|
--- a/bar/car Thu Jan 01 00:00:00 1970 +0000
|
|
+++ b/bar/car Thu Jan 01 00:00:00 1970 +0000
|
|
@@ -1,1 +1,2 @@
|
|
|
|
+
|
|
|
|
Pull a treeonly scratch branch into a normal client
|
|
$ hg debugindex -m
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 bc0c2c938b92 000000000000 000000000000
|
|
1 44 59 0 1 bf0601d5cb94 bc0c2c938b92 000000000000
|
|
2 103 61 1 2 2e51d102996d bf0601d5cb94 000000000000
|
|
$ hg pull -r scratch/foo
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 2 changesets with 2 changes to 1 files (+1 heads)
|
|
new changesets 02c12aef64ff:5a7a7de8a420
|
|
(run 'hg heads' to see heads, 'hg merge' to merge)
|
|
- Verify no new manifest revlog entry was written
|
|
$ hg debugindex -m
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 bc0c2c938b92 000000000000 000000000000
|
|
1 44 59 0 1 bf0601d5cb94 bc0c2c938b92 000000000000
|
|
2 103 61 1 2 2e51d102996d bf0601d5cb94 000000000000
|
|
- ...but we can still read the manifest
|
|
$ hg log -r 02c12aef64ff --stat -T '{rev}\n'
|
|
3
|
|
subdir/a | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
$ cd ..
|
|
|
|
Set up another treeonly client
|
|
|
|
$ hgcloneshallow ssh://user@dummy/master client2 -q --config extensions.treemanifest= --config treemanifest.treeonly=True
|
|
$ cd client2
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> treemanifest=
|
|
>
|
|
> [remotefilelog]
|
|
> usefastdatapack=True
|
|
>
|
|
> [treemanifest]
|
|
> treeonly=True
|
|
> EOF
|
|
|
|
Pull just part of a treeonly scratch branch (this causes rebundling on the server)
|
|
|
|
$ hg pull -r 02c12aef64ff
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files
|
|
new changesets 02c12aef64ff
|
|
(run 'hg update' to get a working copy)
|
|
$ hg log -r 02c12aef64ff --stat
|
|
changeset: 1:02c12aef64ff
|
|
tag: tip
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add subdir/a
|
|
|
|
subdir/a | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
|
|
Pull a treeonly scratch branch into a treeonly client (non-rebundling)
|
|
|
|
$ hg pull -r scratch/foo
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 2 changes to 1 files
|
|
new changesets 5a7a7de8a420
|
|
(run 'hg update' to get a working copy)
|
|
$ hg log -G
|
|
o changeset: 2:5a7a7de8a420
|
|
| tag: tip
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: edit subdir/a
|
|
|
|
|
o changeset: 1:02c12aef64ff
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: add subdir/a
|
|
|
|
|
@ changeset: 0:085784c01c08
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add x
|
|
|
|
$ hg cat -r tip subdir/a
|
|
my change
|
|
my other change
|
|
$ ls_l .hg/store
|
|
-rw-r--r-- 392 00changelog.i
|
|
-rw-r--r-- 108 00manifesttree.i
|
|
drwxr-xr-x data
|
|
drwxrwxr-x packs
|
|
-rw-r--r-- 43 phaseroots
|
|
-rw-r--r-- 18 undo
|
|
-rw-r--r-- 2 undo.backupfiles
|
|
-rw-r--r-- 43 undo.phaseroots
|
|
|
|
Pull just part of a normal scratch branch (this causes rebundling on the server)
|
|
|
|
$ hg pull -r 42ec76eb772a
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
new changesets 42ec76eb772a
|
|
(run 'hg heads' to see heads, 'hg merge' to merge)
|
|
$ hg log -r 42ec76eb772a --stat
|
|
changeset: 3:42ec76eb772a
|
|
tag: tip
|
|
parent: 0:085784c01c08
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add bar/car
|
|
|
|
bar/car | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
Pull a normal scratch branch into a treeonly client
|
|
$ hg pull -r scratch/nontree
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 2 changes to 1 files
|
|
new changesets 6a9819ced061
|
|
(run 'hg update' to get a working copy)
|
|
$ hg log -r 42ec76eb772a -T ' ' --stat
|
|
bar/car | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
$ hg log -r 42ec76eb772a -T ' ' --stat
|
|
bar/car | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
$ cd ..
|
|
|
|
Pull a normal scratch branch into a normal client with rebundling where the
|
|
server has treemanifest enabled.
|
|
$ cd normal-client
|
|
$ hg pull -r 42ec76eb772a --config extensions.treemanifest=! --config fastmanifest.usetree=False
|
|
pulling from ssh://user@dummy/master
|
|
no changes found
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 0 changesets with 1 changes to 1 files
|
|
$ cd ..
|
|
|
|
Verify pushbackup in a treeonly client will convert old flat manifests into
|
|
trees
|
|
$ hgcloneshallow ssh://user@dummy/master ondemandconvertclient -q
|
|
$ cd ondemandconvertclient
|
|
$ echo >> foo
|
|
$ hg commit -Aqm 'add foo'
|
|
$ hg up -q '.^'
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> treemanifest=
|
|
>
|
|
> [remotefilelog]
|
|
> usefastdatapack=True
|
|
>
|
|
> [treemanifest]
|
|
> treeonly=True
|
|
> sendtrees=True
|
|
> EOF
|
|
$ hg pushbackup
|
|
starting backup * (glob)
|
|
searching for changes
|
|
remote: pushing 1 commit:
|
|
remote: 7e75be1136c3 add foo
|
|
finished in * seconds (glob)
|
|
$ cd ..
|
|
|
|
Verify its not on the server
|
|
$ cd master
|
|
$ hg log -G
|
|
@ changeset: 0:085784c01c08
|
|
tag: tip
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add x
|
|
|