sapling/eden/scm/tests/test-commitcloud-sync-bookmarks.t
Durham Goode d832ea7afa treemanifest: change local tree sending to depend on phases
Summary:
When sending trees and files we try to avoid sending trees that are
available from the main server. To do so, we currently check to see if the
tree/file is from the local store (i.e. .hg/store instead of $HGCACHE).

In a future diff we'll be moving trees to use the Rust store, which doesn't
expose the difference between shared and local stores. So we need to stop
depending on logic to test the local store.

Instead we can test if the commit is public or not, and only send the tree/file
is the commit is not public. This is technically a revert of the 2018 D7992502 (5e95b0e32e)
diff, which stopped depending on phases because we'd receive public commits from
svn there were not public on the server yet. Since svn is gone, I think it's
safe go back to that way.

This code was usually to help when the client was further ahead than another
client and in some commit cloud edge cases, but 1) we don't do much/any p2p
exchange anymore, and 2) we did some work this year to ensure clients have more
up-to-date remote bookmarks during exchange (as a way of making phases and
discovery more reliable), so hopefully we can rely on phases more now.

Reviewed By: quark-zju

Differential Revision: D23639017

fbshipit-source-id: 34c13aa2b5ef728ea53ffe692081ef443e7e57b8
2020-09-16 21:39:25 -07:00

169 lines
5.1 KiB
Raku

#chg-compatible
$ enable amend commitcloud infinitepush rebase remotenames treemanifest pullcreatemarkers
$ configure dummyssh
$ setconfig commitcloud.hostname=testhost
$ setconfig remotefilelog.reponame=server
$ hg init server
$ cd server
$ setconfig infinitepush.server=yes infinitepush.reponame=testrepo
$ setconfig infinitepush.indextype=disk infinitepush.storetype=disk
$ setconfig treemanifest.server=True
$ touch base
$ hg commit -Aqm base
$ hg bookmark master
$ hg debugmakepublic .
$ cd ..
$ hg clone ssh://user@dummy/server client1 -q
$ cd client1
$ setconfig commitcloud.servicetype=local commitcloud.servicelocation=$TESTTMP commitcloud.token_enforced=False
$ hg cloud join
commitcloud: this repository is now connected to the 'user/test/default' workspace for the 'server' repo
commitcloud: synchronizing 'server' with 'user/test/default'
commitcloud: commits synchronized
finished in * (glob)
$ echo data > file
$ hg commit -Aqm "draft-commit
> Differential Revision: https://phabricator.fb.com/D1234"
$ hg book foo
$ hg prev -q
[df4f53] base
$ hg cloud sync -q
$ cd ..
$ hg clone ssh://user@dummy/server client2 -q
$ cd client2
$ setconfig commitcloud.servicetype=local commitcloud.servicelocation=$TESTTMP commitcloud.token_enforced=False
$ hg cloud join
commitcloud: this repository is now connected to the 'user/test/default' workspace for the 'server' repo
commitcloud: synchronizing 'server' with 'user/test/default'
pulling 00422fad0026 from ssh://user@dummy/server
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
commitcloud: commits synchronized
finished in * (glob)
$ tglogp
o 1: 00422fad0026 draft 'draft-commit
| Differential Revision: https://phabricator.fb.com/D1234' foo
@ 0: df4f53cec30a public 'base'
$ cd ..
Fake land the commit
$ cd server
$ echo 1 > serverfile
$ hg commit -Aqm public-commit-1
$ echo data > file
$ hg commit -Aqm "landed-commit
> Differential Revision: https://phabricator.fb.com/D1234"
$ echo 2 > serverfile
$ hg commit -Aqm public-commit-2
$ hg debugmakepublic .
$ cd ..
$ cd client1
$ hg pull
pulling from ssh://user@dummy/server
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 2 changes to 2 files
$ tglogp
o 4: 67d363c9001e public 'public-commit-2'
|
o 3: 441f69264760 public 'landed-commit
| Differential Revision: https://phabricator.fb.com/D1234'
o 2: 031d760782fb public 'public-commit-1'
|
| x 1: 00422fad0026 draft 'draft-commit
|/ Differential Revision: https://phabricator.fb.com/D1234' foo
@ 0: df4f53cec30a public 'base'
$ hg cloud sync -q
$ cd ../client2
$ hg cloud sync -q
$ tglogp
o 1: 00422fad0026 draft 'draft-commit
| Differential Revision: https://phabricator.fb.com/D1234' foo
@ 0: df4f53cec30a public 'base'
Rebasing the bookmark will make the draft commit disappear.
$ cd ../client1
$ hg rebase -b foo -d 67d363c9001e1d7227625f0fa5004aca4572d214
note: not rebasing 00422fad0026 "draft-commit" (foo), already in destination as 441f69264760 "landed-commit"
$ tglogp
o 4: 67d363c9001e public 'public-commit-2' foo
|
o 3: 441f69264760 public 'landed-commit
| Differential Revision: https://phabricator.fb.com/D1234'
o 2: 031d760782fb public 'public-commit-1'
|
@ 0: df4f53cec30a public 'base'
$ hg cloud sync
commitcloud: synchronizing 'server' with 'user/test/default'
commitcloud: commits synchronized
finished in * (glob)
$ tglogp
o 4: 67d363c9001e public 'public-commit-2' foo
|
o 3: 441f69264760 public 'landed-commit
| Differential Revision: https://phabricator.fb.com/D1234'
o 2: 031d760782fb public 'public-commit-1'
|
@ 0: df4f53cec30a public 'base'
Sync in client2. This will omit the bookmark because we don't have the landed commit.
$ cd ../client2
$ hg cloud sync -q
67d363c9001e1d7227625f0fa5004aca4572d214 not found, omitting foo bookmark
$ tglogp
@ 0: df4f53cec30a public 'base'
Pull so that we have the public commit and sync again.
$ hg pull
pulling from ssh://user@dummy/server
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 2 changes to 2 files
$ hg cloud sync
commitcloud: synchronizing 'server' with 'user/test/default'
commitcloud: commits synchronized
finished in * (glob)
The draft commit is also gone from here, and the workspace is stable.
$ tglogp
o 4: 67d363c9001e public 'public-commit-2' foo
|
o 3: 441f69264760 public 'landed-commit
| Differential Revision: https://phabricator.fb.com/D1234'
o 2: 031d760782fb public 'public-commit-1'
|
@ 0: df4f53cec30a public 'base'
$ cd ../client1
$ hg cloud sync -q
$ tglogp
o 4: 67d363c9001e public 'public-commit-2' foo
|
o 3: 441f69264760 public 'landed-commit
| Differential Revision: https://phabricator.fb.com/D1234'
o 2: 031d760782fb public 'public-commit-1'
|
@ 0: df4f53cec30a public 'base'
$