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

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Mon Sep 30 11:49:03 CDT 2013


# 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

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)
 


More information about the Mercurial-devel mailing list