sapling/tests/test-infinitepush-bundlestore.t
Stanislau Hlebik e42fe1fdc5 infinitepush: do not require mysql.connector to be present on client
Summary:
Previously error was thrown if mysql.connector wasn't present on client hosts.
But there is no need for mysql.connector to be installed on clients.
Remove global imports to fix it and create bundlestore() only for server repo.

P. S.
Changes in test is required because bundlestore() is not created if
infinitepush.server=True is not present in config.

Test Plan:
Uninstall mysql.connector: `sudo yum remove mysql-connector-python`
Enable infinitepush extension in any repo and run any hg command (hg st,
for example). Make sure it doesn't throw exceptions.

Install mysql.connector: `sudo yum install mysql-connector-python`.
Run `test-infinitepush-bundlestore.t`

Reviewers: durham, mitrandir, quark, rmcelroy

Reviewed By: rmcelroy

Subscribers: mjpieters

Differential Revision: https://phabricator.intern.facebook.com/D3967189

Tasks: 12479677

Signature: t1:3967189:1475581802:fbaafceac298242d0a449267ec0d68e290c3f262
2016-10-04 04:52:03 -07:00

300 lines
8.6 KiB
Perl

$ . $TESTDIR/require-ext.sh mysql
Create an ondisk bundlestore in .hg/scratchbranches
$ . $TESTDIR/require-ext.sh remotenames
$ extpath=`dirname $TESTDIR`
$ cp -r $extpath/infinitepush $TESTTMP # use $TESTTMP substitution in message
$ cp $extpath/hgext3rd/pushrebase.py $TESTTMP # use $TESTTMP substitution in message
$ cp $HGRCPATH $TESTTMP/defaulthgrc
$ cat >> $HGRCPATH << EOF
> [extensions]
> infinitepush=$TESTTMP/infinitepush
> [infinitepush]
> branchpattern=re:scratch/.+
> [ui]
> ssh = python "$TESTDIR/dummyssh"
> EOF
$ mkcommit() {
> echo "$1" > "$1"
> hg add "$1"
> hg ci -m "$1"
> }
$ scratchnodes() {
> for node in `find ../repo/.hg/scratchbranches/index/nodemap/* | sort`; do
> echo ${node##*/}
> done
> }
$ scratchbookmarks() {
> for bookmark in `find ../repo/.hg/scratchbranches/index/bookmarkmap/* -type f | sort`; do
> echo ${bookmark##*/bookmarkmap/}
> done
> }
$ 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
$ cat >> .hg/hgrc << EOF
> [infinitepush]
> server=yes
> EOF
$ 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
| 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/cf
../repo/.hg/scratchbranches/filebundlestore/cf/b7
../repo/.hg/scratchbranches/filebundlestore/cf/b7/cfb730091ebd5e252fca88aab63316b11a8512b0
../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
(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}'
@ newcommit public
|
| o scratchcommit draft
|/
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
$ scratchnodes
1de1d7d92f8965260391d0513fe8a8d5973d3042
20759b6926ce827d5a8c73eb1fa9726d6f7defb2
$ scratchbookmarks
scratch/mybranch
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
$ scratchbookmarks
scratch/anotherbranch
scratch/mybranch
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
(run 'hg update' to get a working copy)
$ hg log -G -T '{desc} {phase}'
o new scratch commit draft
|
| @ newcommit public
| |
o | scratchcommit draft
|/
o initialcommit public
Push scratch revision without bookmark with --force-scratch
$ hg up -q tip
$ mkcommit scratchcommitnobook
$ hg log -G -T '{desc} {phase}'
@ scratchcommitnobook draft
|
o new scratch commit draft
|
| 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
20759b6926ce827d5a8c73eb1fa9726d6f7defb2
2b5d271c7e0d25d811359a314d413ebcc75c9524
Test with pushrebase
$ cp $TESTTMP/defaulthgrc $HGRCPATH
$ cat >> $HGRCPATH << EOF
> [extensions]
> pushrebase=$TESTTMP/pushrebase.py
> infinitepush=$TESTTMP/infinitepush
> [infinitepush]
> branchpattern=re:scratch/.+
> [ui]
> ssh = python "$TESTDIR/dummyssh"
> EOF
$ 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
20759b6926ce827d5a8c73eb1fa9726d6f7defb2
2b5d271c7e0d25d811359a314d413ebcc75c9524
d8c4f54ab678fd67cb90bb3f272a2dc6513a59a7
Change the order of pushrebase and infinitepush
$ cp $TESTTMP/defaulthgrc $HGRCPATH
$ cat >> $HGRCPATH << EOF
> [extensions]
> infinitepush=$TESTTMP/infinitepush
> pushrebase=$TESTTMP/pushrebase.py
> [infinitepush]
> branchpattern=re:scratch/.+
> [ui]
> ssh = python "$TESTDIR/dummyssh"
> EOF
$ 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
20759b6926ce827d5a8c73eb1fa9726d6f7defb2
2b5d271c7e0d25d811359a314d413ebcc75c9524
6c10d49fe92751666c40263f96721b918170d3da
d8c4f54ab678fd67cb90bb3f272a2dc6513a59a7
$ mkcommit scratchcommitwithremotenames
$ hg push --config extensions.remotenames= -r . --to scratch/mybranch
pushing to ssh://user@dummy/repo
searching for changes
remote: pushing 6 commits:
remote: 20759b6926ce scratchcommit
remote: 1de1d7d92f89 new scratch commit
remote: 2b5d271c7e0d scratchcommitnobook
remote: d8c4f54ab678 scratchcommitwithpushrebase
remote: 6c10d49fe927 scratchcommitwithpushrebase2
remote: 9558d6761412 scratchcommitwithremotenames