Am 30.09.2016 um 21:36 schrieb Jeff King: > We adjust the test script here to demonstrate that this now > works. Unfortunately, we can't demonstrate that the > duplicate is suppressed, since it has no user-visible > behavior (it's just one less place for our object lookups to > go). But you can verify it manually via gdb, with something > like: > > for i in a b c; do > git init --bare $i > blob=$(echo $i | git -C $i hash-object -w --stdin) > done > echo "../../b/objects" >a/objects/info/alternates > echo "../../c/objects" >>a/objects/info/alternates > echo "../../c/objects" >b/objects/info/alternates > gdb --args git cat-file -e $blob > > After prepare_alt_odb() runs, we have only a single copy of > "/path/to/c/objects/" in the alt_odb list. A better way would be to provide a UI for that. We could easily bolt it to the side of count-objects like in the patch below. Feels a bit hackish, though. Per-ODB counting would be nice, but a lot more involved, I guess (didn't try). diff --git a/builtin/count-objects.c b/builtin/count-objects.c index ba92919..b2afe36 100644 --- a/builtin/count-objects.c +++ b/builtin/count-objects.c @@ -73,6 +73,12 @@ static int count_cruft(const char *basename, const char *path, void *data) return 0; } +static int print_alt_odb(struct alternate_object_database *alt, void *data) +{ + puts(alt->base); + return 0; +} + static char const * const count_objects_usage[] = { N_("git count-objects [-v] [-H | --human-readable]"), NULL @@ -81,10 +87,13 @@ static char const * const count_objects_usage[] = { int cmd_count_objects(int argc, const char **argv, const char *prefix) { int human_readable = 0; + int list_alt_odb = 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_BOOL(0, "list-alternates", &list_alt_odb, + N_("print list of alternate object databases")), OPT_END(), }; @@ -92,6 +101,12 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix) /* we do not take arguments other than flags for now */ if (argc) usage_with_options(count_objects_usage, opts); + + if (list_alt_odb) { + foreach_alt_odb(print_alt_odb, NULL); + return 0; + } + if (verbose) { report_garbage = real_report_garbage; report_linked_checkout_garbage();