mirror of
https://github.com/git/git.git
synced 2024-09-21 19:01:40 +02:00
attr: fix BUG() when parsing attrs outside of repo
If either the `--attr-source` option or the `GIT_ATTR_SOURCE` envvar are set, then `compute_default_attr_source()` will try to look up the value as a treeish. It is possible to hit that function while outside of a Git repository though, for example when using `git grep --no-index`. In that case, Git will hit a bug because we try to look up the main ref store outside of a repository. Handle the case gracefully and detect when we try to look up an attr source without a repository. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
bbb82f8dc8
commit
813f17fd6b
6
attr.c
6
attr.c
@ -1227,6 +1227,12 @@ static int compute_default_attr_source(struct object_id *attr_source)
|
|||||||
if (!default_attr_source_tree_object_name)
|
if (!default_attr_source_tree_object_name)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (!startup_info->have_repository) {
|
||||||
|
if (!ignore_bad_attr_tree)
|
||||||
|
die(_("cannot use --attr-source or GIT_ATTR_SOURCE without repo"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (repo_get_oid_treeish(the_repository,
|
if (repo_get_oid_treeish(the_repository,
|
||||||
default_attr_source_tree_object_name,
|
default_attr_source_tree_object_name,
|
||||||
attr_source)) {
|
attr_source)) {
|
||||||
|
@ -434,6 +434,21 @@ test_expect_success 'precedence of --attr-source, GIT_ATTR_SOURCE, then attr.tre
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'diff without repository with attr source' '
|
||||||
|
mkdir -p "$TRASH_DIRECTORY/outside/nongit" &&
|
||||||
|
(
|
||||||
|
cd "$TRASH_DIRECTORY/outside/nongit" &&
|
||||||
|
GIT_CEILING_DIRECTORIES="$TRASH_DIRECTORY/outside" &&
|
||||||
|
export GIT_CEILING_DIRECTORIES &&
|
||||||
|
touch file &&
|
||||||
|
cat >expect <<-EOF &&
|
||||||
|
fatal: cannot use --attr-source or GIT_ATTR_SOURCE without repo
|
||||||
|
EOF
|
||||||
|
test_must_fail env GIT_ATTR_SOURCE=HEAD git grep --no-index foo file 2>err &&
|
||||||
|
test_cmp expect err
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'bare repository: with --source' '
|
test_expect_success 'bare repository: with --source' '
|
||||||
(
|
(
|
||||||
cd bare.git &&
|
cd bare.git &&
|
||||||
|
Loading…
Reference in New Issue
Block a user