i18n: use actual filename, in which function is defined, for hg.pot
Before this patch, source filename for msgid in hg.pot file becomes
incorrect, if a function is defined in file A, but detected in dict in
file B,
For example, almost all debug* commands are defined in
debugcommands.py, but hggettext detects them in "table" of
commands.py. Therefore, docstring fragments of debug* commands are
marked as "defined in commands.py" in hg.pot file.
This is serious problem for translation, because the cost to find out
original location of texts increases very much.
--- a/i18n/hggettext Tue Aug 01 18:52:52 2017 +0900
+++ b/i18n/hggettext Wed Aug 02 00:02:11 2017 +0900
@@ -112,14 +112,20 @@
for func, rstrip in functions:
if func.__doc__:
+ funcmod = inspect.getmodule(func)
+ extra = ''
+ if funcmod.__package__ == funcmod.__name__:
+ extra = '/__init__'
+ actualpath = '%s%s.py' % (funcmod.__name__.replace('.', '/'), extra)
+
src = inspect.getsource(func)
- name = "%s.%s" % (path, func.__name__)
+ name = "%s.%s" % (actualpath, func.__name__)
lineno = inspect.getsourcelines(func)[1]
doc = func.__doc__
if rstrip:
doc = doc.rstrip()
lineno += offset(src, doc, name, 1)
- print(poentry(path, lineno, doc))
+ print(poentry(actualpath, lineno, doc))
def rawtext(path):