sapling/eden/scm/tests/test-fb-hgext-treemanifest-infinitepush.t
Jun Wu 7a759b6075 visibility: remove public heads
Summary:
Remove public heads when using Rust changelog backends. This should address
some issues seen in commit cloud sync.

This is done at the metalog commit time so we get the latest "remotenames" data for
accurate "public()" set calculation.

Reviewed By: singhsrb

Differential Revision: D26792731

fbshipit-source-id: 00b894fee9804740d664dad0ac47be564820da33
2021-03-03 18:06:08 -08:00

326 lines
9.3 KiB
Perl

#chg-compatible
$ . "$TESTDIR/library.sh"
$ . "$TESTDIR/infinitepush/library.sh"
$ setconfig treemanifest.flatcompat=False
$ setconfig remotefilelog.write-hgcache-to-indexedlog=False remotefilelog.write-local-to-indexedlog=False
$ setupcommon
$ enable remotenames
$ hginit master
$ cd master
$ setupserver
$ cat >> .hg/hgrc <<EOF
> [extensions]
> pushrebase=
> [remotefilelog]
> server=True
> shallowtrees=True
> [treemanifest]
> server=True
> EOF
$ echo x > x
$ hg commit -qAm 'add x'
$ hg bookmark master
$ cd ..
Push a non-tree scratch branch from one client
$ hgcloneshallow ssh://user@dummy/master normal-client -q
fetching tree '' bc0c2c938b929f98b1c31a8c5994396ebb096bf0, found via 085784c01c08
1 trees fetched over * (glob)
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) (?)
$ cd normal-client
$ cat >> .hg/hgrc <<EOF
> [treemanifest]
> sendtrees=True
> EOF
$ mkdir bar
$ echo >> bar/car
$ hg commit -qAm 'add bar/car'
$ echo >> bar/car
$ hg commit -qm 'edit bar/car'
$ hg push --to scratch/nontree --create
pushing to ssh://user@dummy/master
searching for changes
remote: pushing 2 commits:
remote: 3ef288300b64 add bar/car
remote: ebde88dba372 edit bar/car
$ clearcache
$ cd ..
Push a tree-only scratch branch from another client
$ hgcloneshallow ssh://user@dummy/master client1 -q
fetching tree '' bc0c2c938b929f98b1c31a8c5994396ebb096bf0, found via 085784c01c08
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
> [treemanifest]
> 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
$ 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
$ hg log -r tip -vp
commit: ebde88dba372
bookmark: default/scratch/nontree
hoistedname: scratch/nontree
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: bar/car
description:
edit bar/car
diff -r 3ef288300b64 -r ebde88dba372 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 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
- Verify no new manifest revlog entry was written
- ...but we can still read the manifest
$ hg log -r 02c12aef64ff --stat -T '{node}\n'
02c12aef64ffa8bfcb6fe0054cb75084416dd43d
subdir/a | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$ cd ..
Set up another treeonly client
$ hgcloneshallow ssh://user@dummy/master client2 -q
$ cd client2
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
$ hg log -r 02c12aef64ff --stat
commit: 02c12aef64ff
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
$ hg log -G
o commit: 5a7a7de8a420
│ bookmark: default/scratch/foo
│ hoistedname: scratch/foo
│ user: test
│ date: Thu Jan 01 00:00:00 1970 +0000
│ summary: edit subdir/a
o commit: 02c12aef64ff
│ user: test
│ date: Thu Jan 01 00:00:00 1970 +0000
│ summary: add subdir/a
@ commit: 085784c01c08
bookmark: default/master
hoistedname: master
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
Pull just part of a normal scratch branch (this causes rebundling on the server)
$ hg pull -r 3ef288300b64
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
$ hg log -r 3ef288300b64 --stat
commit: 3ef288300b64
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
$ hg log -r 3ef288300b64 -T ' ' --stat
bar/car | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$ hg log -r 3ef288300b64 -T ' ' --stat
bar/car | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$ cd ..
Verify hg cloud backup 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 '.^'
$ hg cloud backup
backing up stack rooted at 7e75be1136c3
commitcloud: backed up 1 commit
remote: pushing 1 commit:
remote: 7e75be1136c3 add foo
$ cd ..
Verify its not on the server
$ cd master
$ hg log -G
@ commit: 085784c01c08
bookmark: master
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add x
Test delivering public and draft commits to the client. Verify we don't deliver
treemanifest data for the public commits.
$ cd ../client1
$ hg log -G -T '{node|short} {phase} {desc}'
@ 5a7a7de8a420 draft edit subdir/a
o 02c12aef64ff draft add subdir/a
o 085784c01c08 public add x
# Strip all the commits so we can pull them again.
$ hg debugstrip -q -r 'all()' --no-backup
# Clear out all the tree data, so we can see exactly what is downloaded in the
# upcoming pull.
$ rm -rf .hg/store/packs/*
$ clearcache
# Pull one infinitepush commit and one normal commit
$ hg pull -r 02c12aef64ffa8bfc
pulling from ssh://user@dummy/master
adding changesets
adding manifests
adding file changes
added 1 changesets with 0 changes to 0 files
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
$ hg log -G -T '{node|short} {phase} {desc}'
o 02c12aef64ff draft add subdir/a
o 085784c01c08 public add x
# Verify only the infinitepush commit tree data was downloaded
$ hg debugdatapack .hg/store/packs/manifests/*datapack
.hg/store/packs/manifests/a9b899bcf54bca96b39e9e135ca0625126487ceb:
subdir:
Node Delta Base Delta Length Blob Size
9eee655b90d1 000000000000 43 (missing)
(empty name):
Node Delta Base Delta Length Blob Size
604088751312 000000000000 92 (missing)
# Create a new commit on master with a noticeable number of trees
$ cd ../master
$ mkdir -p deep/dir/for/many/trees
$ echo x > deep/dir/for/many/trees/x
$ hg commit -Aqm "add deep x"
$ cd ../client1
$ hg pull -q
# Create a new root with just one tree
$ hg up -q null
$ echo z > z
$ hg commit -Aqm "add z"
# Merge the root into master and push the merge as a backup
$ hg up -q f027ebc7ba78
2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over * (glob) (?)
fetching tree '' 92ea8e774335a78205d4837583cf4224b5fc5c33, found via f027ebc7ba78
6 trees fetched over * (glob)
$ hg merge d32fd17cb041
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -qm "merge"
$ hg cloud backup
backing up stack rooted at d32fd17cb041
commitcloud: backed up 2 commits
remote: pushing 2 commits:
remote: d32fd17cb041 add z
remote: 8b1db7b72253 merge
# Check the bundle. It should only have 2 trees (one from z and one for the merged
# root directory)
$ hg debugbundle $TESTTMP/master/.hg/scratchbranches/filebundlestore/95/ac/95ac1702067611e314fd8e7d61ed1ff6d2485228
Stream params: {}
changegroup -- {version: 02}
d32fd17cb041b810cad28724776c6d51faad59dc
8b1db7b722533971a8133917e17a356a729cc281
b2x:treegroup2 -- {cache: False, category: manifests, version: 1}
2 data items, 2 history items
03e96018741b6da273fcfabe5defa390ba0da1ae
ddb35f099a648a43a997aef53123bce309c794fd