void for_each_alternate_ref(alternate_ref_fn fn, void *data) { struct alternate_refs_data cb; cb.fn = fn; cb.data = data; foreach_alt_odb(refs_from_alternate_cb, &cb); }
static void prepare_possible_alternates(const char *sm_name, struct string_list *reference) { char *sm_alternate = NULL, *error_strategy = NULL; struct submodule_alternate_setup sas = SUBMODULE_ALTERNATE_SETUP_INIT; git_config_get_string("submodule.alternateLocation", &sm_alternate); if (!sm_alternate) return; git_config_get_string("submodule.alternateErrorStrategy", &error_strategy); if (!error_strategy) error_strategy = xstrdup("die"); sas.submodule_name = sm_name; sas.reference = reference; if (!strcmp(error_strategy, "die")) sas.error_mode = SUBMODULE_ALTERNATE_ERROR_DIE; else if (!strcmp(error_strategy, "info")) sas.error_mode = SUBMODULE_ALTERNATE_ERROR_INFO; else if (!strcmp(error_strategy, "ignore")) sas.error_mode = SUBMODULE_ALTERNATE_ERROR_IGNORE; else die(_("Value '%s' for submodule.alternateErrorStrategy is not recognized"), error_strategy); if (!strcmp(sm_alternate, "superproject")) foreach_alt_odb(add_possible_reference_from_superproject, &sas); else if (!strcmp(sm_alternate, "no")) ; /* do nothing */ else die(_("Value '%s' for submodule.alternateLocation is not recognized"), sm_alternate); free(sm_alternate); free(error_strategy); }
static void add_alternate_refs(void) { foreach_alt_odb(add_refs_from_alternate, NULL); }
int cmd_count_objects(int argc, const char **argv, const char *prefix) { int human_readable = 0; struct option opts[] = { OPT__VERBOSE(&verbose, N_("be verbose")), OPT_BOOL('H', "human-readable", &human_readable, N_("print sizes in human readable format")), OPT_END(), }; git_config(git_default_config, NULL); argc = parse_options(argc, argv, prefix, opts, count_objects_usage, 0); /* we do not take arguments other than flags for now */ if (argc) usage_with_options(count_objects_usage, opts); if (verbose) { report_garbage = real_report_garbage; report_linked_checkout_garbage(); } for_each_loose_file_in_objdir(get_object_directory(), count_loose, count_cruft, NULL, NULL); if (verbose) { struct packed_git *p; unsigned long num_pack = 0; off_t size_pack = 0; struct strbuf loose_buf = STRBUF_INIT; struct strbuf pack_buf = STRBUF_INIT; struct strbuf garbage_buf = STRBUF_INIT; if (!packed_git) prepare_packed_git(); for (p = packed_git; p; p = p->next) { if (!p->pack_local) continue; if (open_pack_index(p)) continue; packed += p->num_objects; size_pack += p->pack_size + p->index_size; num_pack++; } if (human_readable) { strbuf_humanise_bytes(&loose_buf, loose_size); strbuf_humanise_bytes(&pack_buf, size_pack); strbuf_humanise_bytes(&garbage_buf, size_garbage); } else { strbuf_addf(&loose_buf, "%lu", (unsigned long)(loose_size / 1024)); strbuf_addf(&pack_buf, "%lu", (unsigned long)(size_pack / 1024)); strbuf_addf(&garbage_buf, "%lu", (unsigned long)(size_garbage / 1024)); } printf("count: %lu\n", loose); printf("size: %s\n", loose_buf.buf); printf("in-pack: %lu\n", packed); printf("packs: %lu\n", num_pack); printf("size-pack: %s\n", pack_buf.buf); printf("prune-packable: %lu\n", packed_loose); printf("garbage: %lu\n", garbage); printf("size-garbage: %s\n", garbage_buf.buf); foreach_alt_odb(print_alternate, NULL); strbuf_release(&loose_buf); strbuf_release(&pack_buf); strbuf_release(&garbage_buf); } else { struct strbuf buf = STRBUF_INIT; if (human_readable) strbuf_humanise_bytes(&buf, loose_size); else strbuf_addf(&buf, "%lu kilobytes", (unsigned long)(loose_size / 1024)); printf("%lu objects, %s\n", loose, buf.buf); strbuf_release(&buf); } return 0; }