mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
9473b487b5
Summary: Enables treemanifest for about 100 more tests. To make them pass I had to expose the gettreepack capability from peers, which just works, and enable treeonly and sendtrees by default in the tests, which I probably should've done before anyway. Reviewed By: quark-zju Differential Revision: D21894955 fbshipit-source-id: 7a6a4d453824fb8c81a797a5487bf2ecc2b67761
163 lines
5.7 KiB
Perl
163 lines
5.7 KiB
Perl
#chg-compatible
|
|
|
|
$ CACHEDIR=`pwd`/hgcache
|
|
|
|
$ . "$TESTDIR/library.sh"
|
|
|
|
Create server
|
|
$ hginit master
|
|
$ cd master
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [treemanifest]
|
|
> server=True
|
|
> [remotefilelog]
|
|
> server=True
|
|
> EOF
|
|
|
|
$ mkdir subdir
|
|
$ echo x > subdir/x
|
|
$ hg commit -qAm 'add subdir/x'
|
|
$ cd ..
|
|
|
|
Create client2 - it will have only the first commit, so client1 will be pushing
|
|
two server and one local commits later.
|
|
$ hgcloneshallow ssh://user@dummy/master client2 -q
|
|
fetching tree '' 85b359fdb09e9b8d7ac4a74551612b277345e8fd
|
|
2 trees fetched over * (glob)
|
|
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) (?)
|
|
$ cat >> client2/.hg/hgrc <<EOF
|
|
> [remotefilelog]
|
|
> reponame=master
|
|
> cachepath=$CACHEDIR
|
|
> EOF
|
|
|
|
Create create two more server commits
|
|
$ cd master
|
|
$ echo x >> subdir/x
|
|
$ hg commit -m 'modify subdir/x'
|
|
$ echo x >> subdir/x
|
|
$ hg commit -m 'modify subdir/x again'
|
|
$ cd ..
|
|
|
|
Create client1 - it will have both server commits
|
|
$ hgcloneshallow ssh://user@dummy/master client1 -q
|
|
fetching tree '' 90044db98b33ed191d9e056e2c2ec65ae7af8338, based on 85b359fdb09e9b8d7ac4a74551612b277345e8fd, found via b8ff91c925b4
|
|
2 trees fetched over * (glob)
|
|
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) (?)
|
|
$ cd client1
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [remotefilelog]
|
|
> reponame=master
|
|
> cachepath=$CACHEDIR
|
|
> EOF
|
|
|
|
$ echo a > a
|
|
$ mkdir dir
|
|
$ echo b > dir/b
|
|
$ hg commit -Aqm 'initial commit'
|
|
|
|
$ ls .hg/store/packs/manifests
|
|
53e6d2d846d94f543bad25dcbaa1f753c3ce9fa6.histidx
|
|
53e6d2d846d94f543bad25dcbaa1f753c3ce9fa6.histpack
|
|
b7cac023ec87107fd7c501085ba31c96485d802d.dataidx
|
|
b7cac023ec87107fd7c501085ba31c96485d802d.datapack
|
|
|
|
$ clearcache
|
|
|
|
Pushing p2p with sendtrees=True puts the received packs in the local pack store
|
|
# Prefetch client2 so we dont see any downloads related to what the target
|
|
# already has.
|
|
$ hg -R ../client2 prefetch -r 'all()'
|
|
2 trees fetched over * (glob)
|
|
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) (?)
|
|
$ cp ../client2/.hg/hgrc ../client2/.hg/hgrc.bak
|
|
$ cat >> ../client2/.hg/hgrc <<EOF
|
|
> [remotefilelog]
|
|
> cachepath=$CACHEDIR/cache2
|
|
> EOF
|
|
|
|
# Push and expect downloads of both public trees (in arbitrary order)
|
|
$ hg push -q ssh://user@dummy/client2
|
|
fetching tree '' *, based on 85b359fdb09e9b8d7ac4a74551612b277345e8fd, found via 54609f68e211 (glob)
|
|
2 trees fetched over * (glob)
|
|
fetching tree '' *, based on *, found via 54609f68e211 (glob)
|
|
2 trees fetched over * (glob)
|
|
remote: 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) (?)
|
|
2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over * (glob) (?)
|
|
$ ls ../client2/.hg/store/packs/manifests
|
|
700fb8a7918068e308a998d338d1689074118d07.histidx
|
|
700fb8a7918068e308a998d338d1689074118d07.histpack
|
|
d2b7bb314b43d876961a5d4791b54e2b2ef2bcd2.dataidx
|
|
d2b7bb314b43d876961a5d4791b54e2b2ef2bcd2.datapack
|
|
$ mv ../client2/.hg/hgrc.bak ../client2/.hg/hgrc
|
|
$ hg debughistorypack ../client2/.hg/store/packs/manifests/*histidx
|
|
|
|
|
|
Node P1 Node P2 Node Link Node Copy From
|
|
3ffa0e0bbc70 90044db98b33 000000000000 54609f68e211
|
|
|
|
dir
|
|
Node P1 Node P2 Node Link Node Copy From
|
|
23226e7a252c 000000000000 000000000000 54609f68e211
|
|
|
|
subdir
|
|
Node P1 Node P2 Node Link Node Copy From
|
|
143a95c22d77 a18d21674e76 000000000000 b8ff91c925b4
|
|
|
|
Pulling between peers should send local trees but not remote trees
|
|
# Strip back one server commit and one draft commit, so we can pull them again
|
|
$ cd ../client2
|
|
$ hg debugstrip -r 2 --no-backup
|
|
# Delete the old local tree data from the draft commit, so we can verify it is
|
|
# downloaded again during pull.
|
|
$ rm -rf .hg/store/packs/*
|
|
# Change this client to use a different cache from the other client, since the
|
|
# other client may populate data that we need to test if this client is
|
|
# downloading.
|
|
$ cp .hg/hgrc .hg/hgrc.bak
|
|
$ mkdir $TESTTMP/hgcache2
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [remotefilelog]
|
|
> cachepath=$TESTTMP/hgcache2
|
|
> EOF
|
|
# Force the draft commit to be public so we can ensure it's trees are delivered
|
|
# despite it being public.
|
|
$ rm -rf $TESTTMP/hgcache2/*
|
|
$ hg pull -q --config treemanifest.sendtrees=True ../client1 --config remotefilelog.fallbackpath=ssh://user@dummy/master
|
|
2 trees fetched over * (glob)
|
|
# Check that the local commits for the draft commit were downloaded to the local store.
|
|
$ ls_l .hg/store/packs/manifests
|
|
-r--r--r-- 1273 700fb8a7918068e308a998d338d1689074118d07.histidx
|
|
-r--r--r-- 274 700fb8a7918068e308a998d338d1689074118d07.histpack
|
|
-r--r--r-- 1154 d2b7bb314b43d876961a5d4791b54e2b2ef2bcd2.dataidx
|
|
-r--r--r-- 414 d2b7bb314b43d876961a5d4791b54e2b2ef2bcd2.datapack
|
|
$ hg debugdatapack .hg/store/packs/manifests/*.datapack
|
|
.hg/store/packs/manifests/d2b7bb314b43d876961a5d4791b54e2b2ef2bcd2:
|
|
dir:
|
|
Node Delta Base Delta Length Blob Size
|
|
23226e7a252c 000000000000 43 (missing)
|
|
|
|
subdir:
|
|
Node Delta Base Delta Length Blob Size
|
|
143a95c22d77 000000000000 43 (missing)
|
|
|
|
(empty name):
|
|
Node Delta Base Delta Length Blob Size
|
|
3ffa0e0bbc70 000000000000 138 (missing)
|
|
|
|
# Verify the real-public commit wasn't received during the pull and therefore
|
|
# has to be downloaded on demand.
|
|
$ rm -rf $TESTTMP/hgcache2/*
|
|
$ ls_l $TESTTMP/hgcache2/
|
|
$ hg manifest -r 'tip^'
|
|
fetching tree '' 90044db98b33ed191d9e056e2c2ec65ae7af8338, found via b8ff91c925b4
|
|
2 trees fetched over * (glob)
|
|
subdir/x
|
|
# Verify the fake-public commit was received during the pull and does not
|
|
# require additional ondemand downloads.
|
|
$ hg manifest -r tip
|
|
a
|
|
dir/b
|
|
subdir/x
|
|
$ mv .hg/hgrc.bak .hg/hgrc
|