mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 01:07:15 +03:00
1ce0eea5dc
Summary: Done by `sed`. Reviewed By: singhsrb Differential Revision: D24173576 fbshipit-source-id: f1d042b3da7f9b64e0e40b19317364e5cb9ae946
299 lines
11 KiB
Perl
299 lines
11 KiB
Perl
#chg-compatible
|
|
|
|
|
|
$ CACHEDIR=`pwd`/hgcache
|
|
$ . "$TESTDIR/hgsql/library.sh"
|
|
|
|
$ cat >> $HGRCPATH <<EOF
|
|
> [extensions]
|
|
> pushrebase=
|
|
> treemanifest=!
|
|
> [treemanifest]
|
|
> flatcompat=False
|
|
> treeonly=False
|
|
> EOF
|
|
|
|
Test that treemanifest backfill populates the database
|
|
|
|
$ initserver master master
|
|
$ initserver master-alreadysynced master
|
|
$ initserver master-new master
|
|
$ cd master
|
|
$ touch a && hg ci -Aqm a
|
|
$ mkdir dir
|
|
$ touch dir/b && hg ci -Aqm b
|
|
$ hg book master
|
|
|
|
$ cd ../master-alreadysynced
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> treemanifest=
|
|
> [treemanifest]
|
|
> server = True
|
|
> EOF
|
|
$ hg log -r tip --forcesync -T '{node}\n'
|
|
7b4cb4e1674c5469264add78a05260e436e8f400
|
|
|
|
$ cd ../master
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> treemanifest=
|
|
> [treemanifest]
|
|
> server = True
|
|
> EOF
|
|
$ DBGD=1 hg backfilltree
|
|
$ ls .hg/store/meta/dir
|
|
00manifest.i
|
|
|
|
Test that an empty repo syncs the tree revlogs
|
|
|
|
$ cd ../master-new
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> treemanifest=
|
|
> [treemanifest]
|
|
> server = True
|
|
> EOF
|
|
$ hg log -r tip --forcesync -T '{node}\n'
|
|
7b4cb4e1674c5469264add78a05260e436e8f400
|
|
$ ls .hg/store/meta/dir
|
|
00manifest.i
|
|
|
|
Test that we can replay backfills into an existing repo
|
|
$ cd ../master-alreadysynced
|
|
$ hg sqlreplay
|
|
$ ls .hg/store/meta/dir
|
|
00manifest.i
|
|
$ rm -rf .hg/store/00manifesttree* .hg/store/meta
|
|
$ hg sqlreplay --start 0 --end 0
|
|
$ hg debugindex .hg/store/00manifesttree.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 8515d4bfda76 000000000000 000000000000
|
|
$ hg sqlreplay --start 1 --end 2
|
|
$ hg debugindex .hg/store/00manifesttree.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 8515d4bfda76 000000000000 000000000000
|
|
1 44 58 0 1 898d94054864 8515d4bfda76 000000000000
|
|
$ cd ..
|
|
|
|
Test that trees created during push are synced to the db
|
|
|
|
$ initclient client
|
|
$ cd client
|
|
$ hg pull -q ssh://user@dummy/master
|
|
$ hg up -q tip
|
|
$ touch dir/c && hg ci -Aqm c
|
|
|
|
$ hg push ssh://user@dummy/master --to master
|
|
pushing to ssh://user@dummy/master
|
|
searching for changes
|
|
remote: pushing 1 changeset:
|
|
remote: c46827e4453c c
|
|
|
|
$ cd ../master-new
|
|
$ hg log -G -T '{desc}' --forcesync
|
|
o c
|
|
|
|
|
o b
|
|
|
|
|
o a
|
|
|
|
$ hg debugdata .hg/store/meta/dir/00manifest.i 1
|
|
b\x00b80de5d138758541c5f05265ad144ab9fa86d1db (esc)
|
|
c\x00b80de5d138758541c5f05265ad144ab9fa86d1db (esc)
|
|
|
|
Test that sqltreestrip deletes trees from history
|
|
$ cd ../client
|
|
$ mkdir dir2
|
|
$ echo >> dir2/d && hg ci -Aqm d
|
|
$ echo >> dir2/d && hg ci -Aqm d2
|
|
$ hg push ssh://user@dummy/master --to master
|
|
pushing to ssh://user@dummy/master
|
|
searching for changes
|
|
remote: pushing 2 changesets:
|
|
remote: b3adfc03d09d d
|
|
remote: fc50e1c24ca2 d2
|
|
|
|
$ hg -R ../master-alreadysynced log -r tip --forcesync > /dev/null
|
|
|
|
$ cd ../master
|
|
$ hg log -G -T '{desc}' --forcesync
|
|
o d2
|
|
|
|
|
o d
|
|
|
|
|
o c
|
|
|
|
|
@ b
|
|
|
|
|
o a
|
|
|
|
|
|
# First strip just the root treemanifest
|
|
$ hg sqltreestrip 2 --i-know-what-i-am-doing --root-only
|
|
*** YOU ARE ABOUT TO DELETE TREE HISTORY INCLUDING AND AFTER 2 (MANDATORY 5 SECOND WAIT) ***
|
|
mysql: deleting root trees with linkrevs >= 2
|
|
local: deleting root trees with linkrevs >= 2
|
|
$ hg debugindex .hg/store/00manifesttree.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 8515d4bfda76 000000000000 000000000000
|
|
1 44 58 0 1 898d94054864 8515d4bfda76 000000000000
|
|
$ hg debugindex .hg/store/meta/dir2/00manifest.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 3 d0729cbab2a9 000000000000 000000000000
|
|
1 44 44 -1 4 cc280c5b788f d0729cbab2a9 000000000000
|
|
|
|
# Then strip all treemanifests
|
|
$ hg sqltreestrip 2 --i-know-what-i-am-doing
|
|
*** YOU ARE ABOUT TO DELETE TREE HISTORY INCLUDING AND AFTER 2 (MANDATORY 5 SECOND WAIT) ***
|
|
mysql: deleting trees with linkrevs >= 2
|
|
local: deleting trees with linkrevs >= 2
|
|
$ hg debugindex .hg/store/00manifesttree.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 8515d4bfda76 000000000000 000000000000
|
|
1 44 58 0 1 898d94054864 8515d4bfda76 000000000000
|
|
$ hg debugindex .hg/store/meta/dir2/00manifest.i
|
|
rev offset length base linkrev nodeid p1 p2
|
|
$ hg debugindex .hg/store/00manifest.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 8515d4bfda76 000000000000 000000000000
|
|
1 44 59 0 1 898d94054864 8515d4bfda76 000000000000
|
|
2 103 59 1 2 7cdc42a14359 898d94054864 000000000000
|
|
3 162 60 2 3 0c96405fb5c3 7cdc42a14359 000000000000
|
|
4 222 60 3 4 8b833dfa4cc5 0c96405fb5c3 000000000000
|
|
$ hg status --change 4 --config treemanifest.treeonly=True
|
|
abort: "unable to find the following nodes locally or on the server: ('', 8b833dfa4cc566bfd4bcb4d85e4a128be5e49334)"
|
|
(commit: fc50e1c24ca2045a04dd4ed54838af28a022dd7c)
|
|
[255]
|
|
|
|
Refill the repository from the non-stripped master
|
|
$ cd ../master-alreadysynced
|
|
$ hg debugindex .hg/store/meta/dir2/00manifest.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 3 d0729cbab2a9 000000000000 000000000000
|
|
1 44 44 -1 4 cc280c5b788f d0729cbab2a9 000000000000
|
|
$ hg debugindex .hg/store/00manifesttree.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 8515d4bfda76 000000000000 000000000000
|
|
1 44 58 0 1 898d94054864 8515d4bfda76 000000000000
|
|
2 102 58 1 2 7cdc42a14359 898d94054864 000000000000
|
|
3 160 59 2 3 0c96405fb5c3 7cdc42a14359 000000000000
|
|
4 219 * -1 4 8b833dfa4cc5 0c96405fb5c3 000000000000 (glob)
|
|
$ hg debugdata .hg/store/meta/dir2/00manifest.i 1
|
|
d\x0028ad8a7cbb9ee7a7f5f50d46539b8dab63835959 (esc)
|
|
$ hg sqlverify
|
|
corruption: 'meta/dir/00manifest.i:f90dfbe4b2fd56ac55a98b322cf4dd420c5c07e5' with linkrev 2 exists on local disk, but not in sql
|
|
corruption: 'meta/dir2/00manifest.i:cc280c5b788f79ee2ec4479fc2e3daa3972dc0af' with linkrev 4 exists on local disk, but not in sql
|
|
corruption: 'meta/dir2/00manifest.i:d0729cbab2a9dece7b82fc241de6a62ecdd4a8b7' with linkrev 3 exists on local disk, but not in sql
|
|
corruption: '00manifesttree.i:8b833dfa4cc566bfd4bcb4d85e4a128be5e49334' with linkrev 4 exists on local disk, but not in sql
|
|
corruption: '00manifesttree.i:0c96405fb5c3fa57c048560e68bf33b87058ca1d' with linkrev 3 exists on local disk, but not in sql
|
|
corruption: '00manifesttree.i:7cdc42a143599f196ad3e5e6e2dd5a1f78475d82' with linkrev 2 exists on local disk, but not in sql
|
|
abort: Verification failed
|
|
[255]
|
|
$ hg sqlrefill --i-know-what-i-am-doing 1
|
|
$ hg sqlverify
|
|
Verification passed
|
|
$ cd ../master
|
|
$ hg sqlreplay
|
|
$ hg debugindex .hg/store/meta/dir2/00manifest.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 3 d0729cbab2a9 000000000000 000000000000
|
|
1 44 44 -1 4 cc280c5b788f d0729cbab2a9 000000000000
|
|
$ hg debugindex .hg/store/00manifesttree.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 8515d4bfda76 000000000000 000000000000
|
|
1 44 58 0 1 898d94054864 8515d4bfda76 000000000000
|
|
2 102 58 1 2 7cdc42a14359 898d94054864 000000000000
|
|
3 160 59 2 3 0c96405fb5c3 7cdc42a14359 000000000000
|
|
4 219 * -1 4 8b833dfa4cc5 0c96405fb5c3 000000000000 (glob)
|
|
$ hg debugdata .hg/store/meta/dir2/00manifest.i 1
|
|
d\x0028ad8a7cbb9ee7a7f5f50d46539b8dab63835959 (esc)
|
|
$ hg status --change 4 --config treemanifest.treeonly=True
|
|
M dir2/d
|
|
|
|
# Restrip
|
|
$ hg sqltreestrip 2 --i-know-what-i-am-doing
|
|
*** YOU ARE ABOUT TO DELETE TREE HISTORY INCLUDING AND AFTER 2 (MANDATORY 5 SECOND WAIT) ***
|
|
mysql: deleting trees with linkrevs >= 2
|
|
local: deleting trees with linkrevs >= 2
|
|
|
|
Test local only strip
|
|
$ cd ../master-alreadysynced
|
|
$ hg sqltreestrip 2 --local-only --i-know-what-i-am-doing
|
|
*** YOU ARE ABOUT TO DELETE TREE HISTORY INCLUDING AND AFTER 2 (MANDATORY 5 SECOND WAIT) ***
|
|
local: deleting trees with linkrevs >= 2
|
|
$ hg debugindex .hg/store/00manifesttree.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 8515d4bfda76 000000000000 000000000000
|
|
1 44 58 0 1 898d94054864 8515d4bfda76 000000000000
|
|
|
|
Refill trees in sql
|
|
(glob in the debugindex is because of different compression behavior in
|
|
different environments)
|
|
$ cd ../master
|
|
$ hg backfilltree
|
|
$ hg debugindex .hg/store/00manifesttree.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 8515d4bfda76 000000000000 000000000000
|
|
1 44 58 0 1 898d94054864 8515d4bfda76 000000000000
|
|
2 102 58 1 2 7cdc42a14359 898d94054864 000000000000
|
|
3 160 59 2 3 0c96405fb5c3 7cdc42a14359 000000000000
|
|
4 219 * -1 4 8b833dfa4cc5 0c96405fb5c3 000000000000 (glob)
|
|
$ hg status --change 4 --config treemanifest.treeonly=True
|
|
M dir2/d
|
|
|
|
Refill trees in the other master
|
|
$ cd ../master-alreadysynced
|
|
$ hg sqlreplay 2
|
|
$ hg status --change 4 --config treemanifest.treeonly=True
|
|
M dir2/d
|
|
$ cd ..
|
|
|
|
Test that trees are written in linkrev order
|
|
$ initserver ordermaster ordermaster
|
|
$ cat >> ordermaster/.hg/hgrc <<EOF
|
|
> [extensions]
|
|
> treemanifest=
|
|
> [treemanifest]
|
|
> server=True
|
|
> treeonly=True
|
|
> EOF
|
|
|
|
$ initclient order-client
|
|
$ cd order-client
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> treemanifest=
|
|
> [treemanifest]
|
|
> treeonly=True
|
|
> sendtrees=True
|
|
> [extensions]
|
|
> remotenames=
|
|
> EOF
|
|
|
|
$ echo a >> a
|
|
$ hg commit -Aqm A
|
|
$ hg up null -q
|
|
$ echo b >> b
|
|
$ hg commit -Aqm B
|
|
$ hg up null -q
|
|
$ echo c >> c
|
|
$ hg commit -Aqm C
|
|
$ hg up -q 0
|
|
$ hg merge -q 2
|
|
$ hg commit -Aqm Merge1
|
|
$ hg merge -q 1
|
|
$ hg commit -Aqm Merge2
|
|
|
|
$ hg push --config extensions.pushrebase=! --to master -q ssh://user@dummy/ordermaster --create
|
|
|
|
$ cd ../ordermaster
|
|
# These should be in linkrev order after pushing to hgsql
|
|
$ hg debugindex .hg/store/00manifesttree.i
|
|
rev offset length delta linkrev nodeid p1 p2
|
|
0 0 44 -1 0 a0c8bcbbb45c 000000000000 000000000000
|
|
1 44 44 -1 1 23226e7a252c 000000000000 000000000000
|
|
2 88 44 -1 2 86d7088ee657 000000000000 000000000000
|
|
3 132 55 2 3 6c51dc0bfc37 a0c8bcbbb45c 86d7088ee657
|
|
4 187 55 3 4 d2c02f8cb06c 6c51dc0bfc37 23226e7a252c
|