summaryrefslogtreecommitdiff
path: root/src/annotated_commit.h
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2015-11-10 21:21:26 -0800
committerEdward Thomson <ethomson@microsoft.com>2015-11-25 15:38:16 -0500
commit76ade3a0b87e279935eba54be2485105396edb7f (patch)
tree9a8310a2645ccca8074d2357ab07baf1bb9ffb87 /src/annotated_commit.h
parent7730fe8e9cda1e160bff1e78dfa2a898799d4365 (diff)
downloadlibgit2-76ade3a0b87e279935eba54be2485105396edb7f.tar.gz
merge: use annotated commits for recursion
Use annotated commits to act as our virtual bases, instead of regular commits, to avoid polluting the odb with virtual base commits and trees. Instead, build an annotated commit with an index and pointers to the commits that it was merged from.
Diffstat (limited to 'src/annotated_commit.h')
-rw-r--r--src/annotated_commit.h22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/annotated_commit.h b/src/annotated_commit.h
index 9a041176e..cbb88fd22 100644
--- a/src/annotated_commit.h
+++ b/src/annotated_commit.h
@@ -7,11 +7,31 @@
#ifndef INCLUDE_annotated_commit_h__
#define INCLUDE_annotated_commit_h__
+#include "oidarray.h"
+
#include "git2/oid.h"
-/** Internal structure for merge inputs */
+typedef enum {
+ GIT_ANNOTATED_COMMIT_REAL = 1,
+ GIT_ANNOTATED_COMMIT_VIRTUAL = 2,
+} git_annotated_commit_t;
+
+/**
+ * Internal structure for merge inputs. An annotated commit is generally
+ * "real" and backed by an actual commit in the repository, but merge will
+ * internally create "virtual" commits that are in-memory intermediate
+ * commits backed by an index.
+ */
struct git_annotated_commit {
+ git_annotated_commit_t type;
+
+ /* real commit */
git_commit *commit;
+ git_tree *tree;
+
+ /* virtual commit structure */
+ git_index *index;
+ git_array_oid_t parents;
char *ref_name;
char *remote_url;