# HG changeset patch # User FUJIWARA Katsunori # Date 1501599731 -32400 # Node ID 16a175b3681e6b91e8cac46a89e41002f52a79d4 # Parent cc047a733f69ab160613d894ae61bf2cf37f7656 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. diff -r cc047a733f69 -r 16a175b3681e i18n/hggettext --- 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):