mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
98d9269874
Summary: Create a fork of the Mercurial code that we can use to build server rpms. The hg servers will continue to exist for a few more months while we move the darkstorm and ediscovery use cases off them. In the mean time, we want to start making breaking changes to the client, so let's create a stable copy of the hg code to produce rpms for the hg servers. The fork is based off c7770c78d, the latest hg release. This copies the files as is, then adds some minor tweaks to get it to build: - Disables some lint checks that appear to be bypassed by path - sed replace eden/scm with eden/hg-server - Removed a dependency on scm/telemetry from the edenfs-client tests since scm/telemetry pulls in the original eden/scm/lib/configparser which conflicts with the hg-server conflict parser. allow-large-files Reviewed By: quark-zju Differential Revision: D27632557 fbshipit-source-id: b2f442f4ec000ea08e4d62de068750832198e1f4
535 lines
16 KiB
Perl
535 lines
16 KiB
Perl
#chg-compatible
|
|
|
|
$ configure modern
|
|
$ showgraph() {
|
|
> hg log -G -T "{desc}: {phase} {bookmarks} {remotenames}" -r "all()"
|
|
> }
|
|
|
|
$ mkcommit() {
|
|
> echo "$1" > "$1"
|
|
> hg commit -Aqm "$1"
|
|
> }
|
|
|
|
$ newserver server
|
|
$ cd $TESTTMP/server
|
|
|
|
$ mkcommit "base"
|
|
$ hg bookmark master
|
|
$ cd ..
|
|
|
|
Make the first clone of the server
|
|
$ clone server client1
|
|
$ cd client1
|
|
$ hg cloud leave -q
|
|
$ hg cloud join -w w1
|
|
commitcloud: this repository is now connected to the 'user/test/w1' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
|
|
$ cd ..
|
|
|
|
Make the second clone of the server
|
|
$ clone server client2
|
|
$ cd client2
|
|
$ hg cloud leave -q
|
|
$ hg cloud join -w w2
|
|
commitcloud: this repository is now connected to the 'user/test/w2' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w2'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
|
|
$ cd ..
|
|
|
|
Make a commit in the first client, and sync it
|
|
$ cd client1
|
|
$ mkcommit "A (W1)"
|
|
$ mkcommit "B (W1)"
|
|
$ hg cloud sync
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
backing up stack rooted at b624c739a2da
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
remote: pushing 2 commits:
|
|
remote: b624c739a2da A (W1)
|
|
remote: aab6fffb2884 B (W1)
|
|
|
|
$ cd ..
|
|
|
|
Make a commit in the second client, and sync it
|
|
$ cd client2
|
|
$ mkcommit "C (W2)"
|
|
$ mkcommit "D (W2)"
|
|
$ hg cloud sync
|
|
commitcloud: synchronizing 'server' with 'user/test/w2'
|
|
backing up stack rooted at 8440f5b0f1c3
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
remote: pushing 2 commits:
|
|
remote: 8440f5b0f1c3 C (W2)
|
|
remote: dff058cfb955 D (W2)
|
|
|
|
$ cd ..
|
|
|
|
Switch workspace in the first client
|
|
$ cd client1
|
|
Switch workspace without specifying merge or switch strategy
|
|
$ hg cloud join -w w1
|
|
commitcloud: this repository has been already connected to the 'user/test/w1' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
|
|
Switch workspace to the same workspace
|
|
$ hg cloud join --switch -w w1
|
|
commitcloud: this repository has been already connected to the 'user/test/w1' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
|
|
Switch workspace from a draft commit that is an ancestor of a main bookmark
|
|
$ hg cloud join --switch -w w2
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/w1' to the 'user/test/w2' workspace
|
|
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
working directory now at d20a80d4def3
|
|
commitcloud: this repository is now connected to the 'user/test/w2' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w2'
|
|
pulling dff058cfb955 from ssh://user@dummy/server
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 2 changesets with 2 changes to 2 files
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
$ showgraph
|
|
o D (W2): draft
|
|
│
|
|
o C (W2): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
|
|
Switch workspace using merge strategy
|
|
$ hg cloud join -w w2_rename --merge
|
|
abort: this repository can not be switched to the 'user/test/w2_rename' workspace
|
|
the workspace doesn't exist (please use --create option to create the workspace)
|
|
[255]
|
|
$ hg cloud join -w w2_rename --merge --create
|
|
commitcloud: this repository will be reconnected from the 'user/test/w2' to the 'user/test/w2_rename' workspace
|
|
commitcloud: all local commits and bookmarks will be merged into 'user/test/w2_rename' workspace
|
|
commitcloud: this repository is now connected to the 'user/test/w2_rename' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w2_rename'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
$ showgraph
|
|
o D (W2): draft
|
|
│
|
|
o C (W2): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
|
|
Switch workspace back
|
|
$ hg cloud join -w w1 --switch
|
|
commitcloud: synchronizing 'server' with 'user/test/w2_rename'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/w2_rename' to the 'user/test/w1' workspace
|
|
commitcloud: this repository is now connected to the 'user/test/w1' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
$ showgraph
|
|
o B (W1): draft
|
|
│
|
|
o A (W1): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
|
|
Create a bookmark and switch workspace. The bookmark should be preserved in the original workspace
|
|
$ hg bookmark "book (W1)" -r 2
|
|
$ showgraph
|
|
o B (W1): draft book (W1)
|
|
│
|
|
o A (W1): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
$ hg cloud join -w w2 --switch
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/w1' to the 'user/test/w2' workspace
|
|
commitcloud: this repository is now connected to the 'user/test/w2' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w2'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
$ showgraph
|
|
o D (W2): draft
|
|
│
|
|
o C (W2): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
|
|
Create a bookmark in w2 and switch workspace. The bookmark should be preserved in the w2. The w1 bookmark should appear.
|
|
$ hg bookmark "book (W2)" -r 4
|
|
$ showgraph
|
|
o D (W2): draft book (W2)
|
|
│
|
|
o C (W2): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
|
|
$ hg cloud join -w w1 --switch
|
|
commitcloud: synchronizing 'server' with 'user/test/w2'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/w2' to the 'user/test/w1' workspace
|
|
commitcloud: this repository is now connected to the 'user/test/w1' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
$ showgraph
|
|
o B (W1): draft book (W1)
|
|
│
|
|
o A (W1): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
$ cd ..
|
|
|
|
Switch between workspaces w1 and w2 in client2
|
|
$ cd client2
|
|
$ showgraph
|
|
@ D (W2): draft
|
|
│
|
|
o C (W2): draft
|
|
│
|
|
o base: public remote/master
|
|
|
|
$ hg up d20a80d4def3
|
|
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
$ hg cloud join -w w1 --switch
|
|
commitcloud: synchronizing 'server' with 'user/test/w2'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/w2' to the 'user/test/w1' workspace
|
|
commitcloud: this repository is now connected to the 'user/test/w1' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
pulling aab6fffb2884 from ssh://user@dummy/server
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 2 changesets with 2 changes to 2 files
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
$ showgraph
|
|
o B (W1): draft book (W1)
|
|
│
|
|
o A (W1): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
$ hg cloud join -w w2 --switch
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/w1' to the 'user/test/w2' workspace
|
|
commitcloud: this repository is now connected to the 'user/test/w2' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w2'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
$ showgraph
|
|
o D (W2): draft book (W2)
|
|
│
|
|
o C (W2): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
$ hg cloud join -w w1 --switch
|
|
commitcloud: synchronizing 'server' with 'user/test/w2'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/w2' to the 'user/test/w1' workspace
|
|
commitcloud: this repository is now connected to the 'user/test/w1' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
$ showgraph
|
|
o B (W1): draft book (W1)
|
|
│
|
|
o A (W1): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
$ cd ..
|
|
|
|
Make the third clone of the server
|
|
$ clone server client3
|
|
$ cd client3
|
|
$ hg cloud leave
|
|
commitcloud: this repository is now disconnected from the 'user/test/default' workspace
|
|
|
|
Try to provide switch and merge options together
|
|
$ hg cloud join -w w1 --switch --merge
|
|
commitcloud: 'switch' and 'merge' options can not be provided together, please choose one over another
|
|
[1]
|
|
|
|
Join a new workspace
|
|
$ hg cloud join -w3
|
|
commitcloud: this repository is now connected to the 'user/test/3' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/3'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
|
|
Try to switch with uncommitted changes from a draft commit. So the uncommitted changes doesn't allow to update to the public root.
|
|
$ echo 'hello' > hello.txt
|
|
$ hg add hello.txt
|
|
$ hg commit -m "new file"
|
|
$ echo 'goodbye' > hello.txt
|
|
$ hg cloud join -w w1 --switch
|
|
commitcloud: synchronizing 'server' with 'user/test/3'
|
|
backing up stack rooted at dfa54c832678
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/3' to the 'user/test/w1' workspace
|
|
remote: pushing 1 commit:
|
|
remote: dfa54c832678 new file
|
|
abort: uncommitted changes
|
|
[255]
|
|
|
|
Commit changes to be able to switch
|
|
$ hg commit -m "new file"
|
|
$ hg up d20a80d4def3
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
$ hg cloud join -w w1 --switch
|
|
commitcloud: synchronizing 'server' with 'user/test/3'
|
|
backing up stack rooted at dfa54c832678
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/3' to the 'user/test/w1' workspace
|
|
commitcloud: this repository is now connected to the 'user/test/w1' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/w1'
|
|
pulling aab6fffb2884 from ssh://user@dummy/server
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 2 changesets with 2 changes to 2 files
|
|
remote: pushing 2 commits:
|
|
remote: dfa54c832678 new file
|
|
remote: 5fe2dc2fae70 new file
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
$ showgraph
|
|
o B (W1): draft book (W1)
|
|
│
|
|
o A (W1): draft
|
|
│
|
|
@ base: public remote/master
|
|
|
|
$ cd ..
|
|
|
|
Testing switching workspace with different remote bookmarks
|
|
$ cd server
|
|
$ mkcommit "M" # move master
|
|
$ hg prev -q
|
|
[d20a80] base
|
|
$ mkcommit "F"
|
|
$ hg bookmark "feature"
|
|
$ hg prev -q
|
|
[d20a80] base
|
|
$ mkcommit "S"
|
|
$ hg bookmark "stable"
|
|
|
|
$ cd ..
|
|
|
|
$ cd client1
|
|
$ hg pull -B feature -q
|
|
$ hg pull -B master -q
|
|
$ showgraph
|
|
o M: public remote/master
|
|
│
|
|
│ o F: public remote/feature
|
|
├─╯
|
|
│ o B (W1): draft book (W1)
|
|
│ │
|
|
│ o A (W1): draft
|
|
├─╯
|
|
@ base: public
|
|
|
|
|
|
Bookmark feature should disappear in w2 but master will stay as it is a protected bookmark in this configuration.
|
|
$ hg cloud join -w w2 --switch -q
|
|
$ showgraph
|
|
o M: public remote/master
|
|
│
|
|
│ o D (W2): draft book (W2)
|
|
│ │
|
|
│ o C (W2): draft
|
|
├─╯
|
|
@ base: public
|
|
|
|
|
|
$ hg pull -B stable -q
|
|
$ showgraph
|
|
o S: public remote/stable
|
|
│
|
|
│ o M: public remote/master
|
|
├─╯
|
|
│ o D (W2): draft book (W2)
|
|
│ │
|
|
│ o C (W2): draft
|
|
├─╯
|
|
@ base: public
|
|
|
|
|
|
Switch back. Bookmark stable should disappear.
|
|
$ hg cloud join -w w1 --switch -q
|
|
$ showgraph
|
|
o M: public remote/master
|
|
│
|
|
│ o F: public remote/feature
|
|
├─╯
|
|
│ o B (W1): draft book (W1)
|
|
│ │
|
|
│ o A (W1): draft
|
|
├─╯
|
|
@ base: public
|
|
|
|
|
|
Switch one more time. Bookmark stable should return and feature disappear.
|
|
$ hg cloud join -w w2 --switch -q
|
|
$ showgraph
|
|
o S: public remote/stable
|
|
│
|
|
│ o M: public remote/master
|
|
├─╯
|
|
│ o D (W2): draft book (W2)
|
|
│ │
|
|
│ o C (W2): draft
|
|
├─╯
|
|
@ base: public
|
|
|
|
|
|
Pull a commit from another workspace
|
|
$ hg pull -r b624c739a2da -q
|
|
$ showgraph
|
|
o S: public remote/stable
|
|
│
|
|
│ o M: public remote/master
|
|
├─╯
|
|
│ o D (W2): draft book (W2)
|
|
│ │
|
|
│ o C (W2): draft
|
|
├─╯
|
|
│ o A (W1): draft
|
|
├─╯
|
|
@ base: public
|
|
|
|
|
|
Switch back to W1
|
|
|
|
$ hg cloud join -w w1 --switch -q
|
|
$ showgraph
|
|
o M: public remote/master
|
|
│
|
|
│ o F: public remote/feature
|
|
├─╯
|
|
│ o B (W1): draft book (W1)
|
|
│ │
|
|
│ o A (W1): draft
|
|
├─╯
|
|
@ base: public
|
|
|
|
|
|
Switch back to W2 and check that the pulled commit is there.
|
|
$ hg cloud join -w w2 --switch -q
|
|
$ showgraph
|
|
o S: public remote/stable
|
|
│
|
|
│ o M: public remote/master
|
|
├─╯
|
|
│ o D (W2): draft book (W2)
|
|
│ │
|
|
│ o C (W2): draft
|
|
├─╯
|
|
│ o A (W1): draft
|
|
├─╯
|
|
@ base: public
|
|
|
|
|
|
|
|
Test switch to non default non-existent workspace
|
|
$ hg cloud join --switch -w brand_new_empty
|
|
abort: this repository can not be switched to the 'user/test/brand_new_empty' workspace
|
|
the workspace doesn't exist (please use --create option to create the workspace)
|
|
[255]
|
|
$ hg cloud join --switch -w brand_new_empty --create
|
|
commitcloud: synchronizing 'server' with 'user/test/w2'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/w2' to the 'user/test/brand_new_empty' workspace
|
|
commitcloud: this repository is now connected to the 'user/test/brand_new_empty' workspace for the 'server' repo
|
|
commitcloud: synchronizing 'server' with 'user/test/brand_new_empty'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
$ showgraph
|
|
o M: public remote/master
|
|
│
|
|
@ base: public
|
|
|
|
|
|
|
|
Test switch back to the default workpsace using a shorter `switch` command
|
|
$ hg cloud switch -w default
|
|
commitcloud: synchronizing 'server' with 'user/test/brand_new_empty'
|
|
commitcloud: commits synchronized
|
|
finished in * (glob)
|
|
commitcloud: now this repository will be switched from the 'user/test/brand_new_empty' to the 'user/test/default' workspace
|
|
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)
|
|
|
|
|
|
Switch to another brand new workspace
|
|
$ hg cloud switch -w brand_new_empty2 --create -q
|
|
|
|
Leave commit cloud
|
|
$ hg cloud leave
|
|
commitcloud: this repository is now disconnected from the 'user/test/brand_new_empty2' workspace
|
|
|
|
Try to switch without joining to any workspace first
|
|
$ mkcommit "new"
|
|
$ hg cloud switch -w default
|
|
commitcloud: this repository can not be switched to the 'user/test/default' workspace
|
|
the repository is not connected to any workspace yet and contains local commits or bookmarks
|
|
|
|
Clean the repository and try again. Disconnected but clean repo should be allowed to switch.
|
|
$ showgraph
|
|
@ new: draft
|
|
│
|
|
│ o M: public remote/master
|
|
├─╯
|
|
o base: public
|
|
|
|
$ hg hide -r 'draft()'
|
|
hiding commit 9adefff464dc "new"
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
working directory now at d20a80d4def3
|
|
1 changeset hidden
|
|
$ hg cloud switch -w default
|
|
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)
|