--- a/hgext3rd/evolve/__init__.py Sun Jul 23 05:12:18 2017 +0200
+++ b/hgext3rd/evolve/__init__.py Sun Jul 23 05:16:24 2017 +0200
@@ -2585,120 +2585,6 @@
finally:
lockmod.release(tr, lock, wlock)
-@eh.command(
- '^fold|squash',
- [('r', 'rev', [], _("revision to fold")),
- ('', 'exact', None, _("only fold specified revisions")),
- ('', 'from', None, _("fold revisions linearly to working copy parent"))
- ] + commitopts + commitopts2,
- _('hg fold [OPTION]... [-r] REV'))
-def fold(ui, repo, *revs, **opts):
- """fold multiple revisions into a single one
-
- With --from, folds all the revisions linearly between the given revisions
- and the parent of the working directory.
-
- With --exact, folds only the specified revisions while ignoring the
- parent of the working directory. In this case, the given revisions must
- form a linear unbroken chain.
-
- .. container:: verbose
-
- Some examples:
-
- - Fold the current revision with its parent::
-
- hg fold --from .^
-
- - Fold all draft revisions with working directory parent::
-
- hg fold --from 'draft()'
-
- See :hg:`help phases` for more about draft revisions and
- :hg:`help revsets` for more about the `draft()` keyword
-
- - Fold revisions between 3 and 6 with the working directory parent::
-
- hg fold --from 3::6
-
- - Fold revisions 3 and 4:
-
- hg fold "3 + 4" --exact
-
- - Only fold revisions linearly between foo and @::
-
- hg fold foo::@ --exact
- """
- revs = list(revs)
- revs.extend(opts['rev'])
- if not revs:
- raise error.Abort(_('no revisions specified'))
-
- revs = scmutil.revrange(repo, revs)
-
- if opts['from'] and opts['exact']:
- raise error.Abort(_('cannot use both --from and --exact'))
- elif opts['from']:
- # Try to extend given revision starting from the working directory
- extrevs = repo.revs('(%ld::.) or (.::%ld)', revs, revs)
- discardedrevs = [r for r in revs if r not in extrevs]
- if discardedrevs:
- msg = _("cannot fold non-linear revisions")
- hint = _("given revisions are unrelated to parent of working"
- " directory")
- raise error.Abort(msg, hint=hint)
- revs = extrevs
- elif opts['exact']:
- # Nothing to do; "revs" is already set correctly
- pass
- else:
- raise error.Abort(_('must specify either --from or --exact'))
-
- if not revs:
- raise error.Abort(_('specified revisions evaluate to an empty set'),
- hint=_('use different revision arguments'))
- elif len(revs) == 1:
- ui.write_err(_('single revision specified, nothing to fold\n'))
- return 1
-
- wlock = lock = None
- try:
- wlock = repo.wlock()
- lock = repo.lock()
-
- root, head = rewriteutil.foldcheck(repo, revs)
-
- tr = repo.transaction('fold')
- 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:
- 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)
- commitopts['edit'] = True
-
- newid, unusedvariable = rewrite(repo, root, allctx, head,
- [root.p1().node(),
- root.p2().node()],
- commitopts=commitopts)
- phases.retractboundary(repo, tr, targetphase, [newid])
- obsolete.createmarkers(repo, [(ctx, (repo[newid],))
- for ctx in allctx])
- tr.close()
- finally:
- tr.release()
- ui.status('%i changesets folded\n' % len(revs))
- if repo['.'].rev() in revs:
- hg.update(repo, newid)
- 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:12:18 2017 +0200
+++ b/hgext3rd/evolve/evocommands.py Sun Jul 23 05:16:24 2017 +0200
@@ -307,6 +307,121 @@
lockmod.release(tr, lock, wlock)
@eh.command(
+ '^fold|squash',
+ [('r', 'rev', [], _("revision to fold")),
+ ('', 'exact', None, _("only fold specified revisions")),
+ ('', 'from', None, _("fold revisions linearly to working copy parent"))
+ ] + commitopts + commitopts2,
+ _('hg fold [OPTION]... [-r] REV'))
+def fold(ui, repo, *revs, **opts):
+ """fold multiple revisions into a single one
+
+ With --from, folds all the revisions linearly between the given revisions
+ and the parent of the working directory.
+
+ With --exact, folds only the specified revisions while ignoring the
+ parent of the working directory. In this case, the given revisions must
+ form a linear unbroken chain.
+
+ .. container:: verbose
+
+ Some examples:
+
+ - Fold the current revision with its parent::
+
+ hg fold --from .^
+
+ - Fold all draft revisions with working directory parent::
+
+ hg fold --from 'draft()'
+
+ See :hg:`help phases` for more about draft revisions and
+ :hg:`help revsets` for more about the `draft()` keyword
+
+ - Fold revisions between 3 and 6 with the working directory parent::
+
+ hg fold --from 3::6
+
+ - Fold revisions 3 and 4:
+
+ hg fold "3 + 4" --exact
+
+ - Only fold revisions linearly between foo and @::
+
+ hg fold foo::@ --exact
+ """
+ revs = list(revs)
+ revs.extend(opts['rev'])
+ if not revs:
+ raise error.Abort(_('no revisions specified'))
+
+ revs = scmutil.revrange(repo, revs)
+
+ if opts['from'] and opts['exact']:
+ raise error.Abort(_('cannot use both --from and --exact'))
+ elif opts['from']:
+ # Try to extend given revision starting from the working directory
+ extrevs = repo.revs('(%ld::.) or (.::%ld)', revs, revs)
+ discardedrevs = [r for r in revs if r not in extrevs]
+ if discardedrevs:
+ msg = _("cannot fold non-linear revisions")
+ hint = _("given revisions are unrelated to parent of working"
+ " directory")
+ raise error.Abort(msg, hint=hint)
+ revs = extrevs
+ elif opts['exact']:
+ # Nothing to do; "revs" is already set correctly
+ pass
+ else:
+ raise error.Abort(_('must specify either --from or --exact'))
+
+ if not revs:
+ raise error.Abort(_('specified revisions evaluate to an empty set'),
+ hint=_('use different revision arguments'))
+ elif len(revs) == 1:
+ ui.write_err(_('single revision specified, nothing to fold\n'))
+ return 1
+
+ wlock = lock = None
+ try:
+ wlock = repo.wlock()
+ lock = repo.lock()
+
+ root, head = rewriteutil.foldcheck(repo, revs)
+
+ tr = repo.transaction('fold')
+ 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:
+ 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)
+ commitopts['edit'] = True
+
+ newid, unusedvariable = rewriteutil.rewrite(repo, root, allctx,
+ head,
+ [root.p1().node(),
+ root.p2().node()],
+ commitopts=commitopts)
+ phases.retractboundary(repo, tr, targetphase, [newid])
+ obsolete.createmarkers(repo, [(ctx, (repo[newid],))
+ for ctx in allctx])
+ tr.close()
+ finally:
+ tr.release()
+ ui.status('%i changesets folded\n' % len(revs))
+ if repo['.'].rev() in revs:
+ hg.update(repo, newid)
+ finally:
+ lockmod.release(lock, wlock)
+
+@eh.command(
'^metaedit',
[('r', 'rev', [], _("revision to edit")),
('', 'fold', None, _("also fold specified revisions into one")),