]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
Allow file locations without line numbers. 279/head
authorFlorian Schulze <florian.schulze@gmx.net>
Wed, 4 Nov 2015 18:08:10 +0000 (19:08 +0100)
committerFlorian Schulze <florian.schulze@gmx.net>
Wed, 4 Nov 2015 18:08:10 +0000 (19:08 +0100)
babel/messages/pofile.py
tests/messages/test_pofile.py

index 3d7dc3283516b829a5be273c0f0bca1bc8d537b1..41fad0a8af6f4b8f4ac8a022015a99a1c550e30b 100644 (file)
@@ -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)))
 
index 3bb055714ff5668c04eaeac8a4175e618486b953..4e991c63c3f320ce9a7433caa9cdfc02530ccbc6 100644 (file)
@@ -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, [])