diff --git a/diff.c b/diff.c index da6e9e7f49..e87847fa4b 100644 --- a/diff.c +++ b/diff.c @@ -5224,6 +5224,8 @@ static int diff_opt_find_object(const struct option *option, struct object_id oid; BUG_ON_OPT_NEG(unset); + if (!startup_info->have_repository) + return error(_("--find-object requires a git repository")); if (repo_get_oid(the_repository, arg, &oid)) return error(_("unable to resolve '%s'"), arg); diff --git a/t/t4053-diff-no-index.sh b/t/t4053-diff-no-index.sh index 69599279e9..15076dfe0d 100755 --- a/t/t4053-diff-no-index.sh +++ b/t/t4053-diff-no-index.sh @@ -76,6 +76,16 @@ test_expect_success 'git diff --no-index executed outside repo gives correct err ) ' +test_expect_success 'git diff --find-object outside repo fails gracefully' ' + ( + GIT_CEILING_DIRECTORIES=$TRASH_DIRECTORY/non && + export GIT_CEILING_DIRECTORIES && + cd non/git && + test_must_fail git diff --find-object=abc123 2>err && + test_grep "find-object requires a git repository" err + ) +' + test_expect_success 'diff D F and diff F D' ' ( cd repo &&