diff --git a/helper/is-git-repo b/helper/is-git-repo index cf03a16..869c2e3 100755 --- a/helper/is-git-repo +++ b/helper/is-git-repo @@ -3,7 +3,9 @@ # is_git_repo() { - git rev-parse --show-toplevel > /dev/null 2>&1 + # --git-dir succeeds for both normal and bare repositories, whereas + # --show-toplevel fails inside a bare repository (it has no working tree). + git rev-parse --git-dir > /dev/null 2>&1 result=$? if test $result != 0; then >&2 echo 'Not a git repo!' diff --git a/scripts/checkstyle.py b/scripts/checkstyle.py index 88a875c..8a26901 100755 --- a/scripts/checkstyle.py +++ b/scripts/checkstyle.py @@ -3,7 +3,7 @@ import argparse import os import re import sys -from collections.abc import Callable # Compatibility. +from collections.abc import Callable # compat from pathlib import Path from typing import Any @@ -102,13 +102,12 @@ def lintfile(file: Path, rules: list[Rule], options: dict[str, Any]): for rule in rules: should_run = False - # ruff: noqa: SIM102 - if 'sh' in rule['fileTypes']: - if file.name.endswith('.sh'): - should_run = True - if 'bash' in rule['fileTypes']: - if file.name.endswith('.bash') or file.name.endswith('.bats') or file.name.startswith('git-'): - should_run = True + if 'sh' in rule['fileTypes'] and file.name.endswith('.sh'): + should_run = True + if 'bash' in rule['fileTypes'] and ( + file.name.endswith('.bash') or file.name.endswith('.bats') or file.name.startswith('git-') + ): + should_run = True if options['verbose']: print(f'{file!s}: {should_run}') diff --git a/tests/is-git-repo.bats b/tests/is-git-repo.bats new file mode 100644 index 0000000..118d487 --- /dev/null +++ b/tests/is-git-repo.bats @@ -0,0 +1,32 @@ +# shellcheck shell=bash + +source "$BATS_TEST_DIRNAME/test_util.sh" + +setup_file() { + test_util.setup_file +} + +setup() { + test_util.cd_test +} + +@test "is_git_repo succeeds inside a normal (non-bare) repository" { + test_util.git_init + + run bash "$BATS_TEST_DIRNAME/../helper/is-git-repo" + assert_success +} + +@test "is_git_repo succeeds inside a bare repository (see #1238)" { + git init --bare --initial-branch main repo.git + cd repo.git + + run bash "$BATS_TEST_DIRNAME/../helper/is-git-repo" + assert_success +} + +@test "is_git_repo fails outside of a repository" { + run bash "$BATS_TEST_DIRNAME/../helper/is-git-repo" + assert_failure + assert_output 'Not a git repo!' +}