diff options
| author | SZEDER Gábor <szeder.dev@gmail.com> | 2017-03-23 16:29:16 +0100 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2017-03-23 11:18:22 -0700 |
| commit | 3ad8ea7ccc236cbe916e26c4ddf531ee2e24a772 (patch) | |
| tree | aff2c2e1928e53d32d5d8f861c381dde9094d0ec /t/t4013/diff.format-patch_--inline_--stdout_initial..side | |
| parent | completion: support excluding full refs (diff) | |
| download | git-3ad8ea7ccc236cbe916e26c4ddf531ee2e24a772.tar.gz git-3ad8ea7ccc236cbe916e26c4ddf531ee2e24a772.zip | |
completion: don't disambiguate tags and branches
When the completion script has to list only tags or only branches, it
uses the 'git for-each-ref' format 'refname:short', which makes sure
that all listed tags and branches are unambiguous. However,
disambiguating tags and branches in these cases is wrong, because:
- __git_tags(), the helper function listing possible tagname
arguments for 'git tag', lists an ambiguous tag
'refs/tags/ambiguous' as 'tags/ambiguous'. Its only consumer,
'git tag' expects its tagname argument to be under 'refs/tags/',
thus it interprets that abgiguous tag as
'refs/tags/tags/ambiguous'. Clearly wrong.
- __git_heads() lists possible branchname arguments for 'git branch'
and possible 'branch.<branchname>' configuration subsections.
Both of these expect branchnames to be under 'refs/heads/' and
misinterpret a disambiguated branchname like 'heads/ambiguous'.
Furthermore, disambiguation involves several stat() syscalls for each
tag or branch, thus comes at a steep cost especially on Windows and/or
when there are a lot of tags or branches to be listed.
Use the 'git for-each-ref' format 'refname:strip=2' instead of
'refname:short' to avoid harmful disambiguation of tags and branches
in __git_tags() and __git_heads().
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t4013/diff.format-patch_--inline_--stdout_initial..side')
0 files changed, 0 insertions, 0 deletions
