*/
GIT_BEGIN_DECL
+#define GIT_OBJECT_SIZE_MAX UINT64_MAX
+
/**
* Lookup a reference to one of the objects in a repository.
*
*
* The 'type' parameter must match the type of the object
* in the odb; the method will fail otherwise.
- * The special value 'GIT_OBJ_ANY' may be passed to let
+ * The special value 'GIT_OBJECT_ANY' may be passed to let
* the method guess the object's type.
*
* @param object pointer to the looked-up object
git_object **object,
git_repository *repo,
const git_oid *id,
- git_otype type);
+ git_object_t type);
/**
* Lookup a reference to one of the objects in a repository,
*
* The 'type' parameter must match the type of the object
* in the odb; the method will fail otherwise.
- * The special value 'GIT_OBJ_ANY' may be passed to let
+ * The special value 'GIT_OBJECT_ANY' may be passed to let
* the method guess the object's type.
*
* @param object_out pointer where to store the looked-up object
git_repository *repo,
const git_oid *id,
size_t len,
- git_otype type);
+ git_object_t type);
/**
git_object **out,
const git_object *treeish,
const char *path,
- git_otype type);
+ git_object_t type);
/**
* Get the id (SHA1) of a repository object
* @param obj the repository object
* @return the object's type
*/
-GIT_EXTERN(git_otype) git_object_type(const git_object *obj);
+GIT_EXTERN(git_object_t) git_object_type(const git_object *obj);
/**
* Get the repository that owns this object
* @param type object type to convert.
* @return the corresponding string representation.
*/
-GIT_EXTERN(const char *) git_object_type2string(git_otype type);
+GIT_EXTERN(const char *) git_object_type2string(git_object_t type);
/**
- * Convert a string object type representation to it's git_otype.
+ * Convert a string object type representation to it's git_object_t.
*
* @param str the string to convert.
- * @return the corresponding git_otype.
+ * @return the corresponding git_object_t.
*/
-GIT_EXTERN(git_otype) git_object_string2type(const char *str);
+GIT_EXTERN(git_object_t) git_object_string2type(const char *str);
/**
- * Determine if the given git_otype is a valid loose object type.
+ * Determine if the given git_object_t is a valid loose object type.
*
* @param type object type to test.
* @return true if the type represents a valid loose object type,
* false otherwise.
*/
-GIT_EXTERN(int) git_object_typeisloose(git_otype type);
+GIT_EXTERN(int) git_object_typeisloose(git_object_t type);
/**
- * Get the size in bytes for the structure which
- * acts as an in-memory representation of any given
- * object type.
+ * Recursively peel an object until an object of the specified type is met.
*
- * For all the core types, this would the equivalent
- * of calling `sizeof(git_commit)` if the core types
- * were not opaque on the external API.
+ * If the query cannot be satisfied due to the object model,
+ * GIT_EINVALIDSPEC will be returned (e.g. trying to peel a blob to a
+ * tree).
*
- * @param type object type to get its size
- * @return size in bytes of the object
- */
-GIT_EXTERN(size_t) git_object__size(git_otype type);
-
-/**
- * Recursively peel an object until an object of the specified type is met.
+ * If you pass `GIT_OBJECT_ANY` as the target type, then the object will
+ * be peeled until the type changes. A tag will be peeled until the
+ * referenced object is no longer a tag, and a commit will be peeled
+ * to a tree. Any other object type will return GIT_EINVALIDSPEC.
*
- * The retrieved `peeled` object is owned by the repository and should be
- * closed with the `git_object_free` method.
+ * If peeling a tag we discover an object which cannot be peeled to
+ * the target type due to the object model, GIT_EPEEL will be
+ * returned.
*
- * 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).
+ * You must free the returned object.
*
* @param peeled Pointer to the peeled git_object
* @param object The object to be processed
- * @param target_type The type of the requested object (GIT_OBJ_COMMIT,
- * GIT_OBJ_TAG, GIT_OBJ_TREE, GIT_OBJ_BLOB or GIT_OBJ_ANY).
- * @return 0 on success, GIT_EAMBIGUOUS, GIT_ENOTFOUND or an error code
+ * @param target_type The type of the requested object (a GIT_OBJECT_ value)
+ * @return 0 on success, GIT_EINVALIDSPEC, GIT_EPEEL, or an error code
*/
GIT_EXTERN(int) git_object_peel(
git_object **peeled,
const git_object *object,
- git_otype target_type);
+ git_object_t target_type);
/**
* Create an in-memory copy of a Git object. The copy must be
*
* @param dest Pointer to store the copy of the object
* @param source Original object to copy
+ * @return 0 or an error code
*/
GIT_EXTERN(int) git_object_dup(git_object **dest, git_object *source);
+/**
+ * Analyzes a buffer of raw object content and determines its validity.
+ * Tree, commit, and tag objects will be parsed and ensured that they
+ * are valid, parseable content. (Blobs are always valid by definition.)
+ * An error message will be set with an informative message if the object
+ * is not valid.
+ *
+ * @warning This function is experimental and its signature may change in
+ * the future.
+ *
+ * @param valid Output pointer to set with validity of the object content
+ * @param buf The contents to validate
+ * @param len The length of the buffer
+ * @param type The type of the object in the buffer
+ * @return 0 on success or an error code
+ */
+GIT_EXTERN(int) git_object_rawcontent_is_valid(
+ int *valid,
+ const char *buf,
+ size_t len,
+ git_object_t type);
+
/** @} */
GIT_END_DECL