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

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

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

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

@ -68,7 +68,9 @@ class CommitTest(utils.BareRepoTestCase):
repo = self.repo
message = 'New commit.\n\nMessage with non-ascii chars: ééé.\n'
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_prefix = tree[:5]
too_short_prefix = tree[:3]

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