sapling/eden/scm/tests/test-fb-hgext-treemanifest-comparetrees.t
Durham Goode a9f8bbf176 treemanifest: always send draft commit trees
Summary:
We encountered an issue where an infinitepush bundle did not contain
trees for some of the commits it contained. This happened when multiple users
were working on the same branch.  Our previous heuristic decided to not send
trees if they weren't in the local store, but with us transitioning to Mononoke
(which enables draft commit data to be fetched ondemand) this invariant doesn't
always hold true.

Let's always upload trees for draft commits. Hopefully Mononoke can take over on
the server completely soon and we can get rid of all this special casing and do
normal discovery.

This is a revert of D7992502, but that was added because it was possible to pull
directly from svn which would result in public commits that didn't exist on the
server yet and therefore needed to send their trees.  Since svn is gone, this is
probably safe to change back.

Reviewed By: quark-zju

Differential Revision: D21697921

fbshipit-source-id: c1abaa061207222490b146ee52f7949be6fe4b2a
2020-05-29 13:21:05 -07:00

72 lines
2.0 KiB
Perl

#chg-compatible
$ . "$TESTDIR/library.sh"
$ setconfig treemanifest.flatcompat=False
$ hginit master
$ cd master
$ cat >> .hg/hgrc <<EOF
> [extensions]
> pushrebase=
> treemanifest=
> [remotefilelog]
> server=True
> [treemanifest]
> server=True
> EOF
$ mkcommit root
$ hg phase -p -r 'all()'
Clone it
$ cd ..
$ hgcloneshallow ssh://user@dummy/master client1 -q --config extensions.treemanifest= --config treemanifest.treeonly=True
fetching tree '' 1dd55a482f8027ebff785185b3691491312757d3
1 trees fetched over * (glob)
1 files fetched over * (glob) (?)
$ cd client1
$ cat >> .hg/hgrc <<EOF
> [extensions]
> treemanifest=
>
> [treemanifest]
> treeonly=True
> sendtrees=True
> EOF
$ hg debugdrawdag <<EOS
> F # A/dir1/file = A
> / # A/dir2/file = A
> C E # A/dir3/file = A
> |/ # A/dir4/file = A
> B D # B/dir1/file = B
> |/ # B/dir2/file = B
> A # B/dir3/file = B
> # B/dir4/file = B
> # C/dir1/file = C
> # C/dir2/file = C
> # C/dir3/file = C
> # C/dir4/file = C
> # D/dir1/file = D
> # E/dir2/file = E
> # F/dir3/file = F
> EOS
$ hg bundle -f --base 'A+B+C' leaves.hg -r 'D+E+F'
3 changesets found
The bundle should have 6 tree items in it - the root tree, and the directory tree that is modified in each of the 3 commits.
$ hg debugbundle leaves.hg
Stream params: {Compression: BZ}
changegroup -- {nbchanges: 3, version: 02}
e77dab89c4644acd044afb734c17e20046be6ae7
97a6f48cdfe66f86ceca092b0619df4e5a99d6ec
72e9b93c4354749519aa668d05dd8d358ec3b6c5
b2x:treegroup2 -- {cache: False, category: manifests, version: 1}
6 data items, 6 history items
9aa450467c3cff6ce906129a8d87e2414c8a3adb
9ccae32052b23cce0b4771389f588b8d98787a5f
b3ec0b09ac898d08a4b9ebe89ab54f30ef2eca99
b5a05191267df8533dd03dfb0cf897eb862c702e dir1
9dc6720799554340d343db656f2181f9c99590f0 dir2
c355490c72c78063d7e05398f70f4897f407ce07 dir3