remote-hg: check diverged bookmarks

So that we can report a proper error.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Felipe Contreras 2013-05-24 21:29:52 -05:00 committed by Junio C Hamano
parent 883d7be110
commit d3c460b5b4
2 changed files with 25 additions and 1 deletions

View File

@ -859,6 +859,23 @@ def write_tag(repo, tag, node, msg, author):
return (tagnode, branch)
def checkheads_bmark(repo, ref, ctx):
if force_push:
return True
bmark = ref[len('refs/heads/'):]
if not bmark in bmarks:
# new bmark
return True
ctx_old = bmarks[bmark]
ctx_new = ctx
if not repo.changelog.descendant(ctx_old.rev(), ctx_new.rev()):
print "error %s non-fast forward" % ref
return False
return True
def checkheads(repo, remote, p_revs):
remotemap = remote.branchmap()
@ -875,6 +892,13 @@ def checkheads(repo, remote, p_revs):
if not branch in remotemap:
# new branch
continue
if not ref.startswith('refs/heads/branches'):
if ref.startswith('refs/heads/'):
if not checkheads_bmark(repo, ref, ctx):
ret = False
# only check branches
continue
new.setdefault(branch, []).append(ctx.rev())
for branch, heads in new.iteritems():

View File

@ -380,7 +380,7 @@ test_expect_success 'remote update bookmark diverge' '
check_bookmark hgrepo diverge "bump bookmark"
'
test_expect_failure 'remote new bookmark multiple branch head' '
test_expect_success 'remote new bookmark multiple branch head' '
test_when_finished "rm -rf gitrepo*" &&
(