[PATCH evolve-ext] evolve: Fix crush when reading docstring

Juntao Li juntaoli at fb.com
Thu Mar 17 22:12:57 UTC 2016


# HG changeset patch
# User Juntao Li <juntaoli at fb.com>
# Date 1458252245 25200
#      Thu Mar 17 15:04:05 2016 -0700
# Node ID 97ae376ed872d1c4050f9c4d72dbf5a3e6860f1a
# Parent  081605c2e9b6bb4d917295aae06b8428f64d0df1
evolve: Fix crush when reading docstring

Before this patch, hg evolve --divergent could crush when looking
for docstring of function of merge.update. We were checking the
docstring to work properly with older version of Mercurial. It
could crush if an extension would wrap merge.update without
keeping the docstring. This patch fixes the crush.

diff --git a/hgext/evolve.py b/hgext/evolve.py
--- a/hgext/evolve.py
+++ b/hgext/evolve.py
@@ -1997,7 +1997,7 @@
         hg.update(repo, divergent.rev())
     repo.ui.note(_('merging divergent changeset\n'))
     if progresscb: progresscb()
-    if 'partial' in merge.update.__doc__:
+    if merge.update.__doc__ is not None and 'partial' in merge.update.__doc__:
         # Mercurial  < 43c00ca887d1 (3.7)
         stats = merge.update(repo,
                              other.node(),
diff --git a/tests/test-divergent.t b/tests/test-divergent.t
--- a/tests/test-divergent.t
+++ b/tests/test-divergent.t
@@ -107,5 +107,53 @@
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   working directory is now at 6602ff5a79dc
- 
-  $ cd ..  
+
+Test None docstring issue of evolve divergent, which caused hg crush
+
+  $ hg init test2
+  $ cd test2
+  $ mkcommits _a _b
+  $ hg up "desc(_a)"
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ mkcommit bdivergent1
+  created new head
+  $ hg up "desc(_a)"
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ mkcommit bdivergent2
+  created new head
+  $ hg prune -s "desc(bdivergent1)" "desc(_b)"
+  1 changesets pruned
+  $ hg prune -s "desc(bdivergent2)" "desc(_b)" --hidden
+  1 changesets pruned
+  2 new divergent changesets
+  $ hg log -G
+  @  3:e708fd28d5cf at default(draft) add bdivergent2 [divergent]
+  |
+  | o  2:c2f698071cba at default(draft) add bdivergent1 [divergent]
+  |/
+  o  0:135f39f4bd78 at default(draft) add _a []
+  
+  $ cat >$TESTTMP/test_extension.py  << EOF
+  > from mercurial import merge
+  > origupdate = merge.update
+  > def newupdate(*args, **kwargs):
+  >   return origupdate(*args, **kwargs)
+  > merge.update = newupdate
+  > EOF
+  $ cat >> $HGRCPATH << EOF
+  > [extensions]
+  > testextension=$TESTTMP/test_extension.py
+  > EOF
+  $ hg evolve --all
+  nothing to evolve on current working copy parent
+  (do you want to use --divergent)
+  [2]
+  $ hg evolve --divergent
+  merge:[3] add bdivergent2
+  with: [2] add bdivergent1
+  base: [1] add _b
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory is now at aa26817f6fbe
+
+
+  $ cd ..


More information about the Mercurial-devel mailing list