HomePhabricator

log: map None rev to wdirrev when filtering revisions with --line-range

Authored by dlax.

Description

log: map None rev to wdirrev when filtering revisions with --line-range

When 'hg log -f --line-range <file>,<range>' is invoked with <range>
containing uncommitted changes, the command crashes on Python 3 as
follows:

  [...]
  File "/usr/lib/python3/dist-packages/mercurial/commands.py", line 4725, in log
    revs, differ = logcmdutil.getlinerangerevs(repo, revs, opts)
  File "/usr/lib/python3/dist-packages/mercurial/logcmdutil.py", line 933, in getlinerangerevs
    if rev not in userrevs:
  File "/usr/lib/python3/dist-packages/mercurial/smartset.py", line 969, in __contains__
    if l < x:
TypeError: '<' not supported between instances of 'int' and 'NoneType'

The None value is because requested line range has uncommitted changes,
so 'rev' is the working directory revision. This only occurs in Python 3
as Python 2 allows comparing None with int.

As suggested by Yuya Nishihara, mapping None to node.wdirrev resolves
the issue and also make the '--line-range' option properly work with -r
'wdir()'. We add extra tests for non-regression and to illustrate
handling of 'wdir()'.

Details

Committed
dlaxNov 29 2019, 3:43 PM
Parents
rHG66d5c8c3afed: tests: check that 'log --line-range' follows uncommitted changes
Branches
Unknown
Tags
Unknown