changeset 2894:2654edfb1700 beta

fixes #591 git backend was causing encoding errors when handling binary files - added a test case for VCS lib tests
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 03 Oct 2012 20:20:16 +0200
parents eb180eb16c18
children f5dc0417d6b1
files rhodecode/lib/vcs/backends/git/inmemory.py rhodecode/tests/vcs/test_inmemchangesets.py
diffstat 2 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/vcs/backends/git/inmemory.py	Wed Oct 03 19:02:40 2012 +0200
+++ b/rhodecode/lib/vcs/backends/git/inmemory.py	Wed Oct 03 20:20:16 2012 +0200
@@ -63,10 +63,16 @@
                     # If found, updates parent
                     parent = self.repository._repo[dir_id]
                     ancestors.append((curdir, parent))
-            # Now parent is deepest exising tree and we need to create subtrees
+            # Now parent is deepest existing tree and we need to create subtrees
             # for dirnames (in reverse order) [this only applies for nodes from added]
             new_trees = []
-            blob = objects.Blob.from_string(node.content.encode(ENCODING))
+
+            if not node.is_binary:
+                content = node.content.encode(ENCODING)
+            else:
+                content = node.content
+            blob = objects.Blob.from_string(content)
+
             node_path = node.name.encode(ENCODING)
             if dirnames:
                 # If there are trees which should be created we need to build
--- a/rhodecode/tests/vcs/test_inmemchangesets.py	Wed Oct 03 19:02:40 2012 +0200
+++ b/rhodecode/tests/vcs/test_inmemchangesets.py	Wed Oct 03 20:20:16 2012 +0200
@@ -44,6 +44,7 @@
             FileNode('foobar2', content='Foo & bar, doubled!'),
             FileNode('foo bar with spaces', content=''),
             FileNode('foo/bar/baz', content='Inside'),
+            FileNode('foo/bar/file.bin', content='\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;\x00\x03\x00\xfe\xff\t\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x18\x00\x00\x00\x01\x00\x00\x00\xfe\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'),
         ]
 
     def test_add(self):