mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 07:26:17 -04:00
fix(is-git-repo): recognize bare repositories (#1266)
* fix(is-git-repo): recognize bare repositories is_git_repo() used `git rev-parse --show-toplevel` to detect whether the current directory is inside a git repository. --show-toplevel fails for bare repositories since they have no working tree, so every command that relies on this shared helper (e.g. `git browse`) reports "Not a git repo!" when run from inside a bare repo, even though it plainly is one. Switch to `git rev-parse --git-dir`, which succeeds for both normal and bare repositories and keeps the existing "not a repo" behavior for non-repo directories. Fixes #1238, reported and LGTM'd by maintainers there with this exact fix; no PR had been opened for it yet. Adds tests/is-git-repo.bats covering: a normal repo, a bare repo, and a plain (non-repo) directory. * Fix ruff lint failures in scripts/checkstyle.py This PR's new Ruff CI job surfaced pre-existing style issues (unsorted imports, deprecated typing.List/Dict, nested ifs, bare exit()) in checkstyle.py. Cleaned these up so the newly added lint job passes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
03569856db
commit
dbf68bac59
|
|
@ -3,7 +3,9 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
is_git_repo() {
|
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=$?
|
result=$?
|
||||||
if test $result != 0; then
|
if test $result != 0; then
|
||||||
>&2 echo 'Not a git repo!'
|
>&2 echo 'Not a git repo!'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import argparse
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from collections.abc import Callable # Compatibility.
|
from collections.abc import Callable # compat
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
|
@ -102,13 +102,12 @@ def lintfile(file: Path, rules: list[Rule], options: dict[str, Any]):
|
||||||
|
|
||||||
for rule in rules:
|
for rule in rules:
|
||||||
should_run = False
|
should_run = False
|
||||||
# ruff: noqa: SIM102
|
if 'sh' in rule['fileTypes'] and file.name.endswith('.sh'):
|
||||||
if 'sh' in rule['fileTypes']:
|
should_run = True
|
||||||
if file.name.endswith('.sh'):
|
if 'bash' in rule['fileTypes'] and (
|
||||||
should_run = True
|
file.name.endswith('.bash') or file.name.endswith('.bats') or file.name.startswith('git-')
|
||||||
if 'bash' in rule['fileTypes']:
|
):
|
||||||
if file.name.endswith('.bash') or file.name.endswith('.bats') or file.name.startswith('git-'):
|
should_run = True
|
||||||
should_run = True
|
|
||||||
|
|
||||||
if options['verbose']:
|
if options['verbose']:
|
||||||
print(f'{file!s}: {should_run}')
|
print(f'{file!s}: {should_run}')
|
||||||
|
|
|
||||||
32
tests/is-git-repo.bats
Normal file
32
tests/is-git-repo.bats
Normal file
|
|
@ -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!'
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue