Merge branch 'jk/help-unknown-ref-fix'

Improve the code to show args with potential typo that cannot be
interpreted as a commit-ish.

* jk/help-unknown-ref-fix:
  help_unknown_ref(): check for refname ambiguity
  help_unknown_ref(): duplicate collected refnames
This commit is contained in:
Junio C Hamano 2019-06-13 13:19:42 -07:00
commit 8d32d2552e
2 changed files with 24 additions and 4 deletions

8
help.c
View File

@ -754,19 +754,19 @@ static int append_similar_ref(const char *refname, const struct object_id *oid,
{
struct similar_ref_cb *cb = (struct similar_ref_cb *)(cb_data);
char *branch = strrchr(refname, '/') + 1;
const char *remote;
/* A remote branch of the same name is deemed similar */
if (skip_prefix(refname, "refs/remotes/", &remote) &&
if (starts_with(refname, "refs/remotes/") &&
!strcmp(branch, cb->base_ref))
string_list_append(cb->similar_refs, remote);
string_list_append_nodup(cb->similar_refs,
shorten_unambiguous_ref(refname, 1));
return 0;
}
static struct string_list guess_refs(const char *ref)
{
struct similar_ref_cb ref_cb;
struct string_list similar_refs = STRING_LIST_INIT_NODUP;
struct string_list similar_refs = STRING_LIST_INIT_DUP;
ref_cb.base_ref = ref;
ref_cb.similar_refs = &similar_refs;

View File

@ -893,4 +893,24 @@ test_expect_success 'merge --quit' '
)
'
test_expect_success 'merge suggests matching remote refname' '
git commit --allow-empty -m not-local &&
git update-ref refs/remotes/origin/not-local HEAD &&
git reset --hard HEAD^ &&
# This is white-box testing hackery; we happen to know
# that reading packed refs is more picky about the memory
# ownership of strings we pass to for_each_ref() callbacks.
git pack-refs --all --prune &&
test_must_fail git merge not-local 2>stderr &&
grep origin/not-local stderr
'
test_expect_success 'suggested names are not ambiguous' '
git update-ref refs/heads/origin/not-local HEAD &&
test_must_fail git merge not-local 2>stderr &&
grep remotes/origin/not-local stderr
'
test_done