192 files = set() |
192 files = set() |
193 patch.patch(ui, repo, patchfile, files=files, eolmode=None) |
193 patch.patch(ui, repo, patchfile, files=files, eolmode=None) |
194 finally: |
194 finally: |
195 os.unlink(patchfile) |
195 os.unlink(patchfile) |
196 return files |
196 return files |
197 |
|
198 def between(repo, old, new, keep): |
|
199 """select and validate the set of revision to edit |
|
200 |
|
201 When keep is false, the specified set can't have children.""" |
|
202 revs = [old] |
|
203 current = old |
|
204 while current != new: |
|
205 ctx = repo[current] |
|
206 if not keep and len(ctx.children()) > 1: |
|
207 raise util.Abort(_('cannot edit history that would orphan nodes')) |
|
208 if len(ctx.parents()) != 1 and ctx.parents()[1] != node.nullid: |
|
209 raise util.Abort(_("can't edit history with merges")) |
|
210 if not ctx.children(): |
|
211 current = new |
|
212 else: |
|
213 current = ctx.children()[0].node() |
|
214 revs.append(current) |
|
215 if len(repo[current].children()) and not keep: |
|
216 raise util.Abort(_('cannot edit history that would orphan nodes')) |
|
217 return revs |
|
218 |
|
219 |
197 |
220 def pick(ui, repo, ctx, ha, opts): |
198 def pick(ui, repo, ctx, ha, opts): |
221 oldctx = repo[ha] |
199 oldctx = repo[ha] |
222 if oldctx.parents()[0] == ctx: |
200 if oldctx.parents()[0] == ctx: |
223 ui.debug('node %s unchanged\n' % ha) |
201 ui.debug('node %s unchanged\n' % ha) |
623 os.unlink(os.path.join(repo.path, 'histedit-state')) |
601 os.unlink(os.path.join(repo.path, 'histedit-state')) |
624 if os.path.exists(repo.sjoin('undo')): |
602 if os.path.exists(repo.sjoin('undo')): |
625 os.unlink(repo.sjoin('undo')) |
603 os.unlink(repo.sjoin('undo')) |
626 |
604 |
627 |
605 |
|
606 def between(repo, old, new, keep): |
|
607 """select and validate the set of revision to edit |
|
608 |
|
609 When keep is false, the specified set can't have children.""" |
|
610 revs = [old] |
|
611 current = old |
|
612 while current != new: |
|
613 ctx = repo[current] |
|
614 if not keep and len(ctx.children()) > 1: |
|
615 raise util.Abort(_('cannot edit history that would orphan nodes')) |
|
616 if len(ctx.parents()) != 1 and ctx.parents()[1] != node.nullid: |
|
617 raise util.Abort(_("can't edit history with merges")) |
|
618 if not ctx.children(): |
|
619 current = new |
|
620 else: |
|
621 current = ctx.children()[0].node() |
|
622 revs.append(current) |
|
623 if len(repo[current].children()) and not keep: |
|
624 raise util.Abort(_('cannot edit history that would orphan nodes')) |
|
625 return revs |
|
626 |
|
627 |
628 def writestate(repo, parentctxnode, created, replaced, |
628 def writestate(repo, parentctxnode, created, replaced, |
629 tmpnodes, existing, rules, keep, oldtip, replacemap): |
629 tmpnodes, existing, rules, keep, oldtip, replacemap): |
630 fp = open(os.path.join(repo.path, 'histedit-state'), 'w') |
630 fp = open(os.path.join(repo.path, 'histedit-state'), 'w') |
631 pickle.dump((parentctxnode, created, replaced, |
631 pickle.dump((parentctxnode, created, replaced, |
632 tmpnodes, existing, rules, keep, oldtip, replacemap), |
632 tmpnodes, existing, rules, keep, oldtip, replacemap), |