static int add_ref_decoration(const char *refname, const unsigned char *sha1, int flags, void *cb_data) { struct object *obj = parse_object(sha1); enum decoration_type type = DECORATION_NONE; if (!obj) return 0; if (!prefixcmp(refname, "refs/heads")) type = DECORATION_REF_LOCAL; else if (!prefixcmp(refname, "refs/remotes")) type = DECORATION_REF_REMOTE; else if (!prefixcmp(refname, "refs/tags")) type = DECORATION_REF_TAG; else if (!prefixcmp(refname, "refs/stash")) type = DECORATION_REF_STASH; else if (!prefixcmp(refname, "HEAD")) type = DECORATION_REF_HEAD; if (!cb_data || *(int *)cb_data == DECORATE_SHORT_REFS) refname = prettify_refname(refname); add_name_decoration(type, refname, obj); while (obj->type == OBJ_TAG) { obj = ((struct tag *)obj)->tagged; if (!obj) break; add_name_decoration(DECORATION_REF_TAG, refname, obj); } return 0; }
static int add_ref_decoration(const char *refname, const unsigned char *sha1, int flags, void *cb_data) { struct object *obj = parse_object(sha1); if (!obj) return 0; add_name_decoration("", refname, obj); while (obj->type == OBJ_TAG) { obj = ((struct tag *)obj)->tagged; if (!obj) break; add_name_decoration("tag: ", refname, obj); } return 0; }
static int add_ref_decoration(const char *refname, const struct object_id *oid, int flags, void *cb_data) { struct object *obj; enum decoration_type type = DECORATION_NONE; assert(cb_data == NULL); if (starts_with(refname, git_replace_ref_base)) { struct object_id original_oid; if (!check_replace_refs) return 0; if (get_oid_hex(refname + strlen(git_replace_ref_base), &original_oid)) { warning("invalid replace ref %s", refname); return 0; } obj = parse_object(original_oid.hash); if (obj) add_name_decoration(DECORATION_GRAFTED, "replaced", obj); return 0; } obj = parse_object(oid->hash); if (!obj) return 0; if (starts_with(refname, "refs/heads/")) type = DECORATION_REF_LOCAL; else if (starts_with(refname, "refs/remotes/")) type = DECORATION_REF_REMOTE; else if (starts_with(refname, "refs/tags/")) type = DECORATION_REF_TAG; else if (!strcmp(refname, "refs/stash")) type = DECORATION_REF_STASH; else if (!strcmp(refname, "HEAD")) type = DECORATION_REF_HEAD; add_name_decoration(type, refname, obj); while (obj->type == OBJ_TAG) { obj = ((struct tag *)obj)->tagged; if (!obj) break; if (!obj->parsed) parse_object(obj->oid.hash); add_name_decoration(DECORATION_REF_TAG, refname, obj); } return 0; }
static int add_ref_decoration(const char *refname, const unsigned char *sha1, int flags, void *cb_data) { struct object *obj = parse_object(sha1); if (!obj) return 0; if (!cb_data || *(int *)cb_data == DECORATE_SHORT_REFS) refname = prettify_refname(refname); add_name_decoration("", refname, obj); while (obj->type == OBJ_TAG) { obj = ((struct tag *)obj)->tagged; if (!obj) break; add_name_decoration("tag: ", refname, obj); } return 0; }
static struct commit_list *best_bisection_sorted(struct commit_list *list, int nr) { struct commit_list *p; struct commit_dist *array = xcalloc(nr, sizeof(*array)); int cnt, i; for (p = list, cnt = 0; p; p = p->next) { int distance; unsigned flags = p->item->object.flags; if (flags & TREESAME) continue; distance = weight(p); if (nr - distance < distance) distance = nr - distance; array[cnt].commit = p->item; array[cnt].distance = distance; cnt++; } qsort(array, cnt, sizeof(*array), compare_commit_dist); for (p = list, i = 0; i < cnt; i++) { char buf[100]; /* enough for dist=%d */ struct object *obj = &(array[i].commit->object); snprintf(buf, sizeof(buf), "dist=%d", array[i].distance); add_name_decoration(DECORATION_NONE, buf, obj); p->item = array[i].commit; p = p->next; } if (p) p->next = NULL; free(array); return list; }
static int add_ref_decoration(const char *refname, const unsigned char *sha1, int flags, void *cb_data) { struct object *obj; enum decoration_type type = DECORATION_NONE; if (starts_with(refname, "refs/replace/")) { unsigned char original_sha1[20]; if (!check_replace_refs) return 0; if (get_sha1_hex(refname + 13, original_sha1)) { warning("invalid replace ref %s", refname); return 0; } obj = parse_object(original_sha1); if (obj) add_name_decoration(DECORATION_GRAFTED, "replaced", obj); return 0; } obj = parse_object(sha1); if (!obj) return 0; if (starts_with(refname, "refs/heads/")) type = DECORATION_REF_LOCAL; else if (starts_with(refname, "refs/remotes/")) type = DECORATION_REF_REMOTE; else if (starts_with(refname, "refs/tags/")) type = DECORATION_REF_TAG; else if (!strcmp(refname, "refs/stash")) type = DECORATION_REF_STASH; else if (!strcmp(refname, "HEAD")) type = DECORATION_REF_HEAD; if (!cb_data || *(int *)cb_data == DECORATE_SHORT_REFS) refname = prettify_refname(refname); add_name_decoration(type, refname, obj); while (obj->type == OBJ_TAG) { obj = ((struct tag *)obj)->tagged; if (!obj) break; if (!obj->parsed) parse_object(obj->sha1); add_name_decoration(DECORATION_REF_TAG, refname, obj); } return 0; }
static int add_graft_decoration(const struct commit_graft *graft, void *cb_data) { struct commit *commit = lookup_commit(graft->sha1); if (!commit) return 0; add_name_decoration(DECORATION_GRAFTED, "grafted", &commit->object); return 0; }