##// END OF EJS Templates
log: map None rev to wdirrev when filtering revisions with --line-range...
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()'.

File last commit:

r43347:687b865b default
r44173:d1b9d2c6 stable
Show More
util.py
38 lines | 1.0 KiB | text/x-python | PythonLexer
Pulkit Goyal
interfaceutil: move to interfaces/...
r43079 # util.py - Utilities for declaring interfaces.
#
# Copyright 2018 Gregory Szorc <gregory.szorc@gmail.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
# zope.interface imposes a run-time cost due to module import overhead and
# bookkeeping for declaring interfaces. So, we use stubs for various
# zope.interface primitives unless instructed otherwise.
from __future__ import absolute_import
Augie Fackler
formatting: blacken the codebase...
r43346 from .. import encoding
Pulkit Goyal
interfaceutil: move to interfaces/...
r43079
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if encoding.environ.get(b'HGREALINTERFACES'):
Augie Fackler
formatting: blacken the codebase...
r43346 from ..thirdparty.zope import interface as zi
Pulkit Goyal
interfaceutil: move to interfaces/...
r43079
Attribute = zi.Attribute
Interface = zi.Interface
implementer = zi.implementer
else:
Augie Fackler
formatting: blacken the codebase...
r43346
Pulkit Goyal
interfaceutil: move to interfaces/...
r43079 class Attribute(object):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 def __init__(self, __name__, __doc__=b''):
Pulkit Goyal
interfaceutil: move to interfaces/...
r43079 pass
class Interface(object):
Augie Fackler
formatting: blacken the codebase...
r43346 def __init__(
self, name, bases=(), attrs=None, __doc__=None, __module__=None
):
Pulkit Goyal
interfaceutil: move to interfaces/...
r43079 pass
def implementer(*ifaces):
def wrapper(cls):
return cls
return wrapper