Make time and offset arguments to Signature optional
If these are left blank, use git_signature_now to insert the current time. Specifying one but not the other causes a TypeError. Test inlcluded.
This commit is contained in:
@@ -49,7 +49,7 @@ Signature_init(Signature *self, PyObject *args, PyObject *kwds)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "OsLi|s",
|
if (!PyArg_ParseTuple(args, "Os|Lis",
|
||||||
&py_name, &email, &time, &offset, &encoding))
|
&py_name, &email, &time, &offset, &encoding))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@@ -57,7 +57,14 @@ Signature_init(Signature *self, PyObject *args, PyObject *kwds)
|
|||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
return -1;
|
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);
|
free(name);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
Error_set(err);
|
Error_set(err);
|
||||||
|
@@ -28,6 +28,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import unittest
|
import unittest
|
||||||
|
import time
|
||||||
|
|
||||||
from pygit2 import Signature
|
from pygit2 import Signature
|
||||||
from .utils import NoRepoTestCase
|
from .utils import NoRepoTestCase
|
||||||
@@ -50,6 +51,17 @@ class SignatureTest(NoRepoTestCase):
|
|||||||
self.assertEqual(signature.name, signature._name.decode(encoding))
|
self.assertEqual(signature.name, signature._name.decode(encoding))
|
||||||
self.assertEqual(signature.name.encode(encoding), signature._name)
|
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__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Reference in New Issue
Block a user