diff options
Diffstat (limited to 'notes.c')
-rw-r--r-- | notes.c | 30 |
1 files changed, 18 insertions, 12 deletions
@@ -340,15 +340,28 @@ static void load_subtree(struct leaf_node *subtree, struct int_node *node, free(buf); } -static void initialize_notes(const char *notes_ref_name) +void init_notes(const char *notes_ref, int flags) { unsigned char sha1[20], object_sha1[20]; unsigned mode; struct leaf_node root_tree; - if (!notes_ref_name || read_ref(notes_ref_name, object_sha1) || - get_tree_entry(object_sha1, "", sha1, &mode)) + assert(!initialized); + initialized = 1; + + if (!notes_ref) + notes_ref = getenv(GIT_NOTES_REF_ENVIRONMENT); + if (!notes_ref) + notes_ref = notes_ref_name; /* value of core.notesRef config */ + if (!notes_ref) + notes_ref = GIT_NOTES_DEFAULT_REF; + + if (flags & NOTES_INIT_EMPTY || !notes_ref || + read_ref(notes_ref, object_sha1)) return; + if (get_tree_entry(object_sha1, "", sha1, &mode)) + die("Failed to read notes tree referenced by %s (%s)", + notes_ref, object_sha1); hashclr(root_tree.key_sha1); hashcpy(root_tree.val_sha1, sha1); @@ -379,15 +392,8 @@ void format_note(const unsigned char *object_sha1, struct strbuf *sb, unsigned long linelen, msglen; enum object_type type; - if (!initialized) { - const char *env = getenv(GIT_NOTES_REF_ENVIRONMENT); - if (env) - notes_ref_name = getenv(GIT_NOTES_REF_ENVIRONMENT); - else if (!notes_ref_name) - notes_ref_name = GIT_NOTES_DEFAULT_REF; - initialize_notes(notes_ref_name); - initialized = 1; - } + if (!initialized) + init_notes(NULL, 0); sha1 = lookup_notes(object_sha1); if (!sha1) |