remote-bzr: support the new 'force' option
Signed-off-by: Richard Hansen <rhansen@bbn.com> Acked-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
fdec195f89
commit
a7cb1276cc
|
@ -685,7 +685,8 @@ def do_export(parser):
|
||||||
peer = bzrlib.branch.Branch.open(peers[name],
|
peer = bzrlib.branch.Branch.open(peers[name],
|
||||||
possible_transports=transports)
|
possible_transports=transports)
|
||||||
try:
|
try:
|
||||||
peer.bzrdir.push_branch(branch, revision_id=revid)
|
peer.bzrdir.push_branch(branch, revision_id=revid,
|
||||||
|
overwrite=force)
|
||||||
except bzrlib.errors.DivergedBranches:
|
except bzrlib.errors.DivergedBranches:
|
||||||
print "error %s non-fast forward" % ref
|
print "error %s non-fast forward" % ref
|
||||||
continue
|
continue
|
||||||
|
@ -719,8 +720,32 @@ def do_capabilities(parser):
|
||||||
print "*import-marks %s" % path
|
print "*import-marks %s" % path
|
||||||
print "*export-marks %s" % path
|
print "*export-marks %s" % path
|
||||||
|
|
||||||
|
print "option"
|
||||||
print
|
print
|
||||||
|
|
||||||
|
class InvalidOptionValue(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_bool_option(val):
|
||||||
|
if val == 'true':
|
||||||
|
return True
|
||||||
|
elif val == 'false':
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
raise InvalidOptionValue()
|
||||||
|
|
||||||
|
def do_option(parser):
|
||||||
|
global force
|
||||||
|
opt, val = parser[1:3]
|
||||||
|
try:
|
||||||
|
if opt == 'force':
|
||||||
|
force = get_bool_option(val)
|
||||||
|
print 'ok'
|
||||||
|
else:
|
||||||
|
print 'unsupported'
|
||||||
|
except InvalidOptionValue:
|
||||||
|
print "error '%s' is not a valid value for option '%s'" % (val, opt)
|
||||||
|
|
||||||
def ref_is_valid(name):
|
def ref_is_valid(name):
|
||||||
return not True in [c in name for c in '~^: \\']
|
return not True in [c in name for c in '~^: \\']
|
||||||
|
|
||||||
|
@ -883,6 +908,7 @@ def main(args):
|
||||||
global is_tmp
|
global is_tmp
|
||||||
global branches, peers
|
global branches, peers
|
||||||
global transports
|
global transports
|
||||||
|
global force
|
||||||
|
|
||||||
alias = args[1]
|
alias = args[1]
|
||||||
url = args[2]
|
url = args[2]
|
||||||
|
@ -896,6 +922,7 @@ def main(args):
|
||||||
branches = {}
|
branches = {}
|
||||||
peers = {}
|
peers = {}
|
||||||
transports = []
|
transports = []
|
||||||
|
force = False
|
||||||
|
|
||||||
if alias[5:] == url:
|
if alias[5:] == url:
|
||||||
is_tmp = True
|
is_tmp = True
|
||||||
|
@ -931,6 +958,8 @@ def main(args):
|
||||||
do_import(parser)
|
do_import(parser)
|
||||||
elif parser.check('export'):
|
elif parser.check('export'):
|
||||||
do_export(parser)
|
do_export(parser)
|
||||||
|
elif parser.check('option'):
|
||||||
|
do_option(parser)
|
||||||
else:
|
else:
|
||||||
die('unhandled command: %s' % line)
|
die('unhandled command: %s' % line)
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
|
|
@ -65,13 +65,33 @@ test_expect_success 'pushing' '
|
||||||
test_cmp expected actual
|
test_cmp expected actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'forced pushing' '
|
||||||
|
(
|
||||||
|
cd gitrepo &&
|
||||||
|
echo three-new >content &&
|
||||||
|
git commit -a --amend -m three-new &&
|
||||||
|
git push -f
|
||||||
|
) &&
|
||||||
|
|
||||||
|
(
|
||||||
|
cd bzrrepo &&
|
||||||
|
# the forced update overwrites the bzr branch but not the bzr
|
||||||
|
# working directory (it tries to merge instead)
|
||||||
|
bzr revert
|
||||||
|
) &&
|
||||||
|
|
||||||
|
echo three-new >expected &&
|
||||||
|
cat bzrrepo/content >actual &&
|
||||||
|
test_cmp expected actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'roundtrip' '
|
test_expect_success 'roundtrip' '
|
||||||
(
|
(
|
||||||
cd gitrepo &&
|
cd gitrepo &&
|
||||||
git pull &&
|
git pull &&
|
||||||
git log --format="%s" -1 origin/master >actual
|
git log --format="%s" -1 origin/master >actual
|
||||||
) &&
|
) &&
|
||||||
echo three >expected &&
|
echo three-new >expected &&
|
||||||
test_cmp expected actual &&
|
test_cmp expected actual &&
|
||||||
|
|
||||||
(cd gitrepo && git push && git pull) &&
|
(cd gitrepo && git push && git pull) &&
|
||||||
|
|
Loading…
Reference in New Issue