mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-11 18:26:50 +00:00
45 lines
1.5 KiB
Bash
Executable File
45 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Fixes safe cops automatically and creates a commit for each.
|
|
#
|
|
# Usage:
|
|
# ./script/rubocop-autocorrect.sh [-n 7]
|
|
#
|
|
# The optional parameter is passed to `head` to limit the number of iterations.
|
|
# Use `-n -0` to remove the limit.
|
|
|
|
if git add --dry-run --all | grep --quiet .; then
|
|
echo "Dirty working tree. Please start on a fresh branch."
|
|
exit 1
|
|
fi
|
|
|
|
# Refresh todo file so that following commits include only related changes:
|
|
bundle exec rubocop --regenerate-todo --no-auto-gen-timestamp
|
|
git commit --all --message "Regenerate Rubocop's TODO file"
|
|
|
|
# Iterate over all safe cops.
|
|
# Looking at the 5 lines following the autocorrection comment works for our
|
|
# current todo file. If cops start to add more comment lines in the future then
|
|
# this may break and not find those cops.
|
|
# Alternatives include using `sed` for parsing or running rubocop in fail-fast
|
|
# mode to find the next failing cop.
|
|
grep "This cop supports safe autocorrection" -A 5 .rubocop_todo.yml\
|
|
| grep '^[A-Z]'\
|
|
| head "${@:1}"\
|
|
| tr -d :\
|
|
| while read cop; do
|
|
echo "Trying to autocorrect safely: $cop"
|
|
bundle exec rubocop --regenerate-todo --except "$cop"
|
|
|
|
echo "Safely autocorrect $cop" > .git/COMMIT_EDITMSG
|
|
echo "" >> .git/COMMIT_EDITMSG
|
|
bundle exec rubocop --autocorrect >> .git/COMMIT_EDITMSG
|
|
if grep -q "offenses corrected" .git/COMMIT_EDITMSG; then
|
|
git add --all
|
|
git commit --file .git/COMMIT_EDITMSG
|
|
else
|
|
echo "No corrections made for $cop. Skipping."
|
|
fi
|
|
|
|
done
|