diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2015-11-10 21:21:26 -0800 |
---|---|---|
committer | Edward Thomson <ethomson@microsoft.com> | 2015-11-25 15:38:16 -0500 |
commit | 76ade3a0b87e279935eba54be2485105396edb7f (patch) | |
tree | 9a8310a2645ccca8074d2357ab07baf1bb9ffb87 /src/annotated_commit.h | |
parent | 7730fe8e9cda1e160bff1e78dfa2a898799d4365 (diff) | |
download | libgit2-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.h | 22 |
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; |