https://bz.mercurial-scm.org/show_bug.cgi?id=6648

            Bug ID: 6648
           Summary: list index out of range when running `hg evolve` on
                    obsolete commit with no successors
           Product: Mercurial
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: UNCONFIRMED
          Severity: bug
          Priority: wish
         Component: evolution
          Assignee: bugzi...@mercurial-scm.org
          Reporter: h...@pewpew.net
                CC: mercurial-devel@mercurial-scm.org,
                    pierre-yves.da...@ens-lyon.org
    Python Version: ---

If I create a chain of commits (let's call this revisions 0-1-2), split 1,
prune 2, and then update to 2 and try to run `hg evolve`, it crashes with `list
index out of range` as of change 431bf23d.

Reproduction steps:

```
$ hg init
$ echo hi > foo && hg commit -qAm 'r0'
$ echo -e "hi_r3\nhi_r4" >> foo && hg commit -qm 'r1_splitme'
$ echo bar > bar && hg commit -qAm 'r2_obsoleteme'

# This is just so that we don't have to use --hidden below.
$ hg tag --local -r 2 bar
$ hg prune -r 2
$ hg split
# Split r1_splitme into two revisions, whatever way you want

$ hg update -r 2 --hidden
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
working directory parent is obsolete! (82259e31ec1f)
(use 'hg evolve' to update to its parent successor)

# When using evolve from 46858e6f (aka 431bf23d^)
$ hg evolve
parent is obsolete with multiple successors:
3 75ce52d1 "hi_r3"
4 749ae671 tip "hi_r4"

# When using evolve from 431bf23d
hg evolve --config extensions.evolve=
** unknown exception encountered, please report by visiting
** https://mercurial-scm.org/wiki/BugTracker
** Python 3.9.9 (main, Jan 12 2022, 16:10:51) [GCC 11.2.0]
** Mercurial Distributed SCM (version 6.0.2+hg355.02e9ad08999b)
** Extensions loaded: evolve 10.5.0.dev
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/hgext3rd/evolve/evolvecmd.py", line
1822, in solveobswdp
    ctx = repo[utility._singlesuccessor(repo, oldctx)]
  File "/usr/lib/python3/dist-packages/hgext3rd/evolve/utility.py", line 127,
in _singlesuccessor
    raise MultipleSuccessorsError(newer)
hgext3rd.evolve.utility.MultipleSuccessorsError:
[[b'u\xceR\xd1\xe8#\xb7M\x16\x96YWZz\xb6\xfc*\xbfQ\xb9',
b't\x9a\xe6qM>\xcf\xab\x8b\x07\xabD\xfei\xfd=\x00\x1e\x9f\xb0']]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/hg", line 61, in <module>
    dispatch.run()
  File "/usr/lib/python3/dist-packages/mercurial/dispatch.py", line 144, in run
    status = dispatch(req)
  File "/usr/lib/python3/dist-packages/mercurial/dispatch.py", line 250, in
dispatch
    status = _rundispatch(req)
  File "/usr/lib/python3/dist-packages/mercurial/dispatch.py", line 299, in
_rundispatch
    ret = _runcatch(req) or 0
  File "/usr/lib/python3/dist-packages/mercurial/dispatch.py", line 487, in
_runcatch
    return _callcatch(ui, _runcatchfunc)
  File "/usr/lib/python3/dist-packages/mercurial/dispatch.py", line 497, in
_callcatch
    return scmutil.callcatch(ui, func)
  File "/usr/lib/python3/dist-packages/mercurial/scmutil.py", line 153, in
callcatch
    return func()
  File "/usr/lib/python3/dist-packages/mercurial/dispatch.py", line 474, in
_runcatchfunc
    return _dispatch(req)
  File "/usr/lib/python3/dist-packages/mercurial/dispatch.py", line 1290, in
_dispatch
    return runcommand(
  File "/usr/lib/python3/dist-packages/mercurial/dispatch.py", line 935, in
runcommand
    ret = _runcommand(ui, options, cmd, d)
  File "/usr/lib/python3/dist-packages/mercurial/dispatch.py", line 1302, in
_runcommand
    return cmdfunc()
  File "/usr/lib/python3/dist-packages/mercurial/dispatch.py", line 1288, in
<lambda>
    d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
  File "/usr/lib/python3/dist-packages/mercurial/util.py", line 1887, in check
    return func(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/hgext3rd/evolve/evolvecmd.py", line
1638, in evolve
    return _performevolve(ui, repo, **opts)
  File "/usr/lib/python3/dist-packages/hgext3rd/evolve/evolvecmd.py", line
1726, in _performevolve
    result = solveobswdp(ui, repo, opts)
  File "/usr/lib/python3/dist-packages/hgext3rd/evolve/evolvecmd.py", line
1825, in solveobswdp
    splitsucc = utility.select_split_successor(ui, repo, oldctx)
  File "/usr/lib/python3/dist-packages/hgext3rd/evolve/utility.py", line 139,
in select_split_successor
    targets = obsutil.successorssets(repo, ctx.node())[0]
IndexError: list index out of range
```

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to