From: Florian Schulze Date: Wed, 4 Nov 2015 18:08:10 +0000 (+0100) Subject: Allow file locations without line numbers. X-Git-Tag: dev-2a51c9b95d06~1^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79bc78182f82c44ea40b5d182b69f321e8da4373;p=thirdparty%2Fbabel.git Allow file locations without line numbers. --- diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py index 3d7dc328..41fad0a8 100644 --- a/babel/messages/pofile.py +++ b/babel/messages/pofile.py @@ -218,6 +218,8 @@ def read_po(fileobj, locale=None, domain=None, ignore_obsolete=False, charset=No except ValueError: continue locations.append((location[:pos], lineno)) + else: + locations.append((location, None)) elif line[1:].startswith(','): for flag in line[2:].lstrip().split(','): flags.append(flag.strip()) @@ -449,9 +451,13 @@ def write_po(fileobj, catalog, width=76, no_location=False, omit_header=False, _write_comment(comment, prefix='.') if not no_location: - locs = u' '.join([u'%s:%d' % (filename.replace(os.sep, '/'), lineno) - for filename, lineno in message.locations]) - _write_comment(locs, prefix=':') + locs = [] + for filename, lineno in message.locations: + if lineno: + locs.append(u'%s:%d' % (filename.replace(os.sep, '/'), lineno)) + else: + locs.append(u'%s' % filename.replace(os.sep, '/')) + _write_comment(' '.join(locs), prefix=':') if message.flags: _write('#%s\n' % ', '.join([''] + sorted(message.flags))) diff --git a/tests/messages/test_pofile.py b/tests/messages/test_pofile.py index 3bb05571..4e991c63 100644 --- a/tests/messages/test_pofile.py +++ b/tests/messages/test_pofile.py @@ -513,6 +513,21 @@ msgstr[0] "Voh" msgstr[1] "Voeh"''' in value assert value.find(b'msgid ""') < value.find(b'msgid "bar"') < value.find(b'msgid "foo"') + def test_file_with_no_lineno(self): + catalog = Catalog() + catalog.add(u'bar', locations=[('utils.py', None)], + user_comments=['Comment About `bar` with', + 'multiple lines.']) + buf = BytesIO() + pofile.write_po(buf, catalog, sort_output=True) + value = buf.getvalue().strip() + assert b'''\ +# Comment About `bar` with +# multiple lines. +#: utils.py +msgid "bar" +msgstr ""''' in value + def test_silent_location_fallback(self): buf = BytesIO(b'''\ #: broken_file.py @@ -523,7 +538,7 @@ msgstr "" msgid "broken line number" msgstr ""''') catalog = pofile.read_po(buf) - self.assertEqual(catalog['missing line number'].locations, []) + self.assertEqual(catalog['missing line number'].locations, [(u'broken_file.py', None)]) self.assertEqual(catalog['broken line number'].locations, [])