[PATCH STABLE] i18n: use actual filename, in which function is defined, for hg.pot

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[PATCH STABLE] i18n: use actual filename, in which function is defined, for hg.pot

FUJIWARA Katsunori-2
# HG changeset patch
# User FUJIWARA Katsunori <[hidden email]>
# Date 1501599731 -32400
#      Wed Aug 02 00:02:11 2017 +0900
# Branch stable
# Node ID b6d0bcd19b4dffb2360f909f459c27104ad16565
# Parent  76b171209151fe41dbf8dbfec473cc533f3b40ca
# Available At https://bitbucket.org/foozy/mercurial-wip
#              hg pull https://bitbucket.org/foozy/mercurial-wip -r b6d0bcd19b4d
# EXP-Topic i18n-fix-update-pot-issues
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 --git a/i18n/hggettext b/i18n/hggettext
--- a/i18n/hggettext
+++ b/i18n/hggettext
@@ -112,14 +112,20 @@ def docstrings(path):
 
     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):
_______________________________________________
Mercurial-devel mailing list
[hidden email]
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [PATCH STABLE] i18n: use actual filename, in which function is defined, for hg.pot

Augie Fackler-2
On Wed, Aug 02, 2017 at 10:36:45PM +0900, FUJIWARA Katsunori wrote:

> # HG changeset patch
> # User FUJIWARA Katsunori <[hidden email]>
> # Date 1501599731 -32400
> #      Wed Aug 02 00:02:11 2017 +0900
> # Branch stable
> # Node ID b6d0bcd19b4dffb2360f909f459c27104ad16565
> # Parent  76b171209151fe41dbf8dbfec473cc533f3b40ca
> # Available At https://bitbucket.org/foozy/mercurial-wip
> #              hg pull https://bitbucket.org/foozy/mercurial-wip -r b6d0bcd19b4d
> # EXP-Topic i18n-fix-update-pot-issues
> i18n: use actual filename, in which function is defined, for hg.pot

queued, thanks
_______________________________________________
Mercurial-devel mailing list
[hidden email]
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [PATCH STABLE] i18n: use actual filename, in which function is defined, for hg.pot

Yuya Nishihara
In reply to this post by FUJIWARA Katsunori-2
On Wed, 02 Aug 2017 22:36:45 +0900, FUJIWARA Katsunori wrote:

> # HG changeset patch
> # User FUJIWARA Katsunori <[hidden email]>
> # Date 1501599731 -32400
> #      Wed Aug 02 00:02:11 2017 +0900
> # Branch stable
> # Node ID b6d0bcd19b4dffb2360f909f459c27104ad16565
> # Parent  76b171209151fe41dbf8dbfec473cc533f3b40ca
> # Available At https://bitbucket.org/foozy/mercurial-wip
> #              hg pull https://bitbucket.org/foozy/mercurial-wip -r b6d0bcd19b4d
> # EXP-Topic i18n-fix-update-pot-issues
> i18n: use actual filename, in which function is defined, for hg.pot

> +            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]

Perhaps inspect.getsourcefile() can be used.
_______________________________________________
Mercurial-devel mailing list
[hidden email]
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [PATCH STABLE] i18n: use actual filename, in which function is defined, for hg.pot

FUJIWARA Katsunori-2
At Fri, 4 Aug 2017 00:36:28 +0900,
Yuya Nishihara wrote:

>
> On Wed, 02 Aug 2017 22:36:45 +0900, FUJIWARA Katsunori wrote:
> > # HG changeset patch
> > # User FUJIWARA Katsunori <[hidden email]>
> > # Date 1501599731 -32400
> > #      Wed Aug 02 00:02:11 2017 +0900
> > # Branch stable
> > # Node ID b6d0bcd19b4dffb2360f909f459c27104ad16565
> > # Parent  76b171209151fe41dbf8dbfec473cc533f3b40ca
> > # Available At https://bitbucket.org/foozy/mercurial-wip
> > #              hg pull https://bitbucket.org/foozy/mercurial-wip -r b6d0bcd19b4d
> > # EXP-Topic i18n-fix-update-pot-issues
> > i18n: use actual filename, in which function is defined, for hg.pot
>
> > +            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]
>
> Perhaps inspect.getsourcefile() can be used.
>

Ah, I overlooked it. I'll post follow up patch on default. Thanks!

--
----------------------------------------------------------------------
[FUJIWARA Katsunori]                             [hidden email]
_______________________________________________
Mercurial-devel mailing list
[hidden email]
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [PATCH STABLE] i18n: use actual filename, in which function is defined, for hg.pot

FUJIWARA Katsunori-2
At Sat, 05 Aug 2017 03:16:57 +0900,
FUJIWARA Katsunori wrote:

>
> At Fri, 4 Aug 2017 00:36:28 +0900,
> Yuya Nishihara wrote:
> >
> > On Wed, 02 Aug 2017 22:36:45 +0900, FUJIWARA Katsunori wrote:
> > > # HG changeset patch
> > > # User FUJIWARA Katsunori <[hidden email]>
> > > # Date 1501599731 -32400
> > > #      Wed Aug 02 00:02:11 2017 +0900
> > > # Branch stable
> > > # Node ID b6d0bcd19b4dffb2360f909f459c27104ad16565
> > > # Parent  76b171209151fe41dbf8dbfec473cc533f3b40ca
> > > # Available At https://bitbucket.org/foozy/mercurial-wip
> > > #              hg pull https://bitbucket.org/foozy/mercurial-wip -r b6d0bcd19b4d
> > > # EXP-Topic i18n-fix-update-pot-issues
> > > i18n: use actual filename, in which function is defined, for hg.pot
> >
> > > +            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]
> >
> > Perhaps inspect.getsourcefile() can be used.
> >
>
> Ah, I overlooked it. I'll post follow up patch on default. Thanks!

I gave up using inspect.getsourcefile() in this case, because:

  - hggettext insert result of os.getcwd() into sys.path at first, in
    order to avoid loading modules from already installed Mercurial,

  - and this makes inspect.getsourcefile() return absolute path

Even with "." instead of os.getcwd(), we should trim additional "./"
prefix of filenames returned by inspect.getsourcefile(), in order to
keep current order of entries in hg.pot.

If we omit trimming this additional "./", order of entries in hg.pot
is drastically changed, and it might cause meaningless changes of *.po
files.

Simple replacement with inspect.getsourcefile() doesn't work as we
expected at first :-<


> --
> ----------------------------------------------------------------------
> [FUJIWARA Katsunori]                             [hidden email]
>

--
----------------------------------------------------------------------
[FUJIWARA Katsunori]                             [hidden email]
_______________________________________________
Mercurial-devel mailing list
[hidden email]
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [PATCH STABLE] i18n: use actual filename, in which function is defined, for hg.pot

Yuya Nishihara
On Sun, 13 Aug 2017 00:13:58 +0900, FUJIWARA Katsunori wrote:

> At Sat, 05 Aug 2017 03:16:57 +0900,
> FUJIWARA Katsunori wrote:
> >
> > At Fri, 4 Aug 2017 00:36:28 +0900,
> > Yuya Nishihara wrote:
> > >
> > > On Wed, 02 Aug 2017 22:36:45 +0900, FUJIWARA Katsunori wrote:
> > > > # HG changeset patch
> > > > # User FUJIWARA Katsunori <[hidden email]>
> > > > # Date 1501599731 -32400
> > > > #      Wed Aug 02 00:02:11 2017 +0900
> > > > # Branch stable
> > > > # Node ID b6d0bcd19b4dffb2360f909f459c27104ad16565
> > > > # Parent  76b171209151fe41dbf8dbfec473cc533f3b40ca
> > > > # Available At https://bitbucket.org/foozy/mercurial-wip
> > > > #              hg pull https://bitbucket.org/foozy/mercurial-wip -r b6d0bcd19b4d
> > > > # EXP-Topic i18n-fix-update-pot-issues
> > > > i18n: use actual filename, in which function is defined, for hg.pot
> > >
> > > > +            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]
> > >
> > > Perhaps inspect.getsourcefile() can be used.
> > >
> >
> > Ah, I overlooked it. I'll post follow up patch on default. Thanks!
>
> I gave up using inspect.getsourcefile() in this case, because:
>
>   - hggettext insert result of os.getcwd() into sys.path at first, in
>     order to avoid loading modules from already installed Mercurial,
>
>   - and this makes inspect.getsourcefile() return absolute path
>
> Even with "." instead of os.getcwd(), we should trim additional "./"
> prefix of filenames returned by inspect.getsourcefile(), in order to
> keep current order of entries in hg.pot.
>
> If we omit trimming this additional "./", order of entries in hg.pot
> is drastically changed, and it might cause meaningless changes of *.po
> files.
>
> Simple replacement with inspect.getsourcefile() doesn't work as we
> expected at first :-<

Fair enough. Thanks for trying that.
_______________________________________________
Mercurial-devel mailing list
[hidden email]
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Loading...