]> git.proxmox.com Git - libgit2.git/blobdiff - include/git2/object.h
New upstream version 1.4.3+dfsg.1
[libgit2.git] / include / git2 / object.h
index 9b13d824efb823a45e371fd5d89091025804c121..5610a476f492286068d6896bcc38933490228b44 100644 (file)
@@ -21,6 +21,8 @@
  */
 GIT_BEGIN_DECL
 
+#define GIT_OBJECT_SIZE_MAX UINT64_MAX
+
 /**
  * Lookup a reference to one of the objects in a repository.
  *
@@ -30,7 +32,7 @@ GIT_BEGIN_DECL
  *
  * 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
@@ -43,7 +45,7 @@ GIT_EXTERN(int) git_object_lookup(
                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,
@@ -62,7 +64,7 @@ GIT_EXTERN(int) git_object_lookup(
  *
  * 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
@@ -77,7 +79,7 @@ GIT_EXTERN(int) git_object_lookup_prefix(
                git_repository *repo,
                const git_oid *id,
                size_t len,
-               git_otype type);
+               git_object_t type);
 
 
 /**
@@ -94,7 +96,7 @@ GIT_EXTERN(int) git_object_lookup_bypath(
                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
@@ -124,7 +126,7 @@ GIT_EXTERN(int) git_object_short_id(git_buf *out, const git_object *obj);
  * @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
@@ -166,59 +168,52 @@ GIT_EXTERN(void) git_object_free(git_object *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
@@ -226,9 +221,32 @@ GIT_EXTERN(int) git_object_peel(
  *
  * @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