Dongsheng Song wrote on Tue, Jul 02, 2013 at 23:00:59 +0800: > 于 2013/7/2 22:30, Daniel Shahaf 写道: > >dongsh...@apache.org wrote on Tue, Jul 02, 2013 at 14:12:44 -0000: > >>Author: dongsheng > >>Date: Tue Jul 2 14:12:44 2013 > >>New Revision: 1498947 > >> > >>URL: http://svn.apache.org/r1498947 > >>Log: > >>Make sure msgstr is not None before do iteration. > >> > >>Obvious fix. > >> > >No, it's not an obvious fix. It's a code change, and one which is not > >obvious, so it requires review. > > > >> Since parse_translation maybe return (comments, None, None, None), > >When does that happen? Why is that not a bug? Why no translator run > >into it until today? > Today, when I merge zh_CN.po from trunk to 1.8.x, I had encounter > the following error: > > $ python ../../../../trunk/tools/dev/po-merge.py < > ../../../../trunk/subversion/po/zh_CN.po zh_CN.po > Traceback (most recent call last): > File "../../../../trunk/tools/dev/po-merge.py", line 196, in <module> > main(sys.argv) > File "../../../../trunk/tools/dev/po-merge.py", line 181, in main > for m in msgstr: > TypeError: 'NoneType' object is not iterable > > Then I found in the line 39-40 of po-merge.py return None as msgstr: > > if line.strip() == '' or line[:2] == '#~': > return comments, None, None, None > > So we should not do iteration on msgstr without make sure msgstr is > not None. > > This happened because zh_CN.po have msgmerged po comments like this: > > #~ msgid "Uncommitted local addition, copy or move%s" > #~ msgstr "未提交的本地增加,复制或移动 %s" >
Thanks. That explains why msgstr was None. But I still don't understand why ignoring the for loop is the correct fix. > As your judgement, this is not "obvious fix", should I revert this commit ? It'd be simpler if someone looked at the commit and gave it his +1. Daniel > > >Thanks, > > > >Daniel > > > >>* tools/dev/po-merge.py > >> we should not do iteration without check msgstr is not None. Otherwise, > >> we may encounter the following TypeError: > >> > >> Traceback (most recent call last): > >> File "../../../../trunk/tools/dev/po-merge.py", line 196, in <module> > >> main(sys.argv) > >> File "../../../../trunk/tools/dev/po-merge.py", line 181, in main > >> for m in msgstr: > >> TypeError: 'NoneType' object is not iterable > >> > >>Modified: > >> subversion/trunk/tools/dev/po-merge.py > >> > >>Modified: subversion/trunk/tools/dev/po-merge.py > >>URL: > >>http://svn.apache.org/viewvc/subversion/trunk/tools/dev/po-merge.py?rev=1498947&r1=1498946&r2=1498947&view=diff > >>============================================================================== > >>--- subversion/trunk/tools/dev/po-merge.py (original) > >>+++ subversion/trunk/tools/dev/po-merge.py Tue Jul 2 14:12:44 2013 > >>@@ -178,9 +178,10 @@ def main(argv): > >> for i in msgstr: > >> outfile.write('msgstr[%s] %s\n' % (n, msgstr[n])) > >> n += 1 > >>- for m in msgstr: > >>- if m == '""': > >>- untranslated += 1 > >>+ if msgstr is not None: > >>+ for m in msgstr: > >>+ if m == '""': > >>+ untranslated += 1 > >> for c in comments: > >> if c.startswith('#,') and 'fuzzy' in c.split(', '): > >> fuzzy += 1 > >> > >> >