hgext/evolve.py
changeset 1141 ca17770d2ee9
parent 1140 b7d85cd8ec7b
child 1143 160fd06312fc
equal deleted inserted replaced
1140:b7d85cd8ec7b 1141:ca17770d2ee9
   756     return newid, created
   756     return newid, created
   757 
   757 
   758 class MergeFailure(util.Abort):
   758 class MergeFailure(util.Abort):
   759     pass
   759     pass
   760 
   760 
   761 def relocate(repo, orig, dest):
   761 def relocate(repo, orig, dest, keepbranch=False):
   762     """rewrite <rev> on dest"""
   762     """rewrite <rev> on dest"""
   763     if orig.rev() == dest.rev():
   763     if orig.rev() == dest.rev():
   764         raise util.Abort(_('tried to relocate a node on top of itself'),
   764         raise util.Abort(_('tried to relocate a node on top of itself'),
   765                          hint=_("This shouldn't happen. If you still "
   765                          hint=_("This shouldn't happen. If you still "
   766                                 "need to move changesets, please do so "
   766                                 "need to move changesets, please do so "
   809                                   {node.nullrev: node.nullrev}, False,
   809                                   {node.nullrev: node.nullrev}, False,
   810                                   orig.p1().node())
   810                                   orig.p1().node())
   811             if r[-1]: #some conflict
   811             if r[-1]: #some conflict
   812                 raise util.Abort(
   812                 raise util.Abort(
   813                         'unresolved merge conflicts (see hg help resolve)')
   813                         'unresolved merge conflicts (see hg help resolve)')
       
   814             if keepbranch:
       
   815                 def _extrafn(ctx, extra):
       
   816                     extra['branch'] = ctx.branch()
       
   817             else:
       
   818                 _extrafn = (lambda ctx, extra: None)
       
   819 
   814             nodenew = rebase.concludenode(repo, orig.node(), dest.node(),
   820             nodenew = rebase.concludenode(repo, orig.node(), dest.node(),
   815                                           node.nullid, commitmsg)
   821                                           node.nullid, commitmsg,
       
   822                                           extrafn=_extrafn)
   816         except util.Abort, exc:
   823         except util.Abort, exc:
   817             repo.dirstate.beginparentchange()
   824             repo.dirstate.beginparentchange()
   818             repo.setparents(repo['.'].node(), nullid)
   825             repo.setparents(repo['.'].node(), nullid)
   819             repo.dirstate.write()
   826             repo.dirstate.write()
   820             # fix up dirstate for copies and renames
   827             # fix up dirstate for copies and renames
  1339     if dryrun:
  1346     if dryrun:
  1340         repo.ui.write(todo)
  1347         repo.ui.write(todo)
  1341     else:
  1348     else:
  1342         repo.ui.note(todo)
  1349         repo.ui.note(todo)
  1343         if progresscb: progresscb()
  1350         if progresscb: progresscb()
       
  1351         keepbranch = orig.p1().branch() != orig.branch()
  1344         try:
  1352         try:
  1345             relocate(repo, orig, target)
  1353             relocate(repo, orig, target, keepbranch)
  1346         except MergeFailure:
  1354         except MergeFailure:
  1347             repo.opener.write('graftstate', orig.hex() + '\n')
  1355             repo.opener.write('graftstate', orig.hex() + '\n')
  1348             repo.ui.write_err(_('evolve failed!\n'))
  1356             repo.ui.write_err(_('evolve failed!\n'))
  1349             repo.ui.write_err(
  1357             repo.ui.write_err(
  1350                 _('fix conflict and run "hg evolve --continue"\n'))
  1358                 _('fix conflict and run "hg evolve --continue"\n'))