From d8057a5b0ed644b1f72a4eb80f82da7ce8977958 Mon Sep 17 00:00:00 2001 From: Russell Belfer Date: Mon, 27 Aug 2012 11:53:59 -0700 Subject: Make git_object_peel a bit smarter This expands the types of peeling that `git_object_peel` knows how to do to include TAG -> BLOB peeling, and makes the errors slightly more consistent depending on the situation. It also adds a new special behavior where peeling to ANY will peel until the object type changes (e.g. chases TAGs to a non-TAG). Using this expanded peeling, this replaces peeling code that was embedded in `git_tag_peel` and `git_reset`. --- include/git2/object.h | 11 +++++++---- include/git2/reset.h | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) (limited to 'include/git2') diff --git a/include/git2/object.h b/include/git2/object.h index 722434dec..fd6ae95c1 100644 --- a/include/git2/object.h +++ b/include/git2/object.h @@ -168,11 +168,14 @@ GIT_EXTERN(int) git_object_typeisloose(git_otype type); GIT_EXTERN(size_t) git_object__size(git_otype type); /** - * Recursively peel an object until an object of the specified - * type is met + * Recursively peel an object until an object of the specified type is met. * - * The retrieved `peeled` object is owned by the repository - * and should be closed with the `git_object_free` method. + * The retrieved `peeled` object is owned by the repository and should be + * closed with the `git_object_free` method. + * + * If you pass `GIT_OBJ_ANY` as the target type, then the object will be + * peeled until the type changes (e.g. a tag will be chased until the + * referenced object is no longer a tag). * * @param peeled Pointer to the peeled git_object * @param object The object to be processed diff --git a/include/git2/reset.h b/include/git2/reset.h index 125178748..cd263fa99 100644 --- a/include/git2/reset.h +++ b/include/git2/reset.h @@ -37,7 +37,7 @@ GIT_BEGIN_DECL * * @return GIT_SUCCESS or an error code */ -GIT_EXTERN(int) git_reset(git_repository *repo, const git_object *target, git_reset_type reset_type); +GIT_EXTERN(int) git_reset(git_repository *repo, git_object *target, git_reset_type reset_type); /** @} */ GIT_END_DECL -- cgit v1.2.1