Notes API: init_notes(): Initialize the notes tree from the given notes ref
[gitweb.git] / notes.c
diff --git a/notes.c b/notes.c
index 4ee4fec2331b651d66e04eeeca1b626d98d8f93e..3f4ae3534043798be86fcaa478246727bbbf4e1d 100644 (file)
--- a/notes.c
+++ b/notes.c
@@ -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)