]> git.proxmox.com Git - libgit2.git/commitdiff
git_object_dup: introduce typesafe versions
authorEdward Thomson <ethomson@github.com>
Wed, 17 Feb 2016 18:04:19 +0000 (18:04 +0000)
committerEdward Thomson <ethomson@github.com>
Wed, 23 Mar 2016 21:08:37 +0000 (17:08 -0400)
include/git2/blob.h
include/git2/commit.h
include/git2/tag.h
include/git2/tree.h
src/commit.c
src/describe.c
src/iterator.c
src/object_api.c

index f451593cddeea6d4b7fdd178bd249e7bf75c124e..6377fc2a2da7d4a3846516b54f68f4d70bb78390 100644 (file)
@@ -259,6 +259,15 @@ GIT_EXTERN(int) git_blob_create_frombuffer(
  */
 GIT_EXTERN(int) git_blob_is_binary(const git_blob *blob);
 
+/**
+ * Create an in-memory copy of a blob. The copy must be explicitly
+ * free'd or it will leak.
+ *
+ * @param out Pointer to store the copy of the object
+ * @param source Original object to copy
+ */
+GIT_EXTERN(int) git_blob_dup(git_blob **out, git_blob *source);
+
 /** @} */
 GIT_END_DECL
 #endif
index f63a9068596dd97b1578c6481a84ee0df840ecac..4cc637466edd99b91b81ff93df4f55915e40c352 100644 (file)
@@ -461,6 +461,15 @@ GIT_EXTERN(int) git_commit_create_with_signature(
        const char *signature,
        const char *signature_field);
 
+/**
+ * Create an in-memory copy of a commit. The copy must be explicitly
+ * free'd or it will leak.
+ *
+ * @param out Pointer to store the copy of the commit
+ * @param source Original commit to copy
+ */
+GIT_EXTERN(int) git_commit_dup(git_commit **out, git_commit *source);
+
 /** @} */
 GIT_END_DECL
 #endif
index c822cee7cdd70a9a01f9460f76ac030a99f43ea5..cb95fb5effe242ce18e08057bc259c294a9ace92 100644 (file)
@@ -347,6 +347,15 @@ GIT_EXTERN(int) git_tag_peel(
        git_object **tag_target_out,
        const git_tag *tag);
 
+/**
+ * Create an in-memory copy of a tag. The copy must be explicitly
+ * free'd or it will leak.
+ *
+ * @param out Pointer to store the copy of the tag
+ * @param source Original tag to copy
+ */
+GIT_EXTERN(int) git_tag_dup(git_tag **out, git_tag *source);
+
 /** @} */
 GIT_END_DECL
 #endif
index 550a44857346c603350cb16869486616091343f2..8a2be21022c463181291f454c708df60a32d30aa 100644 (file)
@@ -409,6 +409,15 @@ GIT_EXTERN(int) git_tree_walk(
        git_treewalk_cb callback,
        void *payload);
 
+/**
+ * Create an in-memory copy of a tree. The copy must be explicitly
+ * free'd or it will leak.
+ *
+ * @param out Pointer to store the copy of the tree
+ * @param source Original tree to copy
+ */
+GIT_EXTERN(int) git_tree_dup(git_tree **out, git_tree *source);
+
 /** @} */
 
 GIT_END_DECL
index aaefacdab5fd7d42f5e8a376421db6ceff920537..5456751fe016973835a3c2b327c45670ff4dd7e5 100644 (file)
@@ -615,7 +615,7 @@ int git_commit_nth_gen_ancestor(
 
        assert(ancestor && commit);
 
-       if (git_object_dup((git_object **) &current, (git_object *) commit) < 0)
+       if (git_commit_dup(&current, (git_commit *)commit) < 0)
                return -1;
 
        if (n == 0) {
index 13ddad5be31aa5410945fbcc72c42dfdfe03532e..fc48fbde414554d27740fca622cdcdb5132e7051 100644 (file)
@@ -197,7 +197,7 @@ static int commit_name_dup(struct commit_name **out, struct commit_name *in)
        name->tag = NULL;
        name->path = NULL;
 
-       if (in->tag && git_object_dup((git_object **) &name->tag, (git_object *) in->tag) < 0)
+       if (in->tag && git_tag_dup(&name->tag, in->tag) < 0)
                return -1;
 
        name->path = git__strdup(in->path);
index f7b87fc1e343ba97387acb329700023122b89e01..14182a8504806abf9f8f3f0e3a4d2fe14bfccd5a 100644 (file)
@@ -820,7 +820,7 @@ int git_iterator_for_tree(
        if (tree == NULL)
                return git_iterator_for_nothing(iter, options);
 
-       if ((error = git_object_dup((git_object **)&tree, (git_object *)tree)) < 0)
+       if ((error = git_tree_dup(&tree, tree)) < 0)
                return error;
 
        ti = git__calloc(1, sizeof(tree_iterator));
@@ -1849,7 +1849,7 @@ int git_iterator_for_workdir_ext(
                return error;
        }
 
-       if (tree && (error = git_object_dup((git_object **)&wi->tree, (git_object *)tree)) < 0)
+       if (tree && (error = git_tree_dup(&wi->tree, tree)) < 0)
                return error;
 
        wi->index = index;
index 838bba3233ee15d00ea7afdad7765e4389be071b..e0d8760e7b6d6c2146eb496e9df9086a003c80b0 100644 (file)
@@ -15,7 +15,7 @@
 #include "tag.h"
 
 /**
- * Blob
+ * Commit
  */
 int git_commit_lookup(git_commit **out, git_repository *repo, const git_oid *id)
 {
@@ -42,6 +42,10 @@ git_repository *git_commit_owner(const git_commit *obj)
        return git_object_owner((const git_object *)obj);
 }
 
+int git_commit_dup(git_commit **out, git_commit *obj)
+{
+       return git_object_dup((git_object **)out, (git_object *)obj);
+}
 
 /**
  * Tree
@@ -71,6 +75,10 @@ git_repository *git_tree_owner(const git_tree *obj)
        return git_object_owner((const git_object *)obj);
 }
 
+int git_tree_dup(git_tree **out, git_tree *obj)
+{
+       return git_object_dup((git_object **)out, (git_object *)obj);
+}
 
 /**
  * Tag
@@ -100,6 +108,11 @@ git_repository *git_tag_owner(const git_tag *obj)
        return git_object_owner((const git_object *)obj);
 }
 
+int git_tag_dup(git_tag **out, git_tag *obj)
+{
+       return git_object_dup((git_object **)out, (git_object *)obj);
+}
+
 /**
  * Blob
  */
@@ -127,3 +140,8 @@ git_repository *git_blob_owner(const git_blob *obj)
 {
        return git_object_owner((const git_object *)obj);
 }
+
+int git_blob_dup(git_blob **out, git_blob *obj)
+{
+       return git_object_dup((git_object **)out, (git_object *)obj);
+}