diff --git a/README.md b/README.md index d2610944..b19e3f79 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,10 @@ This is a more extended example with all possible options. skip_dirty_check: true # Optional: Skip internal call to `git fetch` - skip_fetch: true + skip_fetch: true + + # Optional: Prevents the shell from expanding filenames. Details: https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html + disable_globbing: true ``` ## Example diff --git a/action.yml b/action.yml index adb0fdff..fe8246cf 100644 --- a/action.yml +++ b/action.yml @@ -52,6 +52,9 @@ inputs: description: Skip the call to git-fetch. required: false default: false + disable_globbing: + description: Stop the shell from expanding filenames (https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html) + default: false outputs: changes_detected: diff --git a/entrypoint.sh b/entrypoint.sh index 8449b918..0a1139cb 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -2,6 +2,10 @@ set -eu +if "$INPUT_DISABLE_GLOBBING"; then + set -o noglob; +fi + _main() { _switch_to_repository diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 32b84e13..1dae00eb 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -22,6 +22,7 @@ setup() { export INPUT_PUSH_OPTIONS="" export INPUT_SKIP_DIRTY_CHECK=false export INPUT_SKIP_FETCH=false + export INPUT_DISABLE_GLOBBING=false # Configure Git if [[ -z $(git config user.name) ]]; then @@ -400,3 +401,38 @@ git_auto_commit() { assert_equal $current_sha $remote_sha } + +@test "It does not expand wildcard glob when using INPUT_PATTERN and INPUT_DISABLE_GLOBBING in git-status and git-add" { + + # Create additional files in a nested directory structure + echo "Create Additional files"; + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-a.py + mkdir "${FAKE_LOCAL_REPOSITORY}"/nested + touch "${FAKE_LOCAL_REPOSITORY}"/nested/new-file-b.py + + # Commit changes + echo "Commit changes before running git_auto_commit"; + cd "${FAKE_LOCAL_REPOSITORY}"; + git add . > /dev/null; + git commit --quiet -m "Init Remote Repository"; + git push origin master > /dev/null; + + # Make nested file dirty + echo "foo-bar" > "${FAKE_LOCAL_REPOSITORY}"/nested/new-file-b.py; + + # --- + + INPUT_FILE_PATTERN="*.py" + INPUT_DISABLE_GLOBBING=true + + run git_auto_commit + + assert_success + + assert_line "INPUT_FILE_PATTERN: *.py" + assert_line "::debug::Push commit to remote branch master" + + # Assert that the updated py file has been commited. + run git status + refute_output --partial 'nested/new-file-b.py' +}