Throw error if repo is in detached state

This commit is contained in:
Stefan Zweifel 2025-02-05 17:14:02 +01:00
parent 9fa4cb99cf
commit ad56d4eb46
No known key found for this signature in database
2 changed files with 42 additions and 4 deletions

View File

@ -31,6 +31,10 @@ _main() {
_switch_to_repository
_check_if_is_git_repository
_check_if_repository_is_in_detached_state
if _git_is_dirty || "$INPUT_SKIP_DIRTY_CHECK"; then
_set_github_output "changes_detected" "true"
@ -84,11 +88,26 @@ _git_is_dirty() {
gitStatusMessage="$((git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}} >/dev/null ) 2>&1)";
# shellcheck disable=SC2086
gitStatus="$(git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}})";
if [ $? -ne 0 ]; then
_log "error" "git-status failed with:<$gitStatusMessage>";
[ -n "$gitStatus" ]
}
_check_if_is_git_repository() {
if [ -d ".git" ]; then
_log "debug" "Repository found.";
else
_log "error" "Not a git repository. Please make sure to run this action in a git repository. Adjust the `repository` input if necessary.";
exit 1;
fi
[ -n "$gitStatus" ]
}
_check_if_repository_is_in_detached_state() {
if [ -z "$(git symbolic-ref HEAD)" ]
then
_log "error" "Repository is in detached HEAD state. Please checkout a branch before committing.";
exit 1;
else
_log "debug" "Repository is on a branch.";
fi
}
_add_files() {

View File

@ -1088,5 +1088,24 @@ END
run git_auto_commit
assert_failure;
assert_line "::error::git-status failed with:<fatal: not a git repository (or any of the parent directories): .git>"
assert_line "::error::Not a git repository. Please make sure to run this action in a git repository. Adjust the `repository` input if necessary."
}
@test "It detects if the repository is in a detached state and exits with an error" {
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
run git_auto_commit
assert_success
# Bring local repository into a detached state
prev_commit=$(git rev-parse HEAD~1);
git checkout "$prev_commit";
touch "${FAKE_TEMP_LOCAL_REPOSITORY}"/remote-files{4,5,6}.txt
run git_auto_commit
assert_failure;
assert_line "::error::Repository is in detached HEAD state. Please checkout a branch before committing."
}