Patrick Steinhardt <ps@xxxxxx> writes: > Fix both of these issues by not making it an error anymore when the > given length exceeds the hash length. Instead, if we have a repository, > then we truncate the length to the maximum length of `the_hash_algo`. > Otherwise, we simply leave the abbreviated length intact and store it > as-is. This is equivalent to the logic in `parse_opt_abbrev_cb()` and is > handled just fine by `repo_find_unique_abbrev_r()`. In practice, we > should never even end up using `default_abbrev` without a repository > anyway given that abbreviating object IDs to unique prefixes requires us > to have access to an object database. Makes sense. > diff --git a/config.c b/config.c > index abce05b774..ab2844d9e1 100644 > --- a/config.c > +++ b/config.c > @@ -1460,11 +1460,14 @@ static int git_default_core_config(const char *var, const char *value, > if (!strcasecmp(value, "auto")) > default_abbrev = -1; > else if (!git_parse_maybe_bool_text(value)) > - default_abbrev = the_hash_algo->hexsz; > + default_abbrev = startup_info->have_repository ? > + the_hash_algo->hexsz : GIT_MAX_HEXSZ; We will need to have some code that further adjusts overly long default_abbrev when we really have to abbreviate (at which time, hopefully we are already aware of the real hash algorithm used in the repository, and that may be SHA-1) anyway. So do we even need the conditional here? Can't we just set it to GIT_MAX_HEXSZ here unconditionally? > diff --git a/t/t4202-log.sh b/t/t4202-log.sh > index 86c695eb0a..99c063e4cd 100755 > --- a/t/t4202-log.sh > +++ b/t/t4202-log.sh > @@ -1237,6 +1237,12 @@ test_expect_success 'log.abbrevCommit configuration' ' > test_cmp expect.whatchanged.full actual > ' > > +test_expect_success 'log.abbrevCommit with --abbrev=9000' ' > + git log --no-abbrev >expect && > + git log --abbrev-commit --abbrev=9000 >actual && > + test_cmp expect actual > +' Interesting. We didn't have coverage for "we want to see full object names" case. > +test_expect_success 'output from clone with core.abbrev does not crash' ' > + rm -fr dst && > + echo "Cloning into ${SQ}dst${SQ}..." >expect && > + git -c core.abbrev=12 clone -n "file://$(pwd)/src" dst >actual 2>&1 && > + test_cmp expect actual > +' OK.