summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2008-10-31 09:57:29 -0700
committerShawn O. Pearce <spearce@spearce.org>2008-10-31 09:57:29 -0700
commitc15648cbd059b92c177586ab1701a167222c7681 (patch)
tree9c3d59f42c90513a69cb72d3680656ecd6fcc309
downloadlibgit2-c15648cbd059b92c177586ab1701a167222c7681.tar.gz
Initial draft of libgit2
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r--.gitignore3
-rw-r--r--LICENSE34
-rw-r--r--Makefile38
-rw-r--r--api.doxygen20
-rw-r--r--src/git_common.h83
-rw-r--r--src/git_odb.c43
-rw-r--r--src/git_odb.h133
-rw-r--r--src/git_oid.c73
-rw-r--r--src/git_oid.h76
9 files changed, 503 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..2733c6ad2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/apidocs
+*.o
+*.a
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..2917c22c8
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,34 @@
+/*
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..c545d2d17
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,38 @@
+all::
+
+DOXYGEN = doxygen
+
+CFLAGS = -g -O2
+BASIC_CFLAGS = -Isrc
+
+OBJS = \
+ src/git_odb.o \
+ src/git_oid.o \
+#end OBJS
+
+HDRS = \
+ src/git_oid.h \
+ src/git_common.h \
+#end HDRS
+
+
+all:: libgit2.a
+
+clean:
+ rm -f libgit2.a src/*.o
+ rm -rf apidocs
+
+apidocs:
+ $(DOXYGEN) api.doxygen
+
+.c.o:
+ $(CC) $(BASIC_CFLAGS) $(CFLAGS) -c $< -o $@
+
+src/%.o: src/%.c $(HDRS)
+libgit2.a: $(OBJS)
+ rm -f libgit2.a
+ $(AR) cr libgit2.a $(OBJS)
+
+.PHONY: all
+.PHONY: clean
+.PHONY: apidocs
diff --git a/api.doxygen b/api.doxygen
new file mode 100644
index 000000000..b370dc552
--- /dev/null
+++ b/api.doxygen
@@ -0,0 +1,20 @@
+PROJECT_NAME = libgit2
+
+INPUT = src
+QUIET = YES
+RECURSIVE = YES
+FILE_PATTERNS = *.h
+OUTPUT_DIRECTORY = apidocs
+GENERATE_TAGFILE = apidocs/libgit2.tag
+
+JAVADOC_AUTOBRIEF = YES
+MACRO_EXPANSION = YES
+EXPAND_ONLY_PREDEF = YES
+OPTIMIZE_OUTPUT_FOR_C = YES
+STRIP_CODE_COMMENTS = NO
+FULL_PATH_NAMES = NO
+CASE_SENSE_NAMES = NO
+
+PREDEFINED = \
+ "GIT_EXTERN(x)=x" \
+ DOXYGEN=
diff --git a/src/git_common.h b/src/git_common.h
new file mode 100644
index 000000000..f9fce2b42
--- /dev/null
+++ b/src/git_common.h
@@ -0,0 +1,83 @@
+/*
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef INCLUDE_git_common_h__
+#define INCLUDE_git_common_h__
+
+#ifdef __cplusplus
+# define GIT_BEGIN_DECL extern "C" {
+# define GIT_END_DECL }
+#else
+ /** Start declarations in C mode */
+# define GIT_BEGIN_DECL /* empty */
+ /** End declarations in C mode */
+# define GIT_END_DECL /* empty */
+#endif
+
+/**
+ * @file git_common.h
+ * @brief Git common platform definitions
+ * @defgroup git_common Git common platform definitions
+ * @ingroup Git
+ * @{
+ */
+GIT_BEGIN_DECL
+
+/** Declare a public function exported for application use. */
+#define GIT_EXTERN(type) type
+
+/** Generic result code for any API call. */
+typedef int git_result;
+
+/** Operation completed successfully. */
+#define GIT_SUCCESS 0
+
+/**
+ * Operation failed, with unspecified reason.
+ * This value also serves as the base error code; all other
+ * error codes are subtracted from it such that all errors
+ * are < 0, in typical POSIX C tradition.
+ */
+#define GIT_ERROR -1
+
+/** Input was not a properly formatted Git object id. */
+#define GIT_ENOTOID (GIT_ERROR - 1)
+
+/** Input does not exist in the scope searched. */
+#define GIT_ENOTFOUND (GIT_ERROR - 2)
+
+/** @} */
+GIT_END_DECL
+#endif
diff --git a/src/git_odb.c b/src/git_odb.c
new file mode 100644
index 000000000..f1b16987e
--- /dev/null
+++ b/src/git_odb.c
@@ -0,0 +1,43 @@
+/*
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "git_odb.h"
+
+git_result git_odb_sread(git_sobj *out, git_odb *db, git_oid *id)
+{
+ if (!git_odb__sread_packed(out, db, id))
+ return GIT_SUCCESS;
+ return git_odb__sread_loose(out, db, id);
+}
diff --git a/src/git_odb.h b/src/git_odb.h
new file mode 100644
index 000000000..c72d81b5d
--- /dev/null
+++ b/src/git_odb.h
@@ -0,0 +1,133 @@
+/*
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef INCLUDE_git_odb_h__
+#define INCLUDE_git_odb_h__
+
+#include "git_common.h"
+#include "git_oid.h"
+#include <unistd.h>
+
+/**
+ * @file git_odb.h
+ * @brief Git object database routines
+ * @defgroup git_odb Git object database routines
+ * @ingroup Git
+ * @{
+ */
+GIT_BEGIN_DECL
+
+/** An open object database handle. */
+typedef struct git_odb {
+ /** Path to the "objects" directory. */
+ const char *path;
+
+ /** Alternate databases to search. */
+ struct git_odb **alternates;
+
+ /** Number of alternates available. */
+ unsigned n_alternates;
+} git_odb;
+
+/**
+ * Open an object database for read/write access.
+ * @param out location to store the database pointer, if opened.
+ * Set to NULL if the open failed.
+ * @param objects_dir path of the database's "objects" directory.
+ * @return GIT_SUCCESS if the database opened; otherwise an error
+ * code describing why the open was not possible.
+ */
+GIT_EXTERN(git_result) git_odb_open(git_odb **out, const char *objects_dir);
+
+/**
+ * Close an open object database.
+ * @param db database pointer to close. If NULL no action is taken.
+ * The pointer is set to NULL when the close is completed.
+ */
+GIT_EXTERN(void) git_odb_close(git_odb** db);
+
+/** Basic type (loose or packed) of any Git object. */
+typedef enum {
+ OBJ_BAD = -1, /**< Object is invalid. */
+ OBJ__EXT1 = 0, /**< Reserved for future use. */
+ OBJ_COMMIT = 1, /**< A commit object. */
+ OBJ_TREE = 2, /**< A tree (directory listing) object. */
+ OBJ_BLOB = 3, /**< A file revision object. */
+ OBJ_TAG = 4, /**< An annotated tag object. */
+ OBJ__EXT2 = 5, /**< Reserved for future use. */
+ OBJ_OFS_DELTA = 6, /**< A delta, base is given by an offset. */
+ OBJ_REF_DELTA = 7, /**< A delta, base is given by object id. */
+} git_otype;
+
+/** A small object read from the database. */
+typedef struct {
+ void *data; /**< Raw, decompressed object data. */
+ size_t len; /**< Total number of bytes in data. */
+ git_otype type; /**< Type of this object. */
+} git_sobj;
+
+/**
+ * Read a small object from the database.
+ * @param out object descriptor to populate upon reading.
+ * @param db database to search for the object in.
+ * @param id identity of the object to read.
+ * @return GIT_SUCCESS if the object was read;
+ * GIT_ENOTFOUND if the object is not in the database.
+ */
+GIT_EXTERN(git_result) git_odb_sread(git_sobj *out, git_odb *db, git_oid *id);
+
+/**
+ * Read a small object from the database using only pack files.
+ * @param out object descriptor to populate upon reading.
+ * @param db database to search for the object in.
+ * @param id identity of the object to read.
+ * @return GIT_SUCCESS if the object was read;
+ * GIT_ENOTFOUND if the object is not in the database.
+ */
+GIT_EXTERN(git_result) git_odb__sread_packed(git_sobj *out, git_odb *db, git_oid *id);
+
+/**
+ * Read a small object from the database using only loose object files.
+ * @param out object descriptor to populate upon reading.
+ * @param db database to search for the object in.
+ * @param id identity of the object to read.
+ * @return GIT_SUCCESS if the object was read;
+ * GIT_ENOTFOUND if the object is not in the database.
+ */
+GIT_EXTERN(git_result) git_odb__sread_loose(git_sobj *out, git_odb *db, git_oid *id);
+
+/** @} */
+GIT_END_DECL
+#endif
diff --git a/src/git_oid.c b/src/git_oid.c
new file mode 100644
index 000000000..d0a44bd6e
--- /dev/null
+++ b/src/git_oid.c
@@ -0,0 +1,73 @@
+/*
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "git_oid.h"
+#include <string.h>
+
+static signed char from_hex[] = {
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 00 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 10 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 20 */
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, /* 30 */
+-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 40 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 50 */
+-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 60 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 70 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 80 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 90 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* a0 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* b0 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* c0 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* d0 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* e0 */
+-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* f0 */
+};
+
+git_result git_oid_mkstr(git_oid *out, const char *str)
+{
+ int p;
+ for (p = 0; p < sizeof(out->id); p++, str += 2) {
+ int v = (from_hex[str[0]] << 4) | from_hex[str[1]];
+ if (v < 0)
+ return GIT_ENOTOID;
+ out->id[p] = (unsigned char)v;
+ }
+ return GIT_SUCCESS;
+}
+
+void git_oid_mkraw(git_oid *out, const unsigned char *raw)
+{
+ memcpy(out->id, raw, sizeof(out->id));
+}
diff --git a/src/git_oid.h b/src/git_oid.h
new file mode 100644
index 000000000..5ec2b329a
--- /dev/null
+++ b/src/git_oid.h
@@ -0,0 +1,76 @@
+/*
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef INCLUDE_git_oid_h__
+#define INCLUDE_git_oid_h__
+
+#include "git_common.h"
+
+/**
+ * @file git_oid.h
+ * @brief Git object id routines
+ * @defgroup git_oid Git object id routines
+ * @ingroup Git
+ * @{
+ */
+GIT_BEGIN_DECL
+
+/** Unique identity of any object (commit, tree, blob, tag). */
+typedef struct
+{
+ /** raw binary formatted id */
+ unsigned char id[20];
+} git_oid;
+
+/**
+ * Parse a hex formatted object id into a git_oid.
+ * @param out oid structure the result is written into.
+ * @param str input hex string; must be pointing at the start of
+ * the hex sequence and have at least the number of bytes
+ * needed for an oid encoded in hex (40 bytes).
+ * @return GIT_SUCCESS if valid; GIT_ENOTOID on failure.
+ */
+GIT_EXTERN(git_result) git_oid_mkstr(git_oid *out, const char *str);
+
+/**
+ * Copy an already raw oid into a git_oid structure.
+ * @param out oid structure the result is written into.
+ * @param raw the raw input bytes to be copied.
+ */
+GIT_EXTERN(void) git_oid_mkraw(git_oid *out, const unsigned char *raw);
+
+/** @} */
+GIT_END_DECL
+#endif