From 61c330f57dd4d0558bfbd3d4c9d39d224dc5add4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Cauwelier?= Date: Mon, 29 Apr 2013 23:24:02 +0200 Subject: [PATCH] split create_blob_fromfile into fromworkdir and fromdisk to match libgit2 Both create loose blobs but fromworkdir assert the file is inside the working directory. --- src/repository.c | 34 +++++++++++++++++++++++++++++----- test/test_blob.py | 19 +++++++++++++++++-- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/src/repository.c b/src/repository.c index 83d1b98..6342b6f 100644 --- a/src/repository.c +++ b/src/repository.c @@ -578,13 +578,13 @@ Repository_create_blob(Repository *self, PyObject *args) } -PyDoc_STRVAR(Repository_create_blob_fromfile__doc__, - "create_blob_fromfile(path) -> bytes\n" +PyDoc_STRVAR(Repository_create_blob_fromworkdir__doc__, + "create_blob_fromworkdir(path) -> bytes\n" "\n" - "Create a new blob from file."); + "Create a new blob from a file within the working directory."); PyObject * -Repository_create_blob_fromfile(Repository *self, PyObject *args) +Repository_create_blob_fromworkdir(Repository *self, PyObject *args) { git_oid oid; const char* path; @@ -601,6 +601,29 @@ Repository_create_blob_fromfile(Repository *self, PyObject *args) } +PyDoc_STRVAR(Repository_create_blob_fromdisk__doc__, + "create_blob_fromdisk(path) -> bytes\n" + "\n" + "Create a new blob from file."); + +PyObject * +Repository_create_blob_fromdisk(Repository *self, PyObject *args) +{ + git_oid oid; + const char* path; + int err; + + if (!PyArg_ParseTuple(args, "s", &path)) + return NULL; + + err = git_blob_create_fromdisk(&oid, self->repo, path); + if (err < 0) + return Error_set(err); + + return git_oid_to_python(oid.id); +} + + PyDoc_STRVAR(Repository_create_commit__doc__, "create_commit(reference, author, committer, message, tree, parents[, encoding]) -> bytes\n" "\n" @@ -1181,7 +1204,8 @@ Repository_lookup_note(Repository *self, PyObject* args) PyMethodDef Repository_methods[] = { METHOD(Repository, create_blob, METH_VARARGS), - METHOD(Repository, create_blob_fromfile, METH_VARARGS), + METHOD(Repository, create_blob_fromworkdir, METH_VARARGS), + METHOD(Repository, create_blob_fromdisk, METH_VARARGS), METHOD(Repository, create_commit, METH_VARARGS), METHOD(Repository, create_tag, METH_VARARGS), METHOD(Repository, TreeBuilder, METH_VARARGS), diff --git a/test/test_blob.py b/test/test_blob.py index 221ddcc..64f76b7 100644 --- a/test/test_blob.py +++ b/test/test_blob.py @@ -29,6 +29,7 @@ from __future__ import absolute_import from __future__ import unicode_literals +import os import unittest import pygit2 @@ -74,9 +75,9 @@ class BlobTest(utils.RepoTestCase): self.assertEqual(len(BLOB_NEW_CONTENT), blob.size) self.assertEqual(BLOB_NEW_CONTENT, blob.read_raw()) - def test_create_blob_fromfile(self): + def test_create_blob_fromworkdir(self): - blob_oid = self.repo.create_blob_fromfile("bye.txt") + blob_oid = self.repo.create_blob_fromworkdir("bye.txt") blob = self.repo[blob_oid] self.assertTrue(isinstance(blob, pygit2.Blob)) @@ -92,5 +93,19 @@ class BlobTest(utils.RepoTestCase): self.assertEqual(len(BLOB_FILE_CONTENT), blob.size) self.assertEqual(BLOB_FILE_CONTENT, blob.read_raw()) + def test_create_blob_outside_workdir(self): + + path = os.path.join(os.path.dirname(__file__), 'data', self.repo_dir + '.tar') + self.assertRaises(KeyError, self.repo.create_blob_fromworkdir, path) + + def test_create_blob_fromdisk(self): + + path = os.path.join(os.path.dirname(__file__), 'data', self.repo_dir + '.tar') + blob_oid = self.repo.create_blob_fromdisk(path) + blob = self.repo[blob_oid] + + self.assertTrue(isinstance(blob, pygit2.Blob)) + self.assertEqual(pygit2.GIT_OBJ_BLOB, blob.type) + if __name__ == '__main__': unittest.main()