mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
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>
This commit is contained in:
parent
fdec195f89
commit
a7cb1276cc
|
@ -685,7 +685,8 @@ def do_export(parser):
|
|||
peer = bzrlib.branch.Branch.open(peers[name],
|
||||
possible_transports=transports)
|
||||
try:
|
||||
peer.bzrdir.push_branch(branch, revision_id=revid)
|
||||
peer.bzrdir.push_branch(branch, revision_id=revid,
|
||||
overwrite=force)
|
||||
except bzrlib.errors.DivergedBranches:
|
||||
print "error %s non-fast forward" % ref
|
||||
continue
|
||||
|
@ -719,8 +720,32 @@ def do_capabilities(parser):
|
|||
print "*import-marks %s" % path
|
||||
print "*export-marks %s" % path
|
||||
|
||||
print "option"
|
||||
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):
|
||||
return not True in [c in name for c in '~^: \\']
|
||||
|
||||
|
@ -883,6 +908,7 @@ def main(args):
|
|||
global is_tmp
|
||||
global branches, peers
|
||||
global transports
|
||||
global force
|
||||
|
||||
alias = args[1]
|
||||
url = args[2]
|
||||
|
@ -896,6 +922,7 @@ def main(args):
|
|||
branches = {}
|
||||
peers = {}
|
||||
transports = []
|
||||
force = False
|
||||
|
||||
if alias[5:] == url:
|
||||
is_tmp = True
|
||||
|
@ -931,6 +958,8 @@ def main(args):
|
|||
do_import(parser)
|
||||
elif parser.check('export'):
|
||||
do_export(parser)
|
||||
elif parser.check('option'):
|
||||
do_option(parser)
|
||||
else:
|
||||
die('unhandled command: %s' % line)
|
||||
sys.stdout.flush()
|
||||
|
|
|
@ -65,13 +65,33 @@ test_expect_success 'pushing' '
|
|||
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' '
|
||||
(
|
||||
cd gitrepo &&
|
||||
git pull &&
|
||||
git log --format="%s" -1 origin/master >actual
|
||||
) &&
|
||||
echo three >expected &&
|
||||
echo three-new >expected &&
|
||||
test_cmp expected actual &&
|
||||
|
||||
(cd gitrepo && git push && git pull) &&
|
||||
|
|
Loading…
Reference in a new issue