summaryrefslogtreecommitdiff
path: root/src/object.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/object.h')
-rw-r--r--src/object.h45
1 files changed, 41 insertions, 4 deletions
diff --git a/src/object.h b/src/object.h
index d187c55b7..47f82f36d 100644
--- a/src/object.h
+++ b/src/object.h
@@ -7,6 +7,9 @@
#ifndef INCLUDE_object_h__
#define INCLUDE_object_h__
+#include "common.h"
+#include "array.h"
+
/** Base git object for inheritance */
struct git_object {
git_cached_obj cached;
@@ -17,15 +20,49 @@ struct git_object {
void git_object__free(void *object);
int git_object__from_odb_object(
- git_object **object_out,
+ git_object **out,
git_repository *repo,
git_odb_object *odb_obj,
- git_otype type);
+ git_otype type,
+ bool lax);
int git_object__resolve_to_type(git_object **obj, git_otype type);
-int git_oid__parse(git_oid *oid, const char **buffer_out, const char *buffer_end, const char *header);
-
void git_oid__writebuf(git_buf *buf, const char *header, const git_oid *oid);
+enum {
+ GIT_PARSE_BODY_OPTIONAL = -2,
+ GIT_PARSE_BODY = -1,
+ GIT_PARSE_MODE_OPTIONAL = 0,
+ GIT_PARSE_OID = 1,
+ GIT_PARSE_OID_ARRAY = 2,
+ GIT_PARSE_OTYPE = 3,
+ GIT_PARSE_SIGNATURE = 4,
+ GIT_PARSE_TO_EOL = 5,
+};
+
+typedef git_array_t(git_oid) git_oid_array;
+
+typedef struct {
+ const char *tag;
+ size_t taglen;
+ int type;
+ union {
+ git_oid *id;
+ git_otype *otype;
+ char **text;
+ git_signature **sig;
+ git_oid_array *ids;
+ const char **body;
+ } value;
+} git_object_parse_t;
+
+/* parse tagged lines followed by blank line and message body */
+int git_object__parse_lines(
+ git_otype type,
+ git_object_parse_t *parse,
+ const char *buf,
+ const char *buf_end);
+
#endif
+