From: Junio C Hamano Date: Fri, 2 Mar 2018 20:18:24 +0000 (-0800) Subject: Merge branch 'ot/ref-filter-cleanup' into next X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/3b4c39a4b534e99be730c03274c8c0993eb2b0ed?ds=inline;hp=-c Merge branch 'ot/ref-filter-cleanup' into next Code cleanup. * ot/ref-filter-cleanup: ref-filter: get rid of goto ref-filter: get rid of duplicate code --- 3b4c39a4b534e99be730c03274c8c0993eb2b0ed diff --combined ref-filter.c index 18c0b8e5dd,be94766f78..fb57964c37 --- a/ref-filter.c +++ b/ref-filter.c @@@ -529,12 -529,12 +529,12 @@@ static void end_align_handler(struct re static void align_atom_handler(struct atom_value *atomv, struct ref_formatting_state *state) { - struct ref_formatting_stack *new; + struct ref_formatting_stack *new_stack; push_stack_element(&state->stack); - new = state->stack; - new->at_end = end_align_handler; - new->at_end_data = &atomv->atom->u.align; + new_stack = state->stack; + new_stack->at_end = end_align_handler; + new_stack->at_end_data = &atomv->atom->u.align; } static void if_then_else_handler(struct ref_formatting_stack **stack) @@@ -574,16 -574,16 +574,16 @@@ static void if_atom_handler(struct atom_value *atomv, struct ref_formatting_state *state) { - struct ref_formatting_stack *new; + struct ref_formatting_stack *new_stack; struct if_then_else *if_then_else = xcalloc(sizeof(struct if_then_else), 1); if_then_else->str = atomv->atom->u.if_then_else.str; if_then_else->cmp_status = atomv->atom->u.if_then_else.cmp_status; push_stack_element(&state->stack); - new = state->stack; - new->at_end = if_then_else_handler; - new->at_end_data = if_then_else; + new_stack = state->stack; + new_stack->at_end = if_then_else_handler; + new_stack->at_end_data = if_then_else; } static int is_empty(const char *s) @@@ -769,7 -769,7 +769,7 @@@ static void grab_common_values(struct a if (deref) name++; if (!strcmp(name, "objecttype")) - v->s = typename(obj->type); + v->s = type_name(obj->type); else if (!strcmp(name, "objectsize")) { v->value = sz; v->s = xstrfmt("%lu", sz); @@@ -795,7 -795,7 +795,7 @@@ static void grab_tag_values(struct atom if (!strcmp(name, "tag")) v->s = tag->tag; else if (!strcmp(name, "type") && tag->tagged) - v->s = typename(tag->tagged->type); + v->s = type_name(tag->tagged->type); else if (!strcmp(name, "object") && tag->tagged) v->s = xstrdup(oid_to_hex(&tag->tagged->oid)); } @@@ -1249,8 -1249,8 +1249,8 @@@ static void fill_remote_ref_details(str if (atom->u.remote_ref.option == RR_REF) *s = show_ref(&atom->u.remote_ref.refname, refname); else if (atom->u.remote_ref.option == RR_TRACK) { - if (stat_tracking_info(branch, &num_ours, - &num_theirs, NULL)) { + if (stat_tracking_info(branch, &num_ours, &num_theirs, + NULL, AHEAD_BEHIND_FULL) < 0) { *s = xstrdup(msgs.gone); } else if (!num_ours && !num_theirs) *s = ""; @@@ -1267,8 -1267,8 +1267,8 @@@ free((void *)to_free); } } else if (atom->u.remote_ref.option == RR_TRACKSHORT) { - if (stat_tracking_info(branch, &num_ours, - &num_theirs, NULL)) + if (stat_tracking_info(branch, &num_ours, &num_theirs, + NULL, AHEAD_BEHIND_FULL) < 0) return; if (!num_ours && !num_theirs) @@@ -1354,15 -1354,31 +1354,31 @@@ static const char *get_refname(struct u return show_ref(&atom->u.refname, ref->refname); } + static void get_object(struct ref_array_item *ref, const struct object_id *oid, + int deref, struct object **obj) + { + int eaten; + unsigned long size; + void *buf = get_obj(oid, obj, &size, &eaten); + if (!buf) + die(_("missing object %s for %s"), + oid_to_hex(oid), ref->refname); + if (!*obj) + die(_("parse_object_buffer failed on %s for %s"), + oid_to_hex(oid), ref->refname); + + grab_values(ref->value, deref, *obj, buf, size); + if (!eaten) + free(buf); + } + /* * Parse the object referred by ref, and grab needed value. */ static void populate_value(struct ref_array_item *ref) { - void *buf; struct object *obj; - int eaten, i; - unsigned long size; + int i; const struct object_id *tagged; ref->value = xcalloc(used_atom_cnt, sizeof(struct atom_value)); @@@ -1478,22 -1494,12 +1494,12 @@@ for (i = 0; i < used_atom_cnt; i++) { struct atom_value *v = &ref->value[i]; if (v->s == NULL) - goto need_obj; + break; } - return; + if (used_atom_cnt <= i) + return; - need_obj: - buf = get_obj(&ref->objectname, &obj, &size, &eaten); - if (!buf) - die(_("missing object %s for %s"), - oid_to_hex(&ref->objectname), ref->refname); - if (!obj) - die(_("parse_object_buffer failed on %s for %s"), - oid_to_hex(&ref->objectname), ref->refname); - - grab_values(ref->value, 0, obj, buf, size); - if (!eaten) - free(buf); + get_object(ref, &ref->objectname, 0, &obj); /* * If there is no atom that wants to know about tagged @@@ -1514,16 -1520,7 +1520,7 @@@ * is not consistent with what deref_tag() does * which peels the onion to the core. */ - buf = get_obj(tagged, &obj, &size, &eaten); - if (!buf) - die(_("missing object %s for %s"), - oid_to_hex(tagged), ref->refname); - if (!obj) - die(_("parse_object_buffer failed on %s for %s"), - oid_to_hex(tagged), ref->refname); - grab_values(ref->value, 1, obj, buf, size); - if (!eaten) - free(buf); + get_object(ref, tagged, 1, &obj); } /* @@@ -1995,30 -1992,12 +1992,30 @@@ static void do_merge_filter(struct ref_ free_array_item(item); } - for (i = 0; i < old_nr; i++) - clear_commit_marks(to_clear[i], ALL_REV_FLAGS); + clear_commit_marks_many(old_nr, to_clear, ALL_REV_FLAGS); clear_commit_marks(filter->merge_commit, ALL_REV_FLAGS); free(to_clear); } +static int add_str_to_commit_list(struct string_list_item *item, void *commit_list) +{ + struct object_id oid; + struct commit *commit; + + if (get_oid(item->string, &oid)) { + error(_("malformed object name %s"), item->string); + exit(1); + } + commit = lookup_commit_reference(&oid); + if (!commit) { + error(_("no such commit %s"), item->string); + exit(1); + } + commit_list_insert(commit, commit_list); + + return 0; +} + /* * API for filtering a set of refs. Based on the type of refs the user * has requested, we iterate through those refs and apply filters @@@ -2031,10 -2010,6 +2028,10 @@@ int filter_refs(struct ref_array *array int ret = 0; unsigned int broken = 0; + /* Convert string representation and add to commit list. */ + for_each_string_list(&filter->with_commit_strs, add_str_to_commit_list, &filter->with_commit); + for_each_string_list(&filter->no_commit_strs, add_str_to_commit_list, &filter->no_commit); + ref_cbdata.array = array; ref_cbdata.filter = filter;