[PATCH 2 of 4 evolve-ext] metaedit: extend the functionality to support editing multiple commits
Mateusz Kwapich
mitrandir at fb.com
Wed Nov 16 14:56:04 EST 2016
# HG changeset patch
# User Mateusz Kwapich <mitrandir at fb.com>
# Date 1479324135 0
# Wed Nov 16 19:22:15 2016 +0000
# Branch stable
# Node ID b2bde478bfebc390dba8f1ee314b7bdd062ab191
# Parent 744c6acd84edf73ffdf505b9673b0383db727a0e
metaedit: extend the functionality to support editing multiple commits
diff --git a/hgext/evolve.py b/hgext/evolve.py
--- a/hgext/evolve.py
+++ b/hgext/evolve.py
@@ -3257,29 +3257,57 @@ def metaedit(ui, repo, *revs, **opts):
if commitopts.get('message') or commitopts.get('logfile'):
commitopts['edit'] = False
else:
- if opts['fold']:
- msgs = ["HG: This is a fold of %d changesets." % len(allctx)]
- msgs += ["HG: Commit message of changeset %s.\n\n%s\n" %
- (c.rev(), c.description()) for c in allctx]
- else:
- msgs = [head.description()]
- commitopts['message'] = "\n".join(msgs)
commitopts['edit'] = True
# TODO: if the author and message are the same, don't create a new
# hash. Right now we create a new hash because the date can be
# different.
- newid, created = rewrite(repo, root, allctx, head,
- [root.p1().node(), root.p2().node()],
- commitopts=commitopts)
- if created:
- if p1.rev() in revs:
- newp1 = newid
- phases.retractboundary(repo, tr, targetphase, [newid])
- obsolete.createmarkers(repo, [(ctx, (repo[newid],))
- for ctx in allctx])
+ if opts['fold']:
+ if commitopts['edit']:
+ msgs = ["HG: This is a fold of %d changesets." %
+ len(allctx)]
+ msgs += ["HG: Commit message of changeset %s.\n\n%s\n" %
+ (c.rev(), c.description()) for c in allctx]
+ commitopts['message'] = "\n".join(msgs)
+
+ newid, created = rewrite(repo, root, allctx, head,
+ [root.p1().node(), root.p2().node()],
+ commitopts=commitopts)
+ if created:
+ if p1.rev() in revs:
+ newp1 = newid
+ phases.retractboundary(repo, tr, targetphase, [newid])
+ obsolete.createmarkers(repo, [(ctx, (repo[newid],))
+ for ctx in allctx])
+ else:
+ ui.status(_("nothing changed\n"))
else:
- ui.status(_("nothing changed\n"))
+ replacemap = {}
+ # we need topological order
+ allctx = sorted(allctx, key=lambda c: c.rev())
+ for c in allctx:
+ if commitopts['edit']:
+ commitopts['message'] = \
+ "HG: Commit message of changeset %s\n%s" %\
+ (str(c), c.description())
+ bases = [
+ replacemap.get(c.p1().node(), c.p1().node()),
+ replacemap.get(c.p2().node(), c.p2().node()),
+ ]
+ newid, created = metarewrite(repo, c, bases,
+ commitopts=commitopts)
+ if created:
+ replacemap[c.node()] = newid
+
+ if p1.node() in replacemap:
+ newp1 = replacemap[p1.node()]
+ if len(replacemap) > 0:
+ obsolete.createmarkers(repo, [(repo[old], (repo[new],))
+ for old, new in replacemap.iteritems()])
+ # TODO: set poroper phase boundaries
+ else:
+ ui.status(_("nothing changed\n"))
+
tr.close()
finally:
tr.release()
More information about the Mercurial-devel
mailing list