changeset 7054:3725f86e8514

api: wrap changeset file paths with safe_unicode Fixes error in get_changesets if path contains non ascii character.
author domruf <dominikruf@gmail.com>
date Tue, 17 Oct 2017 19:27:10 +0200
parents 64ee7afabaaa
children 6ef837acb0d2
files kallithea/lib/vcs/backends/base.py kallithea/tests/vcs/test_changesets.py
diffstat 2 files changed, 13 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/lib/vcs/backends/base.py	Wed Nov 15 00:05:24 2017 +0100
+++ b/kallithea/lib/vcs/backends/base.py	Tue Oct 17 19:27:10 2017 +0200
@@ -393,9 +393,9 @@
                 message=self.message,
                 date=self.date,
                 author=self.author,
-                added=[el.path for el in self.added],
-                changed=[el.path for el in self.changed],
-                removed=[el.path for el in self.removed],
+                added=[safe_unicode(el.path) for el in self.added],
+                changed=[safe_unicode(el.path) for el in self.changed],
+                removed=[safe_unicode(el.path) for el in self.removed],
             )
         else:
             return dict(
@@ -667,9 +667,9 @@
         data = get_dict_for_attrs(self, ['id', 'raw_id', 'short_id',
             'revision', 'date', 'message'])
         data['author'] = {'name': self.author_name, 'email': self.author_email}
-        data['added'] = [node.path for node in self.added]
-        data['changed'] = [node.path for node in self.changed]
-        data['removed'] = [node.path for node in self.removed]
+        data['added'] = [safe_unicode(node.path) for node in self.added]
+        data['changed'] = [safe_unicode(node.path) for node in self.changed]
+        data['removed'] = [safe_unicode(node.path) for node in self.removed]
         return data
 
     @LazyProperty
--- a/kallithea/tests/vcs/test_changesets.py	Wed Nov 15 00:05:24 2017 +0100
+++ b/kallithea/tests/vcs/test_changesets.py	Tue Oct 17 19:27:10 2017 +0200
@@ -30,7 +30,7 @@
         changeset.date = datetime.datetime(2011, 1, 30, 1, 45)
         changeset.message = 'Message of a commit'
         changeset.author = 'Joe Doe <joe.doe@example.com>'
-        changeset.added = [FileNode('foo/bar/baz'), FileNode('foobar')]
+        changeset.added = [FileNode('foo/bar/baz'), FileNode(u'foobar'), FileNode(u'blåbærgrød')]
         changeset.changed = []
         changeset.removed = []
         self.assertEqual(changeset.as_dict(), {
@@ -44,7 +44,7 @@
                 'name': 'Joe Doe',
                 'email': 'joe.doe@example.com',
             },
-            'added': ['foo/bar/baz', 'foobar'],
+            'added': ['foo/bar/baz', 'foobar', u'bl\xe5b\xe6rgr\xf8d'],
             'changed': [],
             'removed': [],
         })
@@ -341,6 +341,8 @@
         ])
         self.assertItemsEqual(changeset.changed, [])
         self.assertItemsEqual(changeset.removed, [])
+        assert u'foo/ba\u0142' in changeset.as_dict()['added']
+        assert u'foo/ba\u0142' in changeset.__json__(with_file_list=True)['added']
 
     def test_head_added(self):
         changeset = self.repo.get_changeset()
@@ -373,17 +375,17 @@
         'backend_alias': alias,
     }
     # tests with additional commits
-    cls_name = ''.join(('%s changesets with commits test' % alias).title().split())
+    cls_name = alias.title() + 'ChangesetsWithCommitsTest'
     bases = (_ChangesetsWithCommitsTestCaseixin, unittest.TestCase)
     globals()[cls_name] = type(cls_name, bases, attrs)
 
     # tests without additional commits
-    cls_name = ''.join(('%s changesets test' % alias).title().split())
+    cls_name = alias.title() + 'ChangesetsTest'
     bases = (_ChangesetsTestCaseMixin, unittest.TestCase)
     globals()[cls_name] = type(cls_name, bases, attrs)
 
     # tests changes
-    cls_name = ''.join(('%s changesets changes test' % alias).title().split())
+    cls_name = alias.title() + 'ChangesetsChangesTest'
     bases = (_ChangesetsChangesTestCaseMixin, unittest.TestCase)
     globals()[cls_name] = type(cls_name, bases, attrs)