static int notes_rewrite_config(const char *k, const char *v, void *cb) { struct notes_rewrite_cfg *c = cb; if (!prefixcmp(k, "notes.rewrite.") && !strcmp(k+14, c->cmd)) { c->enabled = git_config_bool(k, v); return 0; } else if (!c->mode_from_env && !strcmp(k, "notes.rewritemode")) { if (!v) config_error_nonbool(k); c->combine = parse_combine_notes_fn(v); if (!c->combine) { error("Bad notes.rewriteMode value: '%s'", v); return 1; } return 0; } else if (!c->refs_from_env && !strcmp(k, "notes.rewriteref")) { /* note that a refs/ prefix is implied in the * underlying for_each_glob_ref */ if (!prefixcmp(v, "refs/notes/")) string_list_add_refs_by_glob(c->refs, v); else warning("Refusing to rewrite notes in %s" " (outside of refs/notes/)", v); return 0; } return 0; }
void init_display_notes(struct display_notes_opt *opt) { char *display_ref_env; int load_config_refs = 0; display_notes_refs.strdup_strings = 1; assert(!display_notes_trees); if (!opt || opt->use_default_notes > 0 || (opt->use_default_notes == -1 && !opt->extra_notes_refs.nr)) { string_list_append(&display_notes_refs, default_notes_ref()); display_ref_env = getenv(GIT_NOTES_DISPLAY_REF_ENVIRONMENT); if (display_ref_env) { string_list_add_refs_from_colon_sep(&display_notes_refs, display_ref_env); load_config_refs = 0; } else load_config_refs = 1; } git_config(notes_display_config, &load_config_refs); if (opt) { struct string_list_item *item; for_each_string_list_item(item, &opt->extra_notes_refs) string_list_add_refs_by_glob(&display_notes_refs, item->string); } display_notes_trees = load_notes_trees(&display_notes_refs, 0); string_list_clear(&display_notes_refs, 0); }
static int notes_display_config(const char *k, const char *v, void *cb) { int *load_refs = cb; if (*load_refs && !strcmp(k, "notes.displayref")) { if (!v) config_error_nonbool(k); string_list_add_refs_by_glob(&display_notes_refs, v); } return 0; }
void string_list_add_refs_from_colon_sep(struct string_list *list, const char *globs) { struct string_list split = STRING_LIST_INIT_NODUP; char *globs_copy = xstrdup(globs); int i; string_list_split_in_place(&split, globs_copy, ':', -1); string_list_remove_empty_items(&split, 0); for (i = 0; i < split.nr; i++) string_list_add_refs_by_glob(list, split.items[i].string); string_list_clear(&split, 0); free(globs_copy); }
void string_list_add_refs_from_colon_sep(struct string_list *list, const char *globs) { struct strbuf globbuf = STRBUF_INIT; struct strbuf **split; int i; strbuf_addstr(&globbuf, globs); split = strbuf_split(&globbuf, ':'); for (i = 0; split[i]; i++) { if (!split[i]->len) continue; if (split[i]->buf[split[i]->len-1] == ':') strbuf_setlen(split[i], split[i]->len-1); string_list_add_refs_by_glob(list, split[i]->buf); } strbuf_list_free(split); strbuf_release(&globbuf); }