summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAarni Koskela <akx@iki.fi>2019-05-27 13:50:52 +0300
committerAarni Koskela <akx@iki.fi>2019-05-27 14:17:30 +0300
commit03215bc33ba4c8ecf7f9966344aae51cc7c420e1 (patch)
tree3805affa0675523506a50f0ffbb9a5a2b95821b1
parentadea98c986f9f0d0ad134a638508fc07c3aeba3c (diff)
downloadbabel-03215bc33ba4c8ecf7f9966344aae51cc7c420e1.tar.gz
Catalog update: keep user comments from destination by default
Closes #418
-rw-r--r--babel/messages/catalog.py6
-rw-r--r--tests/messages/test_catalog.py31
2 files changed, 35 insertions, 2 deletions
diff --git a/babel/messages/catalog.py b/babel/messages/catalog.py
index 649d0e2..136ef36 100644
--- a/babel/messages/catalog.py
+++ b/babel/messages/catalog.py
@@ -700,7 +700,7 @@ class Catalog(object):
if key in self._messages:
del self._messages[key]
- def update(self, template, no_fuzzy_matching=False, update_header_comment=False):
+ def update(self, template, no_fuzzy_matching=False, update_header_comment=False, keep_user_comments=True):
"""Update the catalog based on the given template catalog.
>>> from babel.messages import Catalog
@@ -780,6 +780,10 @@ class Catalog(object):
else:
oldmsg = remaining.pop(oldkey, None)
message.string = oldmsg.string
+
+ if keep_user_comments:
+ message.user_comments = list(distinct(oldmsg.user_comments))
+
if isinstance(message.id, (list, tuple)):
if not isinstance(message.string, (list, tuple)):
fuzzy = True
diff --git a/tests/messages/test_catalog.py b/tests/messages/test_catalog.py
index 1b23832..f583810 100644
--- a/tests/messages/test_catalog.py
+++ b/tests/messages/test_catalog.py
@@ -15,8 +15,9 @@ import copy
import datetime
import unittest
+from babel._compat import StringIO
from babel.dates import format_datetime, UTC
-from babel.messages import catalog
+from babel.messages import catalog, pofile
from babel.util import FixedOffsetTimezone
@@ -475,3 +476,31 @@ def test_datetime_parsing():
assert val2.month == 6
assert val2.day == 28
assert val2.tzinfo is None
+
+
+def test_update_catalog_comments():
+ # Based on https://web.archive.org/web/20100710131029/http://babel.edgewall.org/attachment/ticket/163/cat-update-comments.py
+
+ catalog = pofile.read_po(StringIO('''
+ # A user comment
+ #. An auto comment
+ #: main.py:1
+ #, fuzzy, python-format
+ msgid "foo %(name)s"
+ msgstr "foo %(name)s"
+ '''))
+
+ assert all(message.user_comments and message.auto_comments for message in catalog if message.id)
+
+ # NOTE: in the POT file, there are no comments
+ template = pofile.read_po(StringIO('''
+ #: main.py:1
+ #, fuzzy, python-format
+ msgid "bar %(name)s"
+ msgstr ""
+ '''))
+
+ catalog.update(template)
+
+ # Auto comments will be obliterated here
+ assert all(message.user_comments for message in catalog if message.id)