--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-infinitepush-bundlestore.t Fri Feb 09 13:39:15 2018 +0530
@@ -0,0 +1,417 @@
+
+Create an ondisk bundlestore in .hg/scratchbranches
+ $ . "$TESTDIR/library-infinitepush.sh"
+ $ cp $HGRCPATH $TESTTMP/defaulthgrc
+ $ setupcommon
+ $ mkcommit() {
+ > echo "$1" > "$1"
+ > hg add "$1"
+ > hg ci -m "$1"
+ > }
+ $ hg init repo
+ $ cd repo
+
+Check that we can send a scratch on the server and it does not show there in
+the history but is stored on disk
+ $ setupserver
+ $ cd ..
+ $ hg clone ssh://user@dummy/repo client -q
+ $ cd client
+ $ mkcommit initialcommit
+ $ hg push -r . --create
+ pushing to ssh://user@dummy/repo
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ $ mkcommit scratchcommit
+ $ hg push -r . --to scratch/mybranch --create
+ pushing to ssh://user@dummy/repo
+ searching for changes
+ remote: pushing 1 commit:
+ remote: 20759b6926ce scratchcommit
+ $ hg log -G
+ @ changeset: 1:20759b6926ce
+ | bookmark: scratch/mybranch
+ | tag: tip
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: scratchcommit
+ |
+ o changeset: 0:67145f466344
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: initialcommit
+
+ $ hg log -G -R ../repo
+ o changeset: 0:67145f466344
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: initialcommit
+
+ $ find ../repo/.hg/scratchbranches | sort
+ ../repo/.hg/scratchbranches
+ ../repo/.hg/scratchbranches/filebundlestore
+ ../repo/.hg/scratchbranches/filebundlestore/b9
+ ../repo/.hg/scratchbranches/filebundlestore/b9/e1
+ ../repo/.hg/scratchbranches/filebundlestore/b9/e1/b9e1ee5f93fb6d7c42496fc176c09839639dd9cc
+ ../repo/.hg/scratchbranches/index
+ ../repo/.hg/scratchbranches/index/bookmarkmap
+ ../repo/.hg/scratchbranches/index/bookmarkmap/scratch
+ ../repo/.hg/scratchbranches/index/bookmarkmap/scratch/mybranch
+ ../repo/.hg/scratchbranches/index/nodemap
+ ../repo/.hg/scratchbranches/index/nodemap/20759b6926ce827d5a8c73eb1fa9726d6f7defb2
+
+From another client we can get the scratchbranch if we ask for it explicitely
+
+ $ cd ..
+ $ hg clone ssh://user@dummy/repo client2 -q
+ $ cd client2
+ $ hg pull -B scratch/mybranch --traceback
+ pulling from ssh://user@dummy/repo
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ new changesets 20759b6926ce
+ (run 'hg update' to get a working copy)
+ $ hg log -G
+ o changeset: 1:20759b6926ce
+ | bookmark: scratch/mybranch
+ | tag: tip
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: scratchcommit
+ |
+ @ changeset: 0:67145f466344
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: initialcommit
+
+ $ cd ..
+
+Push to non-scratch bookmark
+
+ $ cd client
+ $ hg up 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ mkcommit newcommit
+ created new head
+ $ hg push -r .
+ pushing to ssh://user@dummy/repo
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ $ hg log -G -T '{desc} {phase} {bookmarks}'
+ @ newcommit public
+ |
+ | o scratchcommit draft scratch/mybranch
+ |/
+ o initialcommit public
+
+
+Push to scratch branch
+ $ cd ../client2
+ $ hg up -q scratch/mybranch
+ $ mkcommit 'new scratch commit'
+ $ hg push -r . --to scratch/mybranch
+ pushing to ssh://user@dummy/repo
+ searching for changes
+ remote: pushing 2 commits:
+ remote: 20759b6926ce scratchcommit
+ remote: 1de1d7d92f89 new scratch commit
+ $ hg log -G -T '{desc} {phase} {bookmarks}'
+ @ new scratch commit draft scratch/mybranch
+ |
+ o scratchcommit draft
+ |
+ o initialcommit public
+
+ $ scratchnodes
+ 1de1d7d92f8965260391d0513fe8a8d5973d3042 bed63daed3beba97fff2e819a148cf415c217a85
+ 20759b6926ce827d5a8c73eb1fa9726d6f7defb2 bed63daed3beba97fff2e819a148cf415c217a85
+
+ $ scratchbookmarks
+ scratch/mybranch 1de1d7d92f8965260391d0513fe8a8d5973d3042
+
+Push scratch bookmark with no new revs
+ $ hg push -r . --to scratch/anotherbranch --create
+ pushing to ssh://user@dummy/repo
+ searching for changes
+ remote: pushing 2 commits:
+ remote: 20759b6926ce scratchcommit
+ remote: 1de1d7d92f89 new scratch commit
+ $ hg log -G -T '{desc} {phase} {bookmarks}'
+ @ new scratch commit draft scratch/anotherbranch scratch/mybranch
+ |
+ o scratchcommit draft
+ |
+ o initialcommit public
+
+ $ scratchbookmarks
+ scratch/anotherbranch 1de1d7d92f8965260391d0513fe8a8d5973d3042
+ scratch/mybranch 1de1d7d92f8965260391d0513fe8a8d5973d3042
+
+Pull scratch and non-scratch bookmark at the same time
+
+ $ hg -R ../repo book newbook
+ $ cd ../client
+ $ hg pull -B newbook -B scratch/mybranch --traceback
+ pulling from ssh://user@dummy/repo
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 2 files
+ adding remote bookmark newbook
+ new changesets 1de1d7d92f89
+ (run 'hg update' to get a working copy)
+ $ hg log -G -T '{desc} {phase} {bookmarks}'
+ o new scratch commit draft scratch/mybranch
+ |
+ | @ newcommit public
+ | |
+ o | scratchcommit draft
+ |/
+ o initialcommit public
+
+
+Push scratch revision without bookmark with --bundle-store
+
+ $ hg up -q tip
+ $ mkcommit scratchcommitnobook
+ $ hg log -G -T '{desc} {phase} {bookmarks}'
+ @ scratchcommitnobook draft
+ |
+ o new scratch commit draft scratch/mybranch
+ |
+ | o newcommit public
+ | |
+ o | scratchcommit draft
+ |/
+ o initialcommit public
+
+ $ hg push -r . --bundle-store
+ pushing to ssh://user@dummy/repo
+ searching for changes
+ remote: pushing 3 commits:
+ remote: 20759b6926ce scratchcommit
+ remote: 1de1d7d92f89 new scratch commit
+ remote: 2b5d271c7e0d scratchcommitnobook
+ $ hg -R ../repo log -G -T '{desc} {phase}'
+ o newcommit public
+ |
+ o initialcommit public
+
+
+ $ scratchnodes
+ 1de1d7d92f8965260391d0513fe8a8d5973d3042 66fa08ff107451320512817bed42b7f467a1bec3
+ 20759b6926ce827d5a8c73eb1fa9726d6f7defb2 66fa08ff107451320512817bed42b7f467a1bec3
+ 2b5d271c7e0d25d811359a314d413ebcc75c9524 66fa08ff107451320512817bed42b7f467a1bec3
+
+Test with pushrebase
+ $ mkcommit scratchcommitwithpushrebase
+ $ hg push -r . --to scratch/mybranch
+ pushing to ssh://user@dummy/repo
+ searching for changes
+ remote: pushing 4 commits:
+ remote: 20759b6926ce scratchcommit
+ remote: 1de1d7d92f89 new scratch commit
+ remote: 2b5d271c7e0d scratchcommitnobook
+ remote: d8c4f54ab678 scratchcommitwithpushrebase
+ $ hg -R ../repo log -G -T '{desc} {phase}'
+ o newcommit public
+ |
+ o initialcommit public
+
+ $ scratchnodes
+ 1de1d7d92f8965260391d0513fe8a8d5973d3042 e3cb2ac50f9e1e6a5ead3217fc21236c84af4397
+ 20759b6926ce827d5a8c73eb1fa9726d6f7defb2 e3cb2ac50f9e1e6a5ead3217fc21236c84af4397
+ 2b5d271c7e0d25d811359a314d413ebcc75c9524 e3cb2ac50f9e1e6a5ead3217fc21236c84af4397
+ d8c4f54ab678fd67cb90bb3f272a2dc6513a59a7 e3cb2ac50f9e1e6a5ead3217fc21236c84af4397
+
+Change the order of pushrebase and infinitepush
+ $ mkcommit scratchcommitwithpushrebase2
+ $ hg push -r . --to scratch/mybranch
+ pushing to ssh://user@dummy/repo
+ searching for changes
+ remote: pushing 5 commits:
+ remote: 20759b6926ce scratchcommit
+ remote: 1de1d7d92f89 new scratch commit
+ remote: 2b5d271c7e0d scratchcommitnobook
+ remote: d8c4f54ab678 scratchcommitwithpushrebase
+ remote: 6c10d49fe927 scratchcommitwithpushrebase2
+ $ hg -R ../repo log -G -T '{desc} {phase}'
+ o newcommit public
+ |
+ o initialcommit public
+
+ $ scratchnodes
+ 1de1d7d92f8965260391d0513fe8a8d5973d3042 cd0586065eaf8b483698518f5fc32531e36fd8e0
+ 20759b6926ce827d5a8c73eb1fa9726d6f7defb2 cd0586065eaf8b483698518f5fc32531e36fd8e0
+ 2b5d271c7e0d25d811359a314d413ebcc75c9524 cd0586065eaf8b483698518f5fc32531e36fd8e0
+ 6c10d49fe92751666c40263f96721b918170d3da cd0586065eaf8b483698518f5fc32531e36fd8e0
+ d8c4f54ab678fd67cb90bb3f272a2dc6513a59a7 cd0586065eaf8b483698518f5fc32531e36fd8e0
+
+Non-fastforward scratch bookmark push
+
+ $ hg log -GT "{rev}:{node} {desc}\n"
+ @ 6:6c10d49fe92751666c40263f96721b918170d3da scratchcommitwithpushrebase2
+ |
+ o 5:d8c4f54ab678fd67cb90bb3f272a2dc6513a59a7 scratchcommitwithpushrebase
+ |
+ o 4:2b5d271c7e0d25d811359a314d413ebcc75c9524 scratchcommitnobook
+ |
+ o 3:1de1d7d92f8965260391d0513fe8a8d5973d3042 new scratch commit
+ |
+ | o 2:91894e11e8255bf41aa5434b7b98e8b2aa2786eb newcommit
+ | |
+ o | 1:20759b6926ce827d5a8c73eb1fa9726d6f7defb2 scratchcommit
+ |/
+ o 0:67145f4663446a9580364f70034fea6e21293b6f initialcommit
+
+ $ hg up 6c10d49fe927
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo 1 > amend
+ $ hg add amend
+ $ hg ci --amend -m 'scratch amended commit'
+ saved backup bundle to $TESTTMP/client/.hg/strip-backup/6c10d49fe927-c99ffec5-amend.hg (glob)
+ $ hg log -G -T '{desc} {phase} {bookmarks}'
+ @ scratch amended commit draft scratch/mybranch
+ |
+ o scratchcommitwithpushrebase draft
+ |
+ o scratchcommitnobook draft
+ |
+ o new scratch commit draft
+ |
+ | o newcommit public
+ | |
+ o | scratchcommit draft
+ |/
+ o initialcommit public
+
+
+ $ scratchbookmarks
+ scratch/anotherbranch 1de1d7d92f8965260391d0513fe8a8d5973d3042
+ scratch/mybranch 6c10d49fe92751666c40263f96721b918170d3da
+ $ hg push -r . --to scratch/mybranch
+ pushing to ssh://user@dummy/repo
+ searching for changes
+ remote: non-forward push
+ remote: (use --non-forward-move to override)
+ abort: push failed on remote
+ [255]
+
+ $ hg push -r . --to scratch/mybranch --non-forward-move
+ pushing to ssh://user@dummy/repo
+ searching for changes
+ remote: pushing 5 commits:
+ remote: 20759b6926ce scratchcommit
+ remote: 1de1d7d92f89 new scratch commit
+ remote: 2b5d271c7e0d scratchcommitnobook
+ remote: d8c4f54ab678 scratchcommitwithpushrebase
+ remote: 8872775dd97a scratch amended commit
+ $ scratchbookmarks
+ scratch/anotherbranch 1de1d7d92f8965260391d0513fe8a8d5973d3042
+ scratch/mybranch 8872775dd97a750e1533dc1fbbca665644b32547
+ $ hg log -G -T '{desc} {phase} {bookmarks}'
+ @ scratch amended commit draft scratch/mybranch
+ |
+ o scratchcommitwithpushrebase draft
+ |
+ o scratchcommitnobook draft
+ |
+ o new scratch commit draft
+ |
+ | o newcommit public
+ | |
+ o | scratchcommit draft
+ |/
+ o initialcommit public
+
+Check that push path is not ignored. Add new path to the hgrc
+ $ cat >> .hg/hgrc << EOF
+ > [paths]
+ > peer=ssh://user@dummy/client2
+ > EOF
+
+Checkout last non-scrath commit
+ $ hg up 91894e11e8255
+ 1 files updated, 0 files merged, 6 files removed, 0 files unresolved
+ $ mkcommit peercommit
+Use --force because this push creates new head
+ $ hg push peer -r . -f
+ pushing to ssh://user@dummy/client2
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files (+1 heads)
+ $ hg -R ../repo log -G -T '{desc} {phase} {bookmarks}'
+ o newcommit public
+ |
+ o initialcommit public
+
+ $ hg -R ../client2 log -G -T '{desc} {phase} {bookmarks}'
+ o peercommit public
+ |
+ o newcommit public
+ |
+ | @ new scratch commit draft scratch/anotherbranch scratch/mybranch
+ | |
+ | o scratchcommit draft
+ |/
+ o initialcommit public
+
+ $ hg book --list-remote scratch/*
+ scratch/anotherbranch 1de1d7d92f8965260391d0513fe8a8d5973d3042
+ scratch/mybranch 8872775dd97a750e1533dc1fbbca665644b32547
+ $ hg book --list-remote
+ abort: --list-remote requires a bookmark pattern
+ (use "hg book" to get a list of your local bookmarks)
+ [255]
+ $ hg book --config infinitepush.defaultremotepatterns=scratch/another* --list-remote
+ abort: --list-remote requires a bookmark pattern
+ (use "hg book" to get a list of your local bookmarks)
+ [255]
+ $ hg book --list-remote scratch/my
+ $ hg book --list-remote scratch/my*
+ scratch/mybranch 8872775dd97a750e1533dc1fbbca665644b32547
+ $ hg book --list-remote scratch/my* -T json
+ [
+ {
+ "bookmark": "scratch/mybranch",
+ "node": "8872775dd97a750e1533dc1fbbca665644b32547"
+ }
+ ]
+ $ cd ../repo
+ $ hg book scratch/serversidebook
+ $ hg book serversidebook
+ $ cd ../client
+ $ hg book --list-remote scratch/* -T json
+ [
+ {
+ "bookmark": "scratch/anotherbranch",
+ "node": "1de1d7d92f8965260391d0513fe8a8d5973d3042"
+ },
+ {
+ "bookmark": "scratch/mybranch",
+ "node": "8872775dd97a750e1533dc1fbbca665644b32547"
+ },
+ {
+ "bookmark": "scratch/serversidebook",
+ "node": "0000000000000000000000000000000000000000"
+ }
+ ]
+
+Push to svn server should fail
+ $ hg push svn+ssh://svn.vip.facebook.com/svnroot/tfb/trunk/www -r . --to scratch/serversidebook
+ abort: infinite push does not work with svn repo
+ (did you forget to `hg push default`?)
+ [255]