changeset 315:654b632e5482

Merging catalogs would sometimes mix translations from different runs.
author cmlenz
date Fri, 01 Feb 2008 14:46:32 +0000
parents 5c0bda4f20b1
children b997f09256c9
files ChangeLog babel/messages/catalog.py babel/messages/tests/catalog.py
diffstat 3 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,8 @@
 
  * Fixed catalogs' charset values not being recognized (ticket #66).
  * Fixed fuzzy matching when updating message catalogs (ticket #82).
+ * Fixed bug in catalog updating, that in some cases pulled in
+   translations from different catalogs based on the same template.
 
 
 Version 0.9.1
--- a/babel/messages/catalog.py
+++ b/babel/messages/catalog.py
@@ -92,6 +92,11 @@
                 return cmp(self.id, obj.id[0])
         return cmp(self.id, obj.id)
 
+    def clone(self):
+        return Message(self.id, self.string, self.locations, self.flags,
+                       self.auto_comments, self.user_comments,
+                       self.previous_id, self.lineno)
+
     def fuzzy(self):
         return 'fuzzy' in self.flags
     fuzzy = property(fuzzy, doc="""\
@@ -624,6 +629,7 @@
         fuzzy_matches = set()
 
         def _merge(message, oldkey, newkey):
+            message = message.clone()
             fuzzy = False
             if oldkey != newkey:
                 fuzzy = True
--- a/babel/messages/tests/catalog.py
+++ b/babel/messages/tests/catalog.py
@@ -174,6 +174,17 @@
         cat.update(tmpl, no_fuzzy_matching=True)
         self.assertEqual(2, len(cat.obsolete))
 
+    def test_update_no_template_mutation(self):
+        tmpl = catalog.Catalog()
+        tmpl.add('foo')
+        cat1 = catalog.Catalog()
+        cat1.add('foo', 'Voh')
+        cat1.update(tmpl)
+        cat2 = catalog.Catalog()
+        cat2.update(tmpl)
+
+        self.assertEqual(None, cat2['foo'].string)
+        self.assertEqual(False, cat2['foo'].fuzzy)
 
 def suite():
     suite = unittest.TestSuite()
Copyright (C) 2012-2017 Edgewall Software