From 98013eb44dc575851d30ff680b16e2b442f6d69f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=2E=20David=20Ib=C3=A1=C3=B1ez?= <jdavid.ibp@gmail.com>
Date: Sun, 10 Mar 2013 12:26:32 +0100
Subject: [PATCH] Support short (raw) oids

---
 src/oid.c               | 8 ++++----
 test/test_repository.py | 8 +++-----
 2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/src/oid.c b/src/oid.c
index 102424a..36bacf4 100644
--- a/src/oid.c
+++ b/src/oid.c
@@ -42,11 +42,11 @@ py_str_to_git_oid(PyObject *py_str, git_oid *oid)
 
     /* Case 1: raw sha */
     if (PyString_Check(py_str)) {
-        hex_or_bin = PyString_AsString(py_str);
-        if (hex_or_bin == NULL)
+        err = PyString_AsStringAndSize(py_str, &hex_or_bin, &len);
+        if (err)
             return -1;
-        git_oid_fromraw(oid, (const unsigned char*)hex_or_bin);
-        return GIT_OID_HEXSZ;
+        memcpy(oid->id, (const unsigned char*)hex_or_bin, len);
+        return len;
     }
 
     /* Case 2: hex sha */
diff --git a/test/test_repository.py b/test/test_repository.py
index c3457c4..c26712a 100644
--- a/test/test_repository.py
+++ b/test/test_repository.py
@@ -91,16 +91,14 @@ class RepositoryTest(utils.BareRepoTestCase):
     def test_contains(self):
         self.assertRaises(TypeError, lambda: 123 in self.repo)
         self.assertTrue(A_BIN_SHA in self.repo)
+        self.assertTrue(A_BIN_SHA[:10] in self.repo)
         self.assertTrue(A_HEX_SHA in self.repo)
-        self.assertTrue(A_HEX_SHA[0:10] in self.repo)
+        self.assertTrue(A_HEX_SHA[:10] in self.repo)
         self.assertFalse('a' * 40 in self.repo)
         self.assertFalse('a' * 20 in self.repo)
 
     def test_iterable(self):
-        l = []
-        for obj in self.repo:
-            l.append(obj)
-
+        l = [ obj for obj in self.repo ]
         self.assertTrue(A_HEX_SHA in l)
 
     def test_lookup_blob(self):