Преглед изворни кода

Merge branch 'ticket-144' of git://github.com/jonashaag/dulwich

Jelmer Vernooij пре 11 година
родитељ
комит
6134bf3987
2 измењених фајлова са 18 додато и 4 уклоњено
  1. 3 1
      dulwich/repo.py
  2. 15 3
      dulwich/tests/test_repository.py

+ 3 - 1
dulwich/repo.py

@@ -439,7 +439,9 @@ class BaseRepo(object):
         :return: A `ShaFile` object, such as a Commit or Blob
         :raise KeyError: when the specified ref or object does not exist
         """
-        if len(name) in (20, 40) and isinstance(name, str):
+        if not isinstance(name, str):
+            raise TypeError("'name' must be bytestring, not %.80s" % type(name).__name__)
+        if len(name) in (20, 40):
             try:
                 return self.object_store[name]
             except (KeyError, ValueError):

+ 15 - 3
dulwich/tests/test_repository.py

@@ -110,9 +110,21 @@ class RepositoryTests(TestCase):
 
     def test_getitem_notfound_unicode(self):
         r = self._repo = open_repo('a.git')
-        # In the future, this might raise a TypeError since we don't
-        # handle unicode strings properly (what encoding?) for refs.
-        self.assertRaises(KeyError, r.__getitem__, u"11" * 19 + "--")
+
+        test_keys = [
+            ('refs/heads/master', True),
+            ('a90fa2d900a17e99b433217e988c4eb4a2e9a097', True),
+            ('11' * 19 + '--', False),
+        ]
+
+        for k, contained in test_keys:
+            self.assertEqual(k in r, contained)
+
+        for k, _ in test_keys:
+            self.assertRaisesRegexp(
+                TypeError, "'name' must be bytestring, not unicode",
+                r.__getitem__, unicode(k)
+            )
 
     def test_delitem(self):
         r = self._repo = open_repo('a.git')