Skip to content

Commit

Permalink
Fix "nothing to commit" error with LF/CRLF changes #241 (#265)
Browse files Browse the repository at this point in the history
* fix crlf test

* add diff check before commit

* add dirty check flag (not sure if needed)

* Update test name and add more assertions

Update test name to make it clear that the Action no longer fails to detect CRLF changes.

* Add Comment to explain why we use git-diff again

* Add test to confirm content changes are commited

* Closes #241 

Co-authored-by: Stefan Zweifel <hello@stefanzweifel.io>
  • Loading branch information
ZeroRin and stefanzweifel committed Dec 1, 2022
1 parent 976f220 commit 3ea6ae1
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 11 deletions.
23 changes: 20 additions & 3 deletions entrypoint.sh
Expand Up @@ -25,11 +25,28 @@ _main() {

_add_files

_local_commit
# Check dirty state of repo again using git-diff.
# (git-diff detects beter if CRLF of files changes and does NOT
# proceed, if only CRLF changes are detected. See #241 and #265
# for more details.)
if [ -n "$(git diff --staged)" ] || "$INPUT_SKIP_DIRTY_CHECK"; then
_local_commit

_tag_commit
_tag_commit

_push_to_github
_push_to_github
else

# Check if $GITHUB_OUTPUT is available
# (Feature detection will be removed in late December 2022)
if [ -z ${GITHUB_OUTPUT+x} ]; then
echo "::set-output name=changes_detected::false";
else
echo "changes_detected=false" >> $GITHUB_OUTPUT;
fi

echo "Working tree clean. Nothing to commit.";
fi
else

# Check if $GITHUB_OUTPUT is available
Expand Down
55 changes: 47 additions & 8 deletions tests/git-auto-commit.bats
Expand Up @@ -974,34 +974,73 @@ cat_github_output() {
assert_line --partial "another-subdirectory/new-file-3.txt"
}

@test "fails to detect crlf change in files and does not detect change or commit changes" {
@test "detects if crlf in files change and does not create commit" {
# Set autocrlf to true
cd "${FAKE_LOCAL_REPOSITORY}"
git config core.autocrlf true
run git config --get-all core.autocrlf
assert_line "true"

# Add more .txt files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt
echo -ne "crlf test1\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test1\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt

# Run git-auto-commit to add new files to repository
run git_auto_commit

# Change control characters in files
sed 's/^M$//' "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
sed 's/$/^M/' "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt
echo -ne "crlf test1\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test1\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt

# Run git-auto-commit to commit the 2 changes files
run git_auto_commit

assert_success

# Changes are not detected
refute_line --partial "2 files changed, 2 insertions(+), 2 deletions(-)"
assert_line --partial "warning: in the working copy of 'new-file-2.txt', LF will be replaced by CRLF the next time Git touches it"

assert_line --partial "Working tree clean. Nothing to commit."
assert_line --partial "new-file-2.txt"
assert_line --partial "new-file-3.txt"

# Changes are not detected
run cat_github_output
assert_line "changes_detected=false"
}

@test "detects if crlf in files change and creates commit if the actual content of the files change" {
# Set autocrlf to true
cd "${FAKE_LOCAL_REPOSITORY}"
git config core.autocrlf true
run git config --get-all core.autocrlf
assert_line "true"

# Add more .txt files
echo -ne "crlf test1\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test1\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt

refute_line --partial "new-file-2.txt"
refute_line --partial "new-file-3.txt"
# Run git-auto-commit to add new files to repository
run git_auto_commit

# Change control characters in files
echo -ne "crlf test2\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test2\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt

# Run git-auto-commit to commit the 2 changes files
run git_auto_commit

assert_success

assert_line --partial "2 files changed, 2 insertions(+), 2 deletions(-)"
assert_line --partial "warning: in the working copy of 'new-file-2.txt', LF will be replaced by CRLF the next time Git touches it"

assert_line --partial "new-file-2.txt"
assert_line --partial "new-file-3.txt"

# Changes are detected
run cat_github_output
assert_line "changes_detected=true"
}


Expand Down

0 comments on commit 3ea6ae1

Please sign in to comment.