Mercurial > hgsubversion
comparison push_cmd.py @ 152:1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
| author | Augie Fackler <durin42@gmail.com> |
|---|---|
| date | Mon, 22 Dec 2008 21:22:11 -0600 |
| parents | 2decec74ad0c |
| children | fdc249cd1a0a |
comparison
equal
deleted
inserted
replaced
| 151:2decec74ad0c | 152:1fde85a10f9e |
|---|---|
| 22 ui_=ui) | 22 ui_=ui) |
| 23 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), | 23 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
| 24 hge.revmap.iterkeys())) | 24 hge.revmap.iterkeys())) |
| 25 # Strategy: | 25 # Strategy: |
| 26 # 1. Find all outgoing commits from this head | 26 # 1. Find all outgoing commits from this head |
| 27 outgoing = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes) | 27 if len(repo.parents()) != 1: |
| 28 ui.status('Cowardly refusing to push branch merge') | |
| 29 return 1 | |
| 30 workingrev = repo.parents()[0] | |
| 31 outgoing = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes, workingrev.node()) | |
| 28 if not (outgoing and len(outgoing)): | 32 if not (outgoing and len(outgoing)): |
| 29 ui.status('No revisions to push.') | 33 ui.status('No revisions to push.') |
| 30 return 0 | 34 return 0 |
| 31 if len(repo.parents()) != 1: | |
| 32 ui.status('Cowardly refusing to push branch merge') | |
| 33 return 1 | |
| 34 while outgoing: | 35 while outgoing: |
| 35 oldest = outgoing.pop(-1) | 36 oldest = outgoing.pop(-1) |
| 36 old_ctx = repo[oldest] | 37 old_ctx = repo[oldest] |
| 37 if len(old_ctx.parents()) != 1: | 38 if len(old_ctx.parents()) != 1: |
| 38 ui.status('Found a branch merge, this needs discussion and ' | 39 ui.status('Found a branch merge, this needs discussion and ' |
| 67 for needs_transplant in heads: | 68 for needs_transplant in heads: |
| 68 def extrafn(ctx, extra): | 69 def extrafn(ctx, extra): |
| 69 if ctx.node() == oldest: | 70 if ctx.node() == oldest: |
| 70 return | 71 return |
| 71 extra['branch'] = ctx.branch() | 72 extra['branch'] = ctx.branch() |
| 72 hg.clean(repo, needs_transplant) | 73 utility_commands.rebase_commits(ui, repo, hg_repo_path, |
| 73 utility_commands.rebase_commits(ui, repo, hg_repo_path, extrafn=extrafn, **opts) | 74 extrafn=extrafn, |
| 75 sourcerev=needs_transplant, | |
| 76 **opts) | |
| 74 repo = hg.repository(ui, hge.path) | 77 repo = hg.repository(ui, hge.path) |
| 75 for child in repo[replacement.node()].children(): | 78 for child in repo[replacement.node()].children(): |
| 76 rebasesrc = node.bin(child.extra().get('rebase_source', node.hex(node.nullid))) | 79 rebasesrc = node.bin(child.extra().get('rebase_source', node.hex(node.nullid))) |
| 77 if rebasesrc in outgoing: | 80 if rebasesrc in outgoing: |
| 78 rebsrcindex = outgoing.index(rebasesrc) | 81 while rebasesrc in outgoing: |
| 79 outgoing = outgoing[0:rebsrcindex] + [child.node(), ] + outgoing[rebsrcindex+1:] | 82 rebsrcindex = outgoing.index(rebasesrc) |
| 83 outgoing = (outgoing[0:rebsrcindex] + | |
| 84 [child.node(), ] + outgoing[rebsrcindex+1:]) | |
| 85 children = [c for c in child.children() if c.branch() == child.branch()] | |
| 86 if children: | |
| 87 child = children[0] | |
| 88 rebasesrc = node.bin(child.extra().get('rebase_source', node.hex(node.nullid))) | |
| 80 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, ui_=ui) | 89 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, ui_=ui) |
| 81 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), hge.revmap.iterkeys())) | 90 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), hge.revmap.iterkeys())) |
| 82 merc_util._encoding = oldencoding | 91 merc_util._encoding = oldencoding |
| 83 return 0 | 92 return 0 |
| 84 | 93 |
