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 |