mercurial/merge.py
changeset 22902 ce0592328d68
parent 22841 18b3869179f9
child 22964 2793ecb1522d
equal deleted inserted replaced
22901:722117c8e023 22902:ce0592328d68
  1147         wlock.release()
  1147         wlock.release()
  1148 
  1148 
  1149     if not partial:
  1149     if not partial:
  1150         repo.hook('update', parent1=xp1, parent2=xp2, error=stats[3])
  1150         repo.hook('update', parent1=xp1, parent2=xp2, error=stats[3])
  1151     return stats
  1151     return stats
       
  1152 
       
  1153 def graft(repo, ctx, pctx, labels):
       
  1154     """Do a graft-like merge.
       
  1155 
       
  1156     This is a merge where the merge ancestor is chosen such that one
       
  1157     or more changesets are grafted onto the current changeset. In
       
  1158     addition to the merge, this fixes up the dirstate to include only
       
  1159     a single parent and tries to duplicate any renames/copies
       
  1160     appropriately.
       
  1161 
       
  1162     ctx - changeset to rebase
       
  1163     pctx - merge base, usually ctx.p1()
       
  1164     labels - merge labels eg ['local', 'graft']
       
  1165 
       
  1166     """
       
  1167 
       
  1168     stats = update(repo, ctx.node(), True, True, False, pctx.node(),
       
  1169                    labels=labels)
       
  1170     # drop the second merge parent
       
  1171     repo.dirstate.beginparentchange()
       
  1172     repo.setparents(repo['.'].node(), nullid)
       
  1173     repo.dirstate.write()
       
  1174     # fix up dirstate for copies and renames
       
  1175     copies.duplicatecopies(repo, ctx.rev(), pctx.rev())
       
  1176     repo.dirstate.endparentchange()
       
  1177     return stats