Merge remote-tracking branch 'wking/kwargs-signature'

This commit is contained in:
J. David Ibáñez
2012-09-19 20:34:43 +02:00
4 changed files with 26 additions and 28 deletions

View File

@@ -148,9 +148,8 @@ Creating commits
Commits can be created by calling the ``create_commit`` method of the Commits can be created by calling the ``create_commit`` method of the
repository with the following parameters:: repository with the following parameters::
>>> from time import time >>> author = Signature('Alice Author', 'alice@authors.tld')
>>> author = Signature('Alice Author', 'alice@authors.tld', time(), 0) >>> committer = Signature('Cecil Committer', 'cecil@committers.tld')
>>> committer = Signature('Cecil Committer', 'cecil@committers.tld', time(), 0)
>>> tree = repo.TreeBuilder().write() >>> tree = repo.TreeBuilder().write()
>>> repo.create_commit( >>> repo.create_commit(
... 'refs/heads/master', # the name of the reference to update ... 'refs/heads/master', # the name of the reference to update

View File

@@ -36,32 +36,26 @@
int int
Signature_init(Signature *self, PyObject *args, PyObject *kwds) Signature_init(Signature *self, PyObject *args, PyObject *kwds)
{ {
const char *keywords[] = {
"name", "email", "time", "offset", "encoding", NULL};
PyObject *py_name; PyObject *py_name;
char *name, *email, *encoding = NULL; char *name, *email, *encoding = "ascii";
long long time; long long time = -1;
int offset; int offset = 0;
int err; int err;
git_signature *signature; git_signature *signature;
if (kwds) { if (!PyArg_ParseTupleAndKeywords(
PyErr_SetString(PyExc_TypeError, args, kwds, "Os|Lis", keywords,
"Signature takes no keyword arguments"); &py_name, &email, &time, &offset, &encoding))
return -1;
}
if (!PyArg_ParseTuple(args, "Os|Lis",
&py_name, &email, &time, &offset, &encoding))
return -1; return -1;
name = py_str_to_c_str(py_name, encoding); name = py_str_to_c_str(py_name, encoding);
if (name == NULL) if (name == NULL)
return -1; return -1;
if (PySequence_Length(args) == 2) { if (time == -1) {
err = git_signature_now(&signature, name, email); 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 { } else {
err = git_signature_new(&signature, name, email, time, offset); err = git_signature_new(&signature, name, email, time, offset);
} }

View File

@@ -68,7 +68,9 @@ class CommitTest(utils.BareRepoTestCase):
repo = self.repo repo = self.repo
message = 'New commit.\n\nMessage with non-ascii chars: ééé.\n' message = 'New commit.\n\nMessage with non-ascii chars: ééé.\n'
committer = Signature('John Doe', 'jdoe@example.com', 12346, 0) committer = Signature('John Doe', 'jdoe@example.com', 12346, 0)
author = Signature('J. David Ibáñez', 'jdavid@example.com', 12345, 0) author = Signature(
'J. David Ibáñez', 'jdavid@example.com', 12345, 0,
encoding='utf-8')
tree = '967fce8df97cc71722d3c2a5930ef3e6f1d27b12' tree = '967fce8df97cc71722d3c2a5930ef3e6f1d27b12'
tree_prefix = tree[:5] tree_prefix = tree[:5]
too_short_prefix = tree[:3] too_short_prefix = tree[:3]

View File

@@ -37,26 +37,29 @@ from .utils import NoRepoTestCase
class SignatureTest(NoRepoTestCase): class SignatureTest(NoRepoTestCase):
def test_default(self): def test_default(self):
signature = Signature('Foo Ibáñez', 'foo@example.com', 1322174594, 60) signature = Signature(
'Foo', 'foo@example.com', 1322174594, 60)
encoding = signature._encoding encoding = signature._encoding
self.assertEqual(encoding, 'utf-8') self.assertEqual(encoding, 'ascii')
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_ascii(self):
self.assertRaises(
UnicodeEncodeError, Signature, 'Foo Ibáñez', 'foo@example.com')
def test_latin1(self): def test_latin1(self):
encoding = 'iso-8859-1' encoding = 'iso-8859-1'
signature = Signature('Foo Ibáñez', 'foo@example.com', 1322174594, 60, signature = Signature(
encoding) 'Foo Ibáñez', 'foo@example.com', encoding=encoding)
self.assertEqual(encoding, signature._encoding) self.assertEqual(encoding, signature._encoding)
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): def test_now(self):
self.assertRaises(TypeError, Signature, 'Foo Ibáñez', encoding = 'utf-8'
'foo@example.com', 1322174594) signature = Signature(
signature = Signature('Foo Ibáñez', 'foo@example.com') 'Foo Ibáñez', 'foo@example.com', encoding=encoding)
encoding = signature._encoding
self.assertEqual(encoding, 'utf-8')
self.assertEqual(encoding, signature._encoding) self.assertEqual(encoding, signature._encoding)
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)