D4120: shortest: use nodetree for finding shortest node within revset

Yuya Nishihara yuya at tcha.org
Tue Aug 21 07:42:03 EDT 2018


>   Hmm, it passes for me. How does it fail for you?

Okay, it's a real bug. Filling Py_ssize_t as int.

```
static PyObject *nt_insert_py(nodetree *self, PyObject *args)
{
	Py_ssize_t rev;
	const char *node;
	if (!PyArg_ParseTuple(args, "i", &rev))
```

```
  Traceback (most recent call last):
    File "hg", line 41, in <module>
      dispatch.run()
    File "mercurial/dispatch.py", line 90, in run
      status = dispatch(req)
    File "mercurial/dispatch.py", line 213, in dispatch
      ret = _runcatch(req) or 0
    File "mercurial/dispatch.py", line 354, in _runcatch
      return _callcatch(ui, _runcatchfunc)
    File "mercurial/dispatch.py", line 362, in _callcatch
      return scmutil.callcatch(ui, func)
    File "mercurial/scmutil.py", line 164, in callcatch
      return func()
    File "mercurial/dispatch.py", line 344, in _runcatchfunc
      return _dispatch(req)
    File "mercurial/dispatch.py", line 982, in _dispatch
      cmdpats, cmdoptions)
    File "mercurial/dispatch.py", line 728, in runcommand
      ret = _runcommand(ui, options, cmd, d)
    File "mercurial/dispatch.py", line 990, in _runcommand
      return cmdfunc()
    File "mercurial/dispatch.py", line 979, in <lambda>
      d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
    File "mercurial/util.py", line 1531, in check
      return func(*args, **kwargs)
    File "mercurial/dispatch.py", line 592, in __call__
      return util.checksignature(self.fn)(ui, *args, **opts)
    File "mercurial/util.py", line 1531, in check
      return func(*args, **kwargs)
    File "mercurial/commands.py", line 3643, in log
      displayfn(ui, repo, revs, displayer, getrenamed)
    File "mercurial/logcmdutil.py", line 897, in displayrevs
      displayer.show(ctx, copies=copies)
    File "mercurial/logcmdutil.py", line 186, in show
      self._show(ctx, copies, props)
    File "mercurial/logcmdutil.py", line 460, in _show
      self.ui.write(self.t.render(key, props))
    File "mercurial/templater.py", line 926, in render
      return b''.join(self.generate(t, mapping))
    File "mercurial/util.py", line 1442, in increasingchunks
      for chunk in source:
    File "mercurial/templateutil.py", line 659, in flatten
      for i in thing:
    File "mercurial/templateutil.py", line 853, in runtemplate
      yield evalrawexp(context, mapping, arg)
    File "mercurial/templateutil.py", line 707, in evalrawexp
      return func(context, mapping, data)
    File "mercurial/templatefuncs.py", line 634, in shortest
      return scmutil.shortesthexnodeidprefix(repo, node, minlength, cache)
    File "mercurial/scmutil.py", line 531, in shortesthexnodeidprefix
      nodetree.insert(r)
  ValueError: revlog index out of range
```


More information about the Mercurial-devel mailing list