From a511f299bb63123ea046138f7e3049e9b4e34a39 Mon Sep 17 00:00:00 2001
From: Nico von Geyso <Nico.Geyso@FU-Berlin.de>
Date: Wed, 28 Nov 2012 18:10:07 +0100
Subject: [PATCH] fixex api changes of libgit2 in 64c5112

---
 include/pygit2/types.h  |  2 +-
 src/pygit2/commit.c     |  2 +-
 src/pygit2/config.c     |  2 +-
 src/pygit2/diff.c       | 24 ++++++++++++------------
 src/pygit2/index.c      |  8 ++++----
 src/pygit2/reference.c  | 26 +++++++++++++++-----------
 src/pygit2/repository.c |  8 ++++----
 src/pygit2/tag.c        |  2 +-
 test/test_refs.py       |  1 +
 9 files changed, 40 insertions(+), 35 deletions(-)

diff --git a/include/pygit2/types.h b/include/pygit2/types.h
index 9b4d917..e4e4f5d 100644
--- a/include/pygit2/types.h
+++ b/include/pygit2/types.h
@@ -97,7 +97,7 @@ typedef struct {
 
 typedef struct {
     PyObject_HEAD
-    git_index_entry *entry;
+    const git_index_entry *entry;
 } IndexEntry;
 
 typedef struct {
diff --git a/src/pygit2/commit.c b/src/pygit2/commit.c
index 6abc92a..c0ccee1 100644
--- a/src/pygit2/commit.c
+++ b/src/pygit2/commit.c
@@ -135,7 +135,7 @@ Commit_get_parents(Commit *commit)
         return NULL;
 
     for (i=0; i < parent_count; i++) {
-        parent_oid = git_commit_parent_oid(commit->commit, i);
+        parent_oid = git_commit_parent_id(commit->commit, i);
         if (parent_oid == NULL) {
             Py_DECREF(list);
             Error_set(GIT_ENOTFOUND);
diff --git a/src/pygit2/config.c b/src/pygit2/config.c
index 24e98ac..6a84f63 100644
--- a/src/pygit2/config.c
+++ b/src/pygit2/config.c
@@ -204,7 +204,7 @@ Config_setitem(Config *self, PyObject *py_key, PyObject *py_value)
         return -1;
 
     if (!py_value) {
-        err = git_config_delete(self->config, c_key);
+        err = git_config_delete_entry(self->config, c_key);
     } else if (PyBool_Check(py_value)) {
         err = git_config_set_bool(self->config, c_key,
                 (int)PyObject_IsTrue(py_value));
diff --git a/src/pygit2/diff.c b/src/pygit2/diff.c
index 526a312..8cd0d51 100644
--- a/src/pygit2/diff.c
+++ b/src/pygit2/diff.c
@@ -41,12 +41,12 @@ extern PyTypeObject DiffType;
 extern PyTypeObject HunkType;
 
 static int diff_data_cb(
-  void *cb_data,
   const git_diff_delta *delta,
   const git_diff_range *range,
   char line_origin,
   const char *content,
-  size_t content_len)
+  size_t content_len,
+  void *cb_data)
 {
     PyObject *hunks, *data;
     Hunk *hunk;
@@ -72,11 +72,11 @@ static int diff_data_cb(
 }
 
 static int diff_hunk_cb(
-  void *cb_data,
   const git_diff_delta *delta,
   const git_diff_range *range,
   const char *header,
-  size_t header_len)
+  size_t header_len,
+  void *cb_data)
 {
     PyObject *hunks;
     Hunk *hunk;
@@ -163,8 +163,8 @@ static int diff_hunk_cb(
     return 0;
 };
 
-static int diff_file_cb(void *cb_data, const git_diff_delta *delta,
-  float progress)
+static int diff_file_cb(const git_diff_delta *delta, float progress, 
+void *cb_data) 
 {
     PyObject *files, *file;
 
@@ -202,10 +202,10 @@ Diff_changes(Diff *self)
 
         git_diff_foreach(
             self->diff,
-            self->diff_changes,
             &diff_file_cb,
             &diff_hunk_cb,
-            &diff_data_cb
+            &diff_data_cb,
+            self->diff_changes
         );
     }
 
@@ -213,12 +213,12 @@ Diff_changes(Diff *self)
 }
 
 static int diff_print_cb(
-    void *cb_data,
     const git_diff_delta *delta,
     const git_diff_range *range,
     char usage,
     const char *line,
-    size_t line_len)
+    size_t line_len,
+    void *cb_data)
 {
     PyObject *data = PyBytes_FromStringAndSize(line, line_len);
     PyBytes_ConcatAndDel((PyObject **)cb_data, data);
@@ -231,7 +231,7 @@ Diff_patch(Diff *self)
 {
     PyObject *patch = PyBytes_FromString("");
 
-    git_diff_print_patch(self->diff, &patch, &diff_print_cb);
+    git_diff_print_patch(self->diff, &diff_print_cb, (void*) &patch);
 
     return patch;
 }
@@ -360,7 +360,7 @@ PyObject *
 Diff_find_similar(Diff *self, PyObject *args)
 {
     int err;
-    git_diff_options opts = {0};
+    git_diff_find_options opts = {0};
 
     if (!PyArg_ParseTuple(args, "|i", &opts.flags))
         return NULL;
diff --git a/src/pygit2/index.c b/src/pygit2/index.c
index 327e314..2d1d8b5 100644
--- a/src/pygit2/index.c
+++ b/src/pygit2/index.c
@@ -264,7 +264,7 @@ Index_len(Index *self)
 }
 
 PyObject *
-wrap_index_entry(git_index_entry *entry, Index *index)
+wrap_index_entry(const git_index_entry *entry, Index *index)
 {
     IndexEntry *py_entry;
 
@@ -278,8 +278,8 @@ wrap_index_entry(git_index_entry *entry, Index *index)
 PyObject *
 Index_getitem(Index *self, PyObject *value)
 {
-    int idx;
-    git_index_entry *index_entry;
+    size_t idx;
+    const git_index_entry *index_entry;
 
     idx = Index_get_position(self, value);
     if (idx == -1)
@@ -460,7 +460,7 @@ IndexIter_dealloc(IndexIter *self)
 PyObject *
 IndexIter_iternext(IndexIter *self)
 {
-    git_index_entry *index_entry;
+    const git_index_entry *index_entry;
 
     index_entry = git_index_get_byindex(self->owner->index, self->i);
     if (!index_entry)
diff --git a/src/pygit2/reference.c b/src/pygit2/reference.c
index 75c937e..be572b4 100644
--- a/src/pygit2/reference.c
+++ b/src/pygit2/reference.c
@@ -63,13 +63,13 @@ PyObject* RefLogIter_iternext(PyObject *self)
                         &RefLogEntryType, NULL, NULL
                     );
 
-        git_oid_fmt(oid_old, git_reflog_entry_oidold(entry));
-        git_oid_fmt(oid_new, git_reflog_entry_oidnew(entry));
+        git_oid_fmt(oid_old, git_reflog_entry_id_old(entry));
+        git_oid_fmt(oid_new, git_reflog_entry_id_new(entry));
 
         py_entry->oid_new = PyUnicode_FromStringAndSize(oid_new, 40);
         py_entry->oid_old = PyUnicode_FromStringAndSize(oid_old, 40);
 
-        py_entry->msg = strdup(git_reflog_entry_msg(entry));
+        py_entry->msg = strdup(git_reflog_entry_message(entry));
 
         signature = git_signature_dup(
               git_reflog_entry_committer(entry)
@@ -220,10 +220,14 @@ Reference_get_target(Reference *self)
     CHECK_REFERENCE(self);
 
     /* Get the target */
-    c_name = git_reference_target(self->reference);
-    if (c_name == NULL) {
-        PyErr_SetString(PyExc_ValueError, "no target available");
-        return NULL;
+    if (GIT_REF_OID == git_reference_type(self->reference)) {
+        return git_oid_to_py_str(git_reference_target(self->reference));
+    } else {
+        c_name = git_reference_symbolic_target(self->reference);
+        if (c_name == NULL) {
+            PyErr_SetString(PyExc_ValueError, "no target available");
+            return NULL;
+        }
     }
 
     /* Make a PyString and return it */
@@ -244,7 +248,7 @@ Reference_set_target(Reference *self, PyObject *py_name)
         return -1;
 
     /* Set the new target */
-    err = git_reference_set_target(self->reference, c_name);
+    err = git_reference_symbolic_set_target(self->reference, c_name);
     free(c_name);
     if (err < 0) {
         Error_set(err);
@@ -269,7 +273,7 @@ Reference_get_oid(Reference *self)
     CHECK_REFERENCE(self);
 
     /* Get the oid (only for "direct" references) */
-    oid = git_reference_oid(self->reference);
+    oid = git_reference_target(self->reference);
     if (oid == NULL) {
         PyErr_SetString(PyExc_ValueError,
                         "oid is only available if the reference is direct "
@@ -297,7 +301,7 @@ Reference_set_oid(Reference *self, PyObject *py_hex)
     }
 
     /* Set the oid */
-    err = git_reference_set_oid(self->reference, &oid);
+    err = git_reference_set_target(self->reference, &oid);
     if (err < 0) {
         Error_set(err);
         return -1;
@@ -314,7 +318,7 @@ Reference_get_hex(Reference *self)
     CHECK_REFERENCE(self);
 
     /* Get the oid (only for "direct" references) */
-    oid = git_reference_oid(self->reference);
+    oid = git_reference_target(self->reference);
     if (oid == NULL) {
         PyErr_SetString(PyExc_ValueError,
                         "oid is only available if the reference is direct "
diff --git a/src/pygit2/repository.c b/src/pygit2/repository.c
index 4b3ae17..b72ccf3 100644
--- a/src/pygit2/repository.c
+++ b/src/pygit2/repository.c
@@ -179,7 +179,7 @@ Repository_head(Repository *self)
       return NULL;
     }
 
-    oid = git_reference_oid(head);
+    oid = git_reference_target(head);
     pyobj = lookup_object(self, oid, GIT_OBJ_COMMIT);
     git_reference_free(head);
     return pyobj;
@@ -527,7 +527,7 @@ Repository_create_blob_fromfile(Repository *self, PyObject *args)
     if (!PyArg_ParseTuple(args, "s", &path))
       return NULL;
 
-    err = git_blob_create_fromfile(&oid, self->repo, path);
+    err = git_blob_create_fromworkdir(&oid, self->repo, path);
 
     if (err < 0)
       return Error_set(err);
@@ -740,7 +740,7 @@ Repository_create_reference(Repository *self,  PyObject *args, PyObject* keywds)
             return Error_set(err);
         }
 
-        err = git_reference_create_oid(&c_reference, self->repo, c_name, &oid, force);
+        err = git_reference_create(&c_reference, self->repo, c_name, &oid, force);
     } else {
         #if PY_MAJOR_VERSION == 2
         c_target = PyString_AsString(py_obj);
@@ -750,7 +750,7 @@ Repository_create_reference(Repository *self,  PyObject *args, PyObject* keywds)
         if(c_target == NULL)
             return NULL;
 
-        err = git_reference_create_symbolic(&c_reference, self->repo, c_name,
+        err = git_reference_symbolic_create(&c_reference, self->repo, c_name,
                                             c_target, force);
     }
 
diff --git a/src/pygit2/tag.c b/src/pygit2/tag.c
index c34dbc0..d4745d2 100644
--- a/src/pygit2/tag.c
+++ b/src/pygit2/tag.c
@@ -39,7 +39,7 @@ Tag_get_target(Tag *self)
 {
     const git_oid *oid;
 
-    oid = git_tag_target_oid(self->tag);
+    oid = git_tag_target_id(self->tag);
     return git_oid_to_python(oid->id);
 }
 
diff --git a/test/test_refs.py b/test/test_refs.py
index b61d855..082e53d 100644
--- a/test/test_refs.py
+++ b/test/test_refs.py
@@ -174,6 +174,7 @@ class ReferencesTest(utils.RepoTestCase):
         self.assertTrue('refs/tags/version1' in refs)
         reference = self.repo.lookup_reference('refs/tags/version1')
         self.assertEqual(reference.hex, LAST_COMMIT)
+        self.assertEqual(reference.target, LAST_COMMIT)
 
         # try to create existing reference
         self.assertRaises(ValueError, self.repo.create_reference,