|
|
|
@ -973,6 +973,15 @@ def push(repo, remote, parsed_refs, p_revs):
@@ -973,6 +973,15 @@ def push(repo, remote, parsed_refs, p_revs):
|
|
|
|
|
|
|
|
|
|
return ret |
|
|
|
|
|
|
|
|
|
def check_tip(ref, kind, name, heads): |
|
|
|
|
try: |
|
|
|
|
ename = '%s/%s' % (kind, name) |
|
|
|
|
tip = marks.get_tip(ename) |
|
|
|
|
except KeyError: |
|
|
|
|
return True |
|
|
|
|
else: |
|
|
|
|
return tip in heads |
|
|
|
|
|
|
|
|
|
def do_export(parser): |
|
|
|
|
global parsed_refs, bmarks, peer |
|
|
|
|
|
|
|
|
@ -995,6 +1004,8 @@ def do_export(parser):
@@ -995,6 +1004,8 @@ def do_export(parser):
|
|
|
|
|
else: |
|
|
|
|
die('unhandled export command: %s' % line) |
|
|
|
|
|
|
|
|
|
need_fetch = False |
|
|
|
|
|
|
|
|
|
for ref, node in parsed_refs.iteritems(): |
|
|
|
|
bnode = hgbin(node) |
|
|
|
|
if ref.startswith('refs/heads/branches'): |
|
|
|
@ -1002,6 +1013,16 @@ def do_export(parser):
@@ -1002,6 +1013,16 @@ def do_export(parser):
|
|
|
|
|
if branch in branches and bnode in branches[branch]: |
|
|
|
|
# up to date |
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
if peer: |
|
|
|
|
remotemap = peer.branchmap() |
|
|
|
|
if remotemap and branch in remotemap: |
|
|
|
|
heads = [hghex(e) for e in remotemap[branch]] |
|
|
|
|
if not check_tip(ref, 'branches', branch, heads): |
|
|
|
|
print "error %s fetch first" % ref |
|
|
|
|
need_fetch = True |
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
p_revs[bnode] = ref |
|
|
|
|
print "ok %s" % ref |
|
|
|
|
elif ref.startswith('refs/heads/'): |
|
|
|
@ -1017,6 +1038,14 @@ def do_export(parser):
@@ -1017,6 +1038,14 @@ def do_export(parser):
|
|
|
|
|
not (bmark == 'master' and bmark not in parser.repo._bookmarks): |
|
|
|
|
p_bmarks.append((ref, bmark, old, new)) |
|
|
|
|
|
|
|
|
|
if peer: |
|
|
|
|
remote_old = peer.listkeys('bookmarks').get(bmark) |
|
|
|
|
if remote_old: |
|
|
|
|
if not check_tip(ref, 'bookmarks', bmark, remote_old): |
|
|
|
|
print "error %s fetch first" % ref |
|
|
|
|
need_fetch = True |
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
p_revs[bnode] = ref |
|
|
|
|
elif ref.startswith('refs/tags/'): |
|
|
|
|
tag = ref[len('refs/tags/'):] |
|
|
|
@ -1037,6 +1066,16 @@ def do_export(parser):
@@ -1037,6 +1066,16 @@ def do_export(parser):
|
|
|
|
|
# transport-helper/fast-export bugs |
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
if need_fetch: |
|
|
|
|
print |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
if dry_run: |
|
|
|
|
if peer and not force_push: |
|
|
|
|
checkheads(parser.repo, peer, p_revs) |
|
|
|
|
print |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
if peer: |
|
|
|
|
if not push(parser.repo, peer, parsed_refs, p_revs): |
|
|
|
|
# do not update bookmarks |
|
|
|
|