sapling/tests/test-pushrebase-protection.t
Tony Tung 7061c1092f store the pushvars in the bundle2 operation object
Summary:
The pushvars extension ensures that it precedes the hooks.
Unfortunately, that means pushrebase does not have access to the hook
variables unless it obtains the transaction.  If it does that, then the
prepushrebase step will have the lock, defeating the purpose of the hook.

By storing the pushvars in the operation, we can retrieve it without
starting the transaction.

Test Plan: passes the BYPASS_REVIEW test when it is moved to prepushrebase

Reviewers: #sourcecontrol, durham, lcharignon

Reviewed By: durham

Subscribers: durham, mitrandir

Differential Revision: https://phabricator.fb.com/D2890191

Tasks: 9872386

Signature: t1:2890191:1454526611:503a30015494eef467ad545b92077bf42cdd30d5
2016-02-18 21:32:11 -08:00

79 lines
1.9 KiB
Perl

Setup
$ PYTHONPATH=$TESTDIR/..:$PYTHONPATH
$ export PYTHONPATH
$ cat >> $HGRCPATH <<EOF
> [ui]
> ssh = python "$RUNTESTDIR/dummyssh"
> username = nobody <no.reply@fb.com>
> [extensions]
> strip =
> EOF
Setup pushrebase required repo
$ hg init server
$ cd server
$ cat >> .hg/hgrc <<EOF
> [extensions]
> bundle2hooks =
> pushrebase =
> [pushrebase]
> blocknonpushrebase = True
> EOF
$ echo a > a && hg commit -Aqm a
$ cd ..
$ hg clone -q server client
$ cd client
$ echo b >> a && hg commit -Aqm b
$ hg book master
Non-pushrebase pushes should be rejected
$ hg push
pushing to $TESTTMP/server (glob)
searching for changes
error: prechangegroup.blocknonpushrebase hook failed: this repository requires that you push using 'hg push --to'
abort: this repository requires that you push using 'hg push --to'
[255]
$ hg push -f
pushing to $TESTTMP/server (glob)
searching for changes
error: prechangegroup.blocknonpushrebase hook failed: this repository requires that you push using 'hg push --to'
abort: this repository requires that you push using 'hg push --to'
[255]
$ hg push -B master
pushing to $TESTTMP/server (glob)
searching for changes
error: prechangegroup.blocknonpushrebase hook failed: this repository requires that you push using 'hg push --to'
abort: this repository requires that you push using 'hg push --to'
[255]
Pushrebase pushes should be allowed
$ hg push --config 'extensions.bundle2hooks=' --config 'extensions.pushrebase=' --to master -B master
pushing to $TESTTMP/server (glob)
searching for changes
pushing 1 commit:
1846eede8b68 b
exporting bookmark master
Bookmark pushes should not be affected by the block
$ hg book -r ".^" master -f
$ hg push -B master
pushing to $TESTTMP/server (glob)
searching for changes
no changes found
updating bookmark master
[1]
$ hg -R ../server log -T '{rev} {bookmarks}' -G
o 1
|
@ 0 master