]> git.ipfire.org Git - thirdparty/git.git/blobdiff - notes.c
Sync with maint
[thirdparty/git.git] / notes.c
diff --git a/notes.c b/notes.c
index 532ec37865768d05a31606f495b4f0c1645ea757..0c79964c26a71d6843c43c94fe260131334749f2 100644 (file)
--- a/notes.c
+++ b/notes.c
@@ -269,8 +269,10 @@ static int note_tree_insert(struct notes_tree *t, struct int_node *tree,
                case PTR_TYPE_NOTE:
                        if (oideq(&l->key_oid, &entry->key_oid)) {
                                /* skip concatenation if l == entry */
-                               if (oideq(&l->val_oid, &entry->val_oid))
+                               if (oideq(&l->val_oid, &entry->val_oid)) {
+                                       free(entry);
                                        return 0;
+                               }
 
                                ret = combine_notes(&l->val_oid,
                                                    &entry->val_oid);
@@ -397,7 +399,7 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
        struct name_entry entry;
        const unsigned hashsz = the_hash_algo->rawsz;
 
-       buf = fill_tree_descriptor(&desc, &subtree->val_oid);
+       buf = fill_tree_descriptor(the_repository, &desc, &subtree->val_oid);
        if (!buf)
                die("Could not read %s for notes-index",
                     oid_to_hex(&subtree->val_oid));
@@ -458,7 +460,7 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
                        die("Failed to load %s %s into notes tree "
                            "from %s",
                            type == PTR_TYPE_NOTE ? "note" : "subtree",
-                           oid_to_hex(&l->key_oid), t->ref);
+                           oid_to_hex(&object_oid), t->ref);
 
                continue;
 
@@ -1015,7 +1017,7 @@ void init_notes(struct notes_tree *t, const char *notes_ref,
                return;
        if (flags & NOTES_INIT_WRITABLE && read_ref(notes_ref, &object_oid))
                die("Cannot use notes ref %s", notes_ref);
-       if (get_tree_entry(&object_oid, "", &oid, &mode))
+       if (get_tree_entry(the_repository, &object_oid, "", &oid, &mode))
                die("Failed to read notes tree referenced by %s (%s)",
                    notes_ref, oid_to_hex(&object_oid));
 
@@ -1040,6 +1042,39 @@ struct notes_tree **load_notes_trees(struct string_list *refs, int flags)
 }
 
 void init_display_notes(struct display_notes_opt *opt)
+{
+       memset(opt, 0, sizeof(*opt));
+       opt->use_default_notes = -1;
+}
+
+void enable_default_display_notes(struct display_notes_opt *opt, int *show_notes)
+{
+       opt->use_default_notes = 1;
+       *show_notes = 1;
+}
+
+void enable_ref_display_notes(struct display_notes_opt *opt, int *show_notes,
+               const char *ref) {
+       struct strbuf buf = STRBUF_INIT;
+       strbuf_addstr(&buf, ref);
+       expand_notes_ref(&buf);
+       string_list_append(&opt->extra_notes_refs,
+                       strbuf_detach(&buf, NULL));
+       *show_notes = 1;
+}
+
+void disable_display_notes(struct display_notes_opt *opt, int *show_notes)
+{
+       opt->use_default_notes = -1;
+       /* we have been strdup'ing ourselves, so trick
+        * string_list into free()ing strings */
+       opt->extra_notes_refs.strdup_strings = 1;
+       string_list_clear(&opt->extra_notes_refs, 0);
+       opt->extra_notes_refs.strdup_strings = 0;
+       *show_notes = 0;
+}
+
+void load_display_notes(struct display_notes_opt *opt)
 {
        char *display_ref_env;
        int load_config_refs = 0;