Mercurial > hg-stable
changeset 18436:b38c10502af9
histedit: factor most commit creation in a function
Later commits add two important items to histedit:
- Obsolescence cycle prevention
- Proper phase conservation
Those logics must be applied to all simple operations (pick, edit, mess) and
will require verbose code.
So we introduce a new function that will provide an entry point for this new.
logic.
The function build a closure to have a clear distinction between commit
arguments and data provided to the function to fulfil its logic.
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Wed, 16 Jan 2013 19:11:06 +0100 |
parents | 8c019d2fd7c0 |
children | 358c23e8f1c6 |
files | hgext/histedit.py |
diffstat | 1 files changed, 27 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/histedit.py Wed Dec 12 13:09:37 2012 -0800 +++ b/hgext/histedit.py Wed Jan 16 19:11:06 2013 +0100 @@ -176,6 +176,22 @@ # """) +def commitfuncfor(repo, src): + """Build a commit function for the replacement of <src> + + This function ensure we apply the same treatement to all changesets. + + No such treatment is done yet. + + Note that fold have its own separated logic because its handling is a bit + different and not easily factored out of the fold method. + """ + def commitfunc(**kwargs): + return repo.commit(**kwargs) + return commitfunc + + + def applychanges(ui, repo, ctx, opts): """Merge changeset from ctx (only) in the current working directory""" wcpar = repo.dirstate.parents()[0] @@ -279,8 +295,9 @@ raise util.Abort(_('Fix up the change and run ' 'hg histedit --continue')) # drop the second merge parent - n = repo.commit(text=oldctx.description(), user=oldctx.user(), - date=oldctx.date(), extra=oldctx.extra()) + commit = commitfuncfor(repo, oldctx) + n = commit(text=oldctx.description(), user=oldctx.user(), + date=oldctx.date(), extra=oldctx.extra()) if n is None: ui.warn(_('%s: empty changeset\n') % node.hex(ha)) @@ -356,8 +373,9 @@ 'hg histedit --continue')) message = oldctx.description() + '\n' message = ui.edit(message, ui.username()) - new = repo.commit(text=message, user=oldctx.user(), date=oldctx.date(), - extra=oldctx.extra()) + commit = commitfuncfor(repo, oldctx) + new = commit(text=message, user=oldctx.user(), date=oldctx.date(), + extra=oldctx.extra()) newctx = repo[new] if oldctx.node() != newctx.node(): return newctx, [(oldctx.node(), (new,))] @@ -558,9 +576,10 @@ editor = cmdutil.commitforceeditor else: editor = False - new = repo.commit(text=message, user=ctx.user(), - date=ctx.date(), extra=ctx.extra(), - editor=editor) + commit = commitfuncfor(repo, ctx) + new = commit(text=message, user=ctx.user(), + date=ctx.date(), extra=ctx.extra(), + editor=editor) if new is not None: newchildren.append(new) @@ -722,7 +741,7 @@ moves = [] for bk, old in sorted(repo._bookmarks.iteritems()): if old == oldtopmost: - # special case ensure bookmark stay on tip. + # special case ensure bookmark stay on tip. # # This is arguably a feature and we may only want that for the # active bookmark. But the behavior is kept compatible with the old