summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2013-04-10 16:55:29 +0200
committerVicent Marti <tanoku@gmail.com>2013-04-10 16:56:32 +0200
commit575a54db856947aeb4fc5cf1977844d22dfa1aab (patch)
treeed78187ff5d5d489888ea0740ec22c1968dbd218
parent90431f1b80cc72c6cc4165665c9c46b6292daee5 (diff)
downloadlibgit2-575a54db856947aeb4fc5cf1977844d22dfa1aab.tar.gz
object: Export git_object_dup
-rw-r--r--include/git2/object.h9
-rw-r--r--src/iterator.c2
-rw-r--r--src/object.c8
-rw-r--r--src/object.h7
-rw-r--r--src/refs.c2
-rw-r--r--src/revparse.c2
-rw-r--r--src/tree.h5
7 files changed, 19 insertions, 16 deletions
diff --git a/include/git2/object.h b/include/git2/object.h
index e029f0125..b91b04dba 100644
--- a/include/git2/object.h
+++ b/include/git2/object.h
@@ -188,6 +188,15 @@ GIT_EXTERN(int) git_object_peel(
const git_object *object,
git_otype target_type);
+/**
+ * Create an in-memory copy of a Git object. The copy must be
+ * explicitly free'd or it will leak.
+ *
+ * @param dest Pointer to store the copy of the object
+ * @param source Original object to copy
+ */
+GIT_EXTERN(int) git_object_dup(git_object **dest, git_object *source);
+
/** @} */
GIT_END_DECL
diff --git a/src/iterator.c b/src/iterator.c
index 805a3c987..5b5ed9525 100644
--- a/src/iterator.c
+++ b/src/iterator.c
@@ -578,7 +578,7 @@ int git_iterator_for_tree(
if (tree == NULL)
return git_iterator_for_nothing(iter, flags, start, end);
- if ((error = git_tree__dup(&tree, tree)) < 0)
+ if ((error = git_object_dup((git_object **)&tree, (git_object *)tree)) < 0)
return error;
ITERATOR_BASE_INIT(ti, tree, TREE, git_tree_owner(tree));
diff --git a/src/object.c b/src/object.c
index f59e4c7da..80fe51152 100644
--- a/src/object.c
+++ b/src/object.c
@@ -360,7 +360,7 @@ int git_object_peel(
assert(object && peeled);
if (git_object_type(object) == target_type)
- return git_object__dup(peeled, (git_object *)object);
+ return git_object_dup(peeled, (git_object *)object);
source = (git_object *)object;
@@ -396,3 +396,9 @@ int git_object_peel(
return error;
}
+int git_object_dup(git_object **dest, git_object *source)
+{
+ git_cached_obj_incref(source);
+ *dest = source;
+ return 0;
+}
diff --git a/src/object.h b/src/object.h
index 8788caba6..c1e50593c 100644
--- a/src/object.h
+++ b/src/object.h
@@ -17,13 +17,6 @@ struct git_object {
/* fully free the object; internal method, DO NOT EXPORT */
void git_object__free(void *object);
-GIT_INLINE(int) git_object__dup(git_object **dest, git_object *source)
-{
- git_cached_obj_incref(source);
- *dest = source;
- return 0;
-}
-
int git_object__from_odb_object(
git_object **object_out,
git_repository *repo,
diff --git a/src/refs.c b/src/refs.c
index dde2f51a9..b1f679632 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -934,7 +934,7 @@ int git_reference_peel(
}
if (target_type == GIT_OBJ_ANY && git_object_type(target) != GIT_OBJ_TAG)
- error = git_object__dup(peeled, target);
+ error = git_object_dup(peeled, target);
else
error = git_object_peel(peeled, target, target_type);
diff --git a/src/revparse.c b/src/revparse.c
index 2ba29383e..b1eb51b41 100644
--- a/src/revparse.c
+++ b/src/revparse.c
@@ -432,7 +432,7 @@ static int dereference_to_non_tag(git_object **out, git_object *obj)
if (git_object_type(obj) == GIT_OBJ_TAG)
return git_tag_peel(out, (git_tag *)obj);
- return git_object__dup(out, obj);
+ return git_object_dup(out, obj);
}
static int handle_caret_parent_syntax(git_object **out, git_object *obj, int n)
diff --git a/src/tree.h b/src/tree.h
index 567b5842d..b77bfd961 100644
--- a/src/tree.h
+++ b/src/tree.h
@@ -30,11 +30,6 @@ struct git_treebuilder {
size_t entrycount; /* vector may contain "removed" entries */
};
-GIT_INLINE(int) git_tree__dup(git_tree **dest, git_tree *source)
-{
- return git_object__dup((git_object **)dest, (git_object *)source);
-}
-
GIT_INLINE(bool) git_tree_entry__is_tree(const struct git_tree_entry *e)
{
return (S_ISDIR(e->attr) && !S_ISGITLINK(e->attr));