On Thu, Oct 05, 2017 at 04:55:53AM -0400, Jeff King wrote: > On Mon, Sep 25, 2017 at 05:54:49AM -0400, Derrick Stolee wrote: > > > Create helper program test-abbrev to compute the minimum length of a > > disambiguating short-sha for an input list of object ids. > > This seems like something that Git ought to be able to do via real > commands. > > Using "log --stdin --no-walk --format=%h" doesn't quite work, since it > only handles commits. We ought to be able to ask "cat-file" for this, > though. E.g., with the patch below you can do: > > git cat-file --batch-check='%(objectsize:short)' <input > > Or even just dispense with your earlier randomization helper and do: > > git cat-file --batch-all-objects --batch-check='%(objectsize:short)' > > to compute the abbreviation for every object. Of course it would help if I bothered to include the patch. Here it is. diff --git a/builtin/cat-file.c b/builtin/cat-file.c index f5fa4fd75a..a5f911a632 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -225,6 +225,9 @@ static void expand_atom(struct strbuf *sb, const char *atom, int len, if (is_atom("objectname", atom, len)) { if (!data->mark_query) strbuf_addstr(sb, oid_to_hex(&data->oid)); + } else if (is_atom("objectname:short", atom, len)) { + if (!data->mark_query) + strbuf_add_unique_abbrev(sb, data->oid.hash, MINIMUM_ABBREV); } else if (is_atom("objecttype", atom, len)) { if (data->mark_query) data->info.typep = &data->type; -Peff