Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Don't commit files when only LF/CRLF changes #265

Merged
merged 6 commits into from
Dec 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions entrypoint.sh
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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