[PATCH 3 of 3 STABLE] rebase: catch RepoLookupError at restoring rebase state for summary

Augie Fackler raf at durin42.com
Mon Sep 30 14:32:39 CDT 2013


On Tue, Oct 01, 2013 at 01:49:03AM +0900, FUJIWARA Katsunori wrote:
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
> # Date 1380555307 -32400
> #      Tue Oct 01 00:35:07 2013 +0900
> # Branch stable
> # Node ID 6426f77e943acab330ce65d75333cfc74026f814
> # Parent  d347f0221d8a513bdfddb25519554de50e2260dc
> rebase: catch RepoLookupError at restoring rebase state for summary

Series looks good to me, although all three log messages want a (bc)
suffix. I'd like someone else to review this, given that it seems
right on the hairy edge of Right to me.

>
> Before this patch, "hg summary" may fail, when there is inconsistent
> rebase state: for example, the root of rebase destination revisions
> recorded in rebase state file is already stripped manually.
>
> Mercurial earlier than 2.7 allows users to do anything other than
> starting new rebase, even though current rebase is not finished or
> aborted yet. So, such inconsistent rebase states may be left and
> forgotten in repositories.
>
> This patch catches RepoLookupError at restoring rebase state for
> summary hook, and treat such state as "broken".
>
> diff --git a/hgext/rebase.py b/hgext/rebase.py
> --- a/hgext/rebase.py
> +++ b/hgext/rebase.py
> @@ -813,7 +813,13 @@
>  def summaryhook(ui, repo):
>      if not os.path.exists(repo.join('rebasestate')):
>          return
> -    state = restorestatus(repo)[2]
> +    try:
> +        state = restorestatus(repo)[2]
> +    except error.RepoLookupError:
> +        # i18n: column positioning for "hg summary"
> +        msg = _('rebase: (use "hg rebase --abort" to clear broken state)\n')
> +        ui.write(msg)
> +        return
>      numrebased = len([i for i in state.itervalues() if i != -1])
>      # i18n: column positioning for "hg summary"
>      ui.write(_('rebase: %s, %s (rebase --continue)\n') %
> diff --git a/tests/test-rebase-abort.t b/tests/test-rebase-abort.t
> --- a/tests/test-rebase-abort.t
> +++ b/tests/test-rebase-abort.t
> @@ -95,6 +95,8 @@
>    abort: cannot continue inconsistent rebase
>    (use "hg rebase --abort" to clear borken state)
>    [255]
> +  $ hg summary | grep '^rebase: '
> +  rebase: (use "hg rebase --abort" to clear broken state)
>    $ hg rebase --abort
>    rebase aborted (no revision is removed, only broken state is cleared)
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list