[PATCH] histedit: refactored out diff/patch logic (issue 3527)
Augie Fackler
raf at durin42.com
Wed Aug 29 14:47:41 CDT 2012
LGTM other than Bryan's nit, which I agree with.
On Aug 28, 2012, at 2:20 PM, Leah Xue wrote:
> # HG changeset patch
> # User Leah Xue <leahxue at fb.com>
> # Date 1345590394 25200
> # Node ID 62cf73ff667333129ac56702c55b96e1f59a9678
> # Parent c6f88e7f95b764e23b7e0b4353c5a6458bbc3cc4
> histedit: refactored out diff/patch logic (issue 3527)
>
> This patch is the first step towards a refactoring of the histedit extension to
> use underlying graft machinery instead of diff/patch. Replacing diff/patch with
> graft is necessary to fix, for example, issue 3582.
>
> diff -r c6f88e7f95b7 -r 62cf73ff6673 hgext/histedit.py
> --- a/hgext/histedit.py Sat Aug 11 12:45:53 2012 -0500
> +++ b/hgext/histedit.py Tue Aug 21 16:06:34 2012 -0700
> @@ -175,6 +175,26 @@
> #
> """)
>
> +def foldchanges(ui, repo, node1, node2, opts):
> + """Produce a new changeset that represents the diff from node1 to node2."""
> + try:
> + fd, patchfile = tempfile.mkstemp(prefix='hg-histedit-')
> + fp = os.fdopen(fd, 'w')
> + diffopts = patch.diffopts(ui, opts)
> + diffopts.git = True
> + diffopts.ignorews = False
> + diffopts.ignorewsamount = False
> + diffopts.ignoreblanklines = False
> + gen = patch.diff(repo, node1, node2, opts=diffopts)
> + for chunk in gen:
> + fp.write(chunk)
> + fp.close()
> + files = set()
> + patch.patch(ui, repo, patchfile, files=files, eolmode=None)
> + finally:
> + os.unlink(patchfile)
> + return files
> +
> def between(repo, old, new, keep):
> revs = [old]
> current = old
> @@ -200,27 +220,12 @@
> ui.debug('node %s unchanged\n' % ha)
> return oldctx, [], [], []
> hg.update(repo, ctx.node())
> - fd, patchfile = tempfile.mkstemp(prefix='hg-histedit-')
> - fp = os.fdopen(fd, 'w')
> - diffopts = patch.diffopts(ui, opts)
> - diffopts.git = True
> - diffopts.ignorews = False
> - diffopts.ignorewsamount = False
> - diffopts.ignoreblanklines = False
> - gen = patch.diff(repo, oldctx.parents()[0].node(), ha, opts=diffopts)
> - for chunk in gen:
> - fp.write(chunk)
> - fp.close()
> try:
> - files = set()
> - try:
> - patch.patch(ui, repo, patchfile, files=files, eolmode=None)
> - if not files:
> - ui.warn(_('%s: empty changeset')
> - % node.hex(ha))
> - return ctx, [], [], []
> - finally:
> - os.unlink(patchfile)
> + files = foldchanges(ui, repo, oldctx.parents()[0].node(), ha, opts)
> + if not files:
> + ui.warn(_('%s: empty changeset')
> + % node.hex(ha))
> + return ctx, [], [], []
> except Exception:
> raise util.Abort(_('Fix up the change and run '
> 'hg histedit --continue'))
> @@ -232,23 +237,8 @@
> def edit(ui, repo, ctx, ha, opts):
> oldctx = repo[ha]
> hg.update(repo, ctx.node())
> - fd, patchfile = tempfile.mkstemp(prefix='hg-histedit-')
> - fp = os.fdopen(fd, 'w')
> - diffopts = patch.diffopts(ui, opts)
> - diffopts.git = True
> - diffopts.ignorews = False
> - diffopts.ignorewsamount = False
> - diffopts.ignoreblanklines = False
> - gen = patch.diff(repo, oldctx.parents()[0].node(), ha, opts=diffopts)
> - for chunk in gen:
> - fp.write(chunk)
> - fp.close()
> try:
> - files = set()
> - try:
> - patch.patch(ui, repo, patchfile, files=files, eolmode=None)
> - finally:
> - os.unlink(patchfile)
> + files = foldchanges(ui, repo, oldctx.parents()[0].node(), ha, opts)
> except Exception:
> pass
> raise util.Abort(_('Make changes as needed, you may commit or record as '
> @@ -258,27 +248,12 @@
> def fold(ui, repo, ctx, ha, opts):
> oldctx = repo[ha]
> hg.update(repo, ctx.node())
> - fd, patchfile = tempfile.mkstemp(prefix='hg-histedit-')
> - fp = os.fdopen(fd, 'w')
> - diffopts = patch.diffopts(ui, opts)
> - diffopts.git = True
> - diffopts.ignorews = False
> - diffopts.ignorewsamount = False
> - diffopts.ignoreblanklines = False
> - gen = patch.diff(repo, oldctx.parents()[0].node(), ha, opts=diffopts)
> - for chunk in gen:
> - fp.write(chunk)
> - fp.close()
> try:
> - files = set()
> - try:
> - patch.patch(ui, repo, patchfile, files=files, eolmode=None)
> - if not files:
> - ui.warn(_('%s: empty changeset')
> - % node.hex(ha))
> - return ctx, [], [], []
> - finally:
> - os.unlink(patchfile)
> + files = foldchanges(ui, repo, oldctx.parents()[0].node(), ha, opts)
> + if not files:
> + ui.warn(_('%s: empty changeset')
> + % node.hex(ha))
> + return ctx, [], [], []
> except Exception:
> raise util.Abort(_('Fix up the change and run '
> 'hg histedit --continue'))
> @@ -289,22 +264,7 @@
> def finishfold(ui, repo, ctx, oldctx, newnode, opts, internalchanges):
> parent = ctx.parents()[0].node()
> hg.update(repo, parent)
> - fd, patchfile = tempfile.mkstemp(prefix='hg-histedit-')
> - fp = os.fdopen(fd, 'w')
> - diffopts = patch.diffopts(ui, opts)
> - diffopts.git = True
> - diffopts.ignorews = False
> - diffopts.ignorewsamount = False
> - diffopts.ignoreblanklines = False
> - gen = patch.diff(repo, parent, newnode, opts=diffopts)
> - for chunk in gen:
> - fp.write(chunk)
> - fp.close()
> - files = set()
> - try:
> - patch.patch(ui, repo, patchfile, files=files, eolmode=None)
> - finally:
> - os.unlink(patchfile)
> + files = foldchanges(ui, repo, parent, newnode, opts)
> newmessage = '\n***\n'.join(
> [ctx.description()] +
> [repo[r].description() for r in internalchanges] +
> @@ -326,23 +286,8 @@
> def message(ui, repo, ctx, ha, opts):
> oldctx = repo[ha]
> hg.update(repo, ctx.node())
> - fd, patchfile = tempfile.mkstemp(prefix='hg-histedit-')
> - fp = os.fdopen(fd, 'w')
> - diffopts = patch.diffopts(ui, opts)
> - diffopts.git = True
> - diffopts.ignorews = False
> - diffopts.ignorewsamount = False
> - diffopts.ignoreblanklines = False
> - gen = patch.diff(repo, oldctx.parents()[0].node(), ha, opts=diffopts)
> - for chunk in gen:
> - fp.write(chunk)
> - fp.close()
> try:
> - files = set()
> - try:
> - patch.patch(ui, repo, patchfile, files=files, eolmode=None)
> - finally:
> - os.unlink(patchfile)
> + files = foldchanges(ui, repo, oldctx.parents()[0].node(), ha, opts)
> except Exception:
> raise util.Abort(_('Fix up the change and run '
> 'hg histedit --continue'))
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list