diff --git a/src/pygit2/signature.c b/src/pygit2/signature.c index d2ea1ce..430f881 100644 --- a/src/pygit2/signature.c +++ b/src/pygit2/signature.c @@ -49,7 +49,7 @@ Signature_init(Signature *self, PyObject *args, PyObject *kwds) return -1; } - if (!PyArg_ParseTuple(args, "OsLi|s", + if (!PyArg_ParseTuple(args, "Os|Lis", &py_name, &email, &time, &offset, &encoding)) return -1; @@ -57,7 +57,14 @@ Signature_init(Signature *self, PyObject *args, PyObject *kwds) if (name == NULL) return -1; - err = git_signature_new(&signature, name, email, time, offset); + if (PySequence_Length(args) == 2) { + err = git_signature_now(&signature, name, email); + } else if (PySequence_Length(args) == 3) { + PyErr_SetString(PyExc_TypeError, "offset must be specified with time"); + return -1; + } else { + err = git_signature_new(&signature, name, email, time, offset); + } free(name); if (err < 0) { Error_set(err); diff --git a/test/test_signature.py b/test/test_signature.py index 1ee7e2b..2b59c29 100644 --- a/test/test_signature.py +++ b/test/test_signature.py @@ -28,6 +28,7 @@ from __future__ import absolute_import from __future__ import unicode_literals import unittest +import time from pygit2 import Signature from .utils import NoRepoTestCase @@ -50,6 +51,17 @@ class SignatureTest(NoRepoTestCase): self.assertEqual(signature.name, signature._name.decode(encoding)) self.assertEqual(signature.name.encode(encoding), signature._name) + def test_now(self): + self.assertRaises(TypeError, Signature, 'Foo Ibáñez', + 'foo@example.com', 1322174594) + signature = Signature('Foo Ibáñez', 'foo@example.com') + encoding = signature._encoding + self.assertEqual(encoding, 'utf-8') + self.assertEqual(encoding, signature._encoding) + self.assertEqual(signature.name, signature._name.decode(encoding)) + self.assertEqual(signature.name.encode(encoding), signature._name) + self.assertTrue(abs(signature.time - time.time()) < 5) + if __name__ == '__main__': unittest.main()