From 56881843d4d916a166ac4c6ba1803e5ceba9c44d Mon Sep 17 00:00:00 2001 From: Johan Herland Date: Tue, 9 Nov 2010 22:49:47 +0100 Subject: builtin/notes.c: Refactor creation of notes commits. Create new function create_notes_commit() which is slightly more general than commit_notes() (accepts multiple commit parents and does not auto-update the notes ref). This function will be used by the notes-merge functionality in future patches. Also rewrite builtin/notes.c:commit_notes() to reuse this new function. Signed-off-by: Johan Herland Signed-off-by: Junio C Hamano --- notes-merge.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'notes-merge.c') diff --git a/notes-merge.c b/notes-merge.c index ab9885039e..b9956c3bf3 100644 --- a/notes-merge.c +++ b/notes-merge.c @@ -1,6 +1,7 @@ #include "cache.h" #include "commit.h" #include "refs.h" +#include "notes.h" #include "notes-merge.h" void init_notes_merge_options(struct notes_merge_options *o) @@ -17,6 +18,32 @@ void init_notes_merge_options(struct notes_merge_options *o) } \ } while (0) +void create_notes_commit(struct notes_tree *t, struct commit_list *parents, + const char *msg, unsigned char *result_sha1) +{ + unsigned char tree_sha1[20]; + + assert(t->initialized); + + if (write_notes_tree(t, tree_sha1)) + die("Failed to write notes tree to database"); + + if (!parents) { + /* Deduce parent commit from t->ref */ + unsigned char parent_sha1[20]; + if (!read_ref(t->ref, parent_sha1)) { + struct commit *parent = lookup_commit(parent_sha1); + if (!parent || parse_commit(parent)) + die("Failed to find/parse commit %s", t->ref); + commit_list_insert(parent, &parents); + } + /* else: t->ref points to nothing, assume root/orphan commit */ + } + + if (commit_tree(msg, tree_sha1, parents, result_sha1, NULL)) + die("Failed to commit notes tree to database"); +} + int notes_merge(struct notes_merge_options *o, unsigned char *result_sha1) { -- cgit v1.2.3