--- a/hgext3rd/evolve/__init__.py Sun Jul 23 05:07:13 2017 +0200
+++ b/hgext3rd/evolve/__init__.py Sun Jul 23 05:12:18 2017 +0200
@@ -2699,128 +2699,6 @@
finally:
lockmod.release(lock, wlock)
-@eh.command(
- '^metaedit',
- [('r', 'rev', [], _("revision to edit")),
- ('', 'fold', None, _("also fold specified revisions into one")),
- ] + commitopts + commitopts2,
- _('hg metaedit [OPTION]... [-r] [REV]'))
-def metaedit(ui, repo, *revs, **opts):
- """edit commit information
-
- Edits the commit information for the specified revisions. By default, edits
- commit information for the working directory parent.
-
- With --fold, also folds multiple revisions into one if necessary. In this
- case, the given revisions must form a linear unbroken chain.
-
- .. container:: verbose
-
- Some examples:
-
- - Edit the commit message for the working directory parent::
-
- hg metaedit
-
- - Change the username for the working directory parent::
-
- hg metaedit --user 'New User <new-email@example.com>'
-
- - Combine all draft revisions that are ancestors of foo but not of @ into
- one::
-
- hg metaedit --fold 'draft() and only(foo,@)'
-
- See :hg:`help phases` for more about draft revisions, and
- :hg:`help revsets` for more about the `draft()` and `only()` keywords.
- """
- revs = list(revs)
- revs.extend(opts['rev'])
- if not revs:
- if opts['fold']:
- raise error.Abort(_('revisions must be specified with --fold'))
- revs = ['.']
-
- wlock = lock = None
- try:
- wlock = repo.wlock()
- lock = repo.lock()
-
- revs = scmutil.revrange(repo, revs)
- if not opts['fold'] and len(revs) > 1:
- # TODO: handle multiple revisions. This is somewhat tricky because
- # if we want to edit a series of commits:
- #
- # a ---- b ---- c
- #
- # we need to rewrite a first, then directly rewrite b on top of the
- # new a, then rewrite c on top of the new b. So we need to handle
- # revisions in topological order.
- raise error.Abort(_('editing multiple revisions without --fold is '
- 'not currently supported'))
-
- if opts['fold']:
- root, head = rewriteutil.foldcheck(repo, revs)
- else:
- if repo.revs("%ld and public()", revs):
- raise error.Abort(_('cannot edit commit information for public '
- 'revisions'))
- newunstable = rewriteutil.disallowednewunstable(repo, revs)
- if newunstable:
- msg = _('cannot edit commit information in the middle'
- ' of a stack')
- hint = _('%s will become unstable and new unstable changes'
- ' are not allowed')
- hint %= repo[newunstable.first()]
- raise error.Abort(msg, hint=hint)
- root = head = repo[revs.first()]
-
- wctx = repo[None]
- p1 = wctx.p1()
- tr = repo.transaction('metaedit')
- newp1 = None
- try:
- commitopts = opts.copy()
- allctx = [repo[r] for r in revs]
- targetphase = max(c.phase() for c in allctx)
-
- 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])
- else:
- ui.status(_("nothing changed\n"))
- tr.close()
- finally:
- tr.release()
-
- if opts['fold']:
- ui.status('%i changesets folded\n' % len(revs))
- if newp1 is not None:
- hg.update(repo, newp1)
- finally:
- lockmod.release(lock, wlock)
-
@eh.wrapcommand('graft')
def graftwrapper(orig, ui, repo, *revs, **kwargs):
kwargs = dict(kwargs)
--- a/hgext3rd/evolve/evocommands.py Sun Jul 23 05:07:13 2017 +0200
+++ b/hgext3rd/evolve/evocommands.py Sun Jul 23 05:12:18 2017 +0200
@@ -19,6 +19,7 @@
context,
copies,
error,
+ hg,
lock as lockmod,
node,
obsolete,
@@ -304,3 +305,126 @@
tr.close()
finally:
lockmod.release(tr, lock, wlock)
+
+@eh.command(
+ '^metaedit',
+ [('r', 'rev', [], _("revision to edit")),
+ ('', 'fold', None, _("also fold specified revisions into one")),
+ ] + commitopts + commitopts2,
+ _('hg metaedit [OPTION]... [-r] [REV]'))
+def metaedit(ui, repo, *revs, **opts):
+ """edit commit information
+
+ Edits the commit information for the specified revisions. By default, edits
+ commit information for the working directory parent.
+
+ With --fold, also folds multiple revisions into one if necessary. In this
+ case, the given revisions must form a linear unbroken chain.
+
+ .. container:: verbose
+
+ Some examples:
+
+ - Edit the commit message for the working directory parent::
+
+ hg metaedit
+
+ - Change the username for the working directory parent::
+
+ hg metaedit --user 'New User <new-email@example.com>'
+
+ - Combine all draft revisions that are ancestors of foo but not of @ into
+ one::
+
+ hg metaedit --fold 'draft() and only(foo,@)'
+
+ See :hg:`help phases` for more about draft revisions, and
+ :hg:`help revsets` for more about the `draft()` and `only()` keywords.
+ """
+ revs = list(revs)
+ revs.extend(opts['rev'])
+ if not revs:
+ if opts['fold']:
+ raise error.Abort(_('revisions must be specified with --fold'))
+ revs = ['.']
+
+ wlock = lock = None
+ try:
+ wlock = repo.wlock()
+ lock = repo.lock()
+
+ revs = scmutil.revrange(repo, revs)
+ if not opts['fold'] and len(revs) > 1:
+ # TODO: handle multiple revisions. This is somewhat tricky because
+ # if we want to edit a series of commits:
+ #
+ # a ---- b ---- c
+ #
+ # we need to rewrite a first, then directly rewrite b on top of the
+ # new a, then rewrite c on top of the new b. So we need to handle
+ # revisions in topological order.
+ raise error.Abort(_('editing multiple revisions without --fold is '
+ 'not currently supported'))
+
+ if opts['fold']:
+ root, head = rewriteutil.foldcheck(repo, revs)
+ else:
+ if repo.revs("%ld and public()", revs):
+ raise error.Abort(_('cannot edit commit information for public '
+ 'revisions'))
+ newunstable = rewriteutil.disallowednewunstable(repo, revs)
+ if newunstable:
+ msg = _('cannot edit commit information in the middle'
+ ' of a stack')
+ hint = _('%s will become unstable and new unstable changes'
+ ' are not allowed')
+ hint %= repo[newunstable.first()]
+ raise error.Abort(msg, hint=hint)
+ root = head = repo[revs.first()]
+
+ wctx = repo[None]
+ p1 = wctx.p1()
+ tr = repo.transaction('metaedit')
+ newp1 = None
+ try:
+ commitopts = opts.copy()
+ allctx = [repo[r] for r in revs]
+ targetphase = max(c.phase() for c in allctx)
+
+ 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 = rewriteutil.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"))
+ tr.close()
+ finally:
+ tr.release()
+
+ if opts['fold']:
+ ui.status('%i changesets folded\n' % len(revs))
+ if newp1 is not None:
+ hg.update(repo, newp1)
+ finally:
+ lockmod.release(lock, wlock)