Mercurial > hg
view hg @ 46807:2c0e35f6957a
typing: mark the argument to mercurial.i18n.gettext() non-Optional
Few if any of the callers are handling a `None` return, which is making pytype
complain. I tried adding @overload definitions to indicate the bytes -> bytes
and None -> None relationship, but pytype doesn't seem to apply that to `_()`
through the function assignment. What did work was to change `_()` into its own
function that called `gettext()`, but that has an extra function call overhead.
Even putting that function into an `if pycompat.TYPE_CHECKING` block and leaving
the existing assignments in the `else` block caused pytype to lose track of the
@overloads.
At that point, I simply gave up. PyCharm doesn't like that it can return None,
given the new type hints, but pytype doesn't complain about this nor does it
see any callers passing None. The most important thing here is to catch str
being passed anyway.
Differential Revision: https://phab.mercurial-scm.org/D10235
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 18 Mar 2021 23:41:00 -0400 |
parents | 7740d5102760 |
children | d4ba4d51f85f |
line wrap: on
line source
#!/usr/bin/env python3 # # mercurial - scalable distributed SCM # # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. from __future__ import absolute_import import os import sys libdir = '@LIBDIR@' if libdir != '@' 'LIBDIR' '@': if not os.path.isabs(libdir): libdir = os.path.join( os.path.dirname(os.path.realpath(__file__)), libdir ) libdir = os.path.abspath(libdir) sys.path.insert(0, libdir) # Make `pip install --user ...` packages available to the official Windows # build. Most py2 packaging installs directly into the system python # environment, so no changes are necessary for other platforms. The Windows # py2 package uses py2exe, which lacks a `site` module. Hardcode it according # to the documentation. if getattr(sys, 'frozen', None) == 'console_exe': vi = sys.version_info sys.path.append( os.path.join( os.environ['APPDATA'], 'Python', 'Python%d%d' % (vi[0], vi[1]), 'site-packages', ) ) from hgdemandimport import tracing with tracing.log('hg script'): # enable importing on demand to reduce startup time try: if sys.version_info[0] < 3 or sys.version_info >= (3, 6): import hgdemandimport hgdemandimport.enable() except ImportError: sys.stderr.write( "abort: couldn't find mercurial libraries in [%s]\n" % ' '.join(sys.path) ) sys.stderr.write("(check your install and PYTHONPATH)\n") sys.exit(-1) from mercurial import dispatch dispatch.run()