[PATCH V2 for 09 of 14 FIX-bundle2] histedit: properly apply bundle2 backups

Augie Fackler raf at durin42.com
Wed Oct 21 09:43:38 CDT 2015


On Tue, Oct 20, 2015 at 06:39:48PM +0200, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1445303243 -7200
> #      Tue Oct 20 03:07:23 2015 +0200
> # Node ID b7aae40caeea1ee81c9725c432bbb34047291038
> # Parent  122054fdc36932f18ae6af7d66d908718e88a0d1
> # EXP-Topic generaldelta
> # Available At http://hg.netv6.net/marmoute-wip/mercurial/
> #              hg pull http://hg.netv6.net/marmoute-wip/mercurial/ -r b7aae40caeea
> histedit: properly apply bundle2 backups
>
> If the histedit fails we restore a backup. We make sure this backup bundle can
> be in bundle2 format as general delta will requires.
>
> diff --git a/hgext/histedit.py b/hgext/histedit.py
> --- a/hgext/histedit.py
> +++ b/hgext/histedit.py
> @@ -158,10 +158,11 @@ except ImportError:
>      import pickle
>  import errno
>  import os
>  import sys
>
> +from mercurial import bundle2
>  from mercurial import cmdutil
>  from mercurial import discovery
>  from mercurial import error
>  from mercurial import copies
>  from mercurial import context
> @@ -820,11 +821,22 @@ def _histedit(ui, repo, state, *freeargs
>              # Recover our old commits if necessary
>              if not state.topmost in repo and state.backupfile:
>                  backupfile = repo.join(state.backupfile)
>                  f = hg.openpath(ui, backupfile)
>                  gen = exchange.readbundle(ui, f, backupfile)
> -                gen.apply(repo, 'histedit', 'bundle:' + backupfile)
> +                tr = repo.transaction('histedit.abort')
> +                try:
> +                    if not isinstance(gen, bundle2.unbundle20):
> +                        gen.apply(repo, 'histedit', 'bundle:' + backupfile)
> +                    if isinstance(gen, bundle2.unbundle20):

couldn't this be else?

> +                        bundle2.applybundle(repo, gen, tr,
> +                                            source='histedit',
> +                                            url='bundle:' + backupfile)
> +                    tr.close()
> +                finally:
> +                    tr.release()
> +
>                  os.remove(backupfile)
>
>              # check whether we should update away
>              if repo.unfiltered().revs('parents() and (%n  or %ln::)',
>                                      state.parentctxnode, leafs | tmpnodes):
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list