diff options
author | Felipe Contreras <felipe.contreras@gmail.com> | 2013-05-24 21:29:46 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-05-28 08:02:04 -0700 |
commit | aaadca28b6148c262385c258c761e166eff6fbeb (patch) | |
tree | 0887ecce1f4b573f724a79903135f5da9cb33dfa /contrib/remote-helpers/git-remote-hg | |
parent | remote-hg: add test for failed double push (diff) | |
download | tgif-aaadca28b6148c262385c258c761e166eff6fbeb.tar.xz |
remote-hg: reorganize bookmark handling
We don't need to update both internal and remote bookmarks, so let's do
one or the other, and move the shared code earlier, so it's simpler.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'contrib/remote-helpers/git-remote-hg')
-rwxr-xr-x | contrib/remote-helpers/git-remote-hg | 50 |
1 files changed, 19 insertions, 31 deletions
diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg index 61e6c87724..99de7c2ff0 100755 --- a/contrib/remote-helpers/git-remote-hg +++ b/contrib/remote-helpers/git-remote-hg @@ -885,8 +885,17 @@ def do_export(parser): print "ok %s" % ref elif ref.startswith('refs/heads/'): bmark = ref[len('refs/heads/'):] - p_bmarks.append((bmark, node)) - continue + new = node + old = bmarks[bmark].hex() if bmark in bmarks else '' + + if old == new: + continue + + print "ok %s" % ref + if bmark != fake_bmark and \ + not (bmark == 'master' and bmark not in parser.repo._bookmarks): + p_bmarks.append((ref, bmark, old, new)) + elif ref.startswith('refs/tags/'): tag = ref[len('refs/tags/'):] tag = hgref(tag) @@ -906,39 +915,18 @@ def do_export(parser): if peer: parser.repo.push(peer, force=force_push, newbranch=True) - remote_bmarks = peer.listkeys('bookmarks') - - # handle bookmarks - for bmark, node in p_bmarks: - ref = 'refs/heads/' + bmark - new = node - - if bmark in bmarks: - old = bmarks[bmark].hex() - else: - old = '' - - if old == new: - continue - if bmark == fake_bmark or \ - bmark == 'master' and 'master' not in parser.repo._bookmarks: - print "ok %s" % ref - continue - elif bookmarks.pushbookmark(parser.repo, bmark, old, new): - # updated locally - pass - else: - print "error %s" % ref - continue - - if peer: + # update remote bookmarks + remote_bmarks = peer.listkeys('bookmarks') + for ref, bmark, old, new in p_bmarks: old = remote_bmarks.get(bmark, '') if not peer.pushkey('bookmarks', bmark, old, new): print "error %s" % ref - continue - - print "ok %s" % ref + else: + # update local bookmarks + for ref, bmark, old, new in p_bmarks: + if not bookmarks.pushbookmark(parser.repo, bmark, old, new): + print "error %s" % ref print |