# HG changeset patch # User Juntao Li # Date 1458252245 25200 # Node ID 35c666ef724e6f18ac640c63ece4c66ce6e14680 # Parent 5481954546835a1c8c581467707fbc21715e8729 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 -r 548195454683 -r 35c666ef724e hgext/evolve.py --- a/hgext/evolve.py Thu Mar 17 11:31:55 2016 -0700 +++ b/hgext/evolve.py Thu Mar 17 15:04:05 2016 -0700 @@ -2002,7 +2002,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 -r 548195454683 -r 35c666ef724e tests/test-divergent.t --- a/tests/test-divergent.t Thu Mar 17 11:31:55 2016 -0700 +++ b/tests/test-divergent.t Thu Mar 17 15:04:05 2016 -0700 @@ -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@default(draft) add bdivergent2 [divergent] + | + | o 2:c2f698071cba@default(draft) add bdivergent1 [divergent] + |/ + o 0:135f39f4bd78@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 ..