Add option to scripts-dev/lint.sh to only lint files changed since the last git commit (#8472)
This PR makes several changes to the `./scripts-dev/lint.sh` script, which lints the codebase with a number of tools: * Adds usage information, with `-h` flag to show it. Otherwise it will show when providing an unknown flag. * Adds option `-d` which will check both staged and unstaged files that have changed since the last commit and add them to the list of files to lint. - Note that only files without an extension, or with a `.py` extension will be allowed. This prevents editing bash scripts causing the linters to break on non-python files. * Improves the print-out of which files/directories are being linted.
This commit is contained in:
parent
74976a8e43
commit
654e239b25
|
@ -63,6 +63,10 @@ run-time:
|
||||||
./scripts-dev/lint.sh path/to/file1.py path/to/file2.py path/to/folder
|
./scripts-dev/lint.sh path/to/file1.py path/to/file2.py path/to/folder
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can also provided the `-d` option, which will lint the files that have been
|
||||||
|
changed since the last git commit. This will often be significantly faster than
|
||||||
|
linting the whole codebase.
|
||||||
|
|
||||||
Before pushing new changes, ensure they don't produce linting errors. Commit any
|
Before pushing new changes, ensure they don't produce linting errors. Commit any
|
||||||
files that were corrected.
|
files that were corrected.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Add `-d` option to `./scripts-dev/lint.sh` to lint files that have changed since the last git commit.
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Runs linting scripts over the local Synapse checkout
|
# Runs linting scripts over the local Synapse checkout
|
||||||
# isort - sorts import statements
|
# isort - sorts import statements
|
||||||
|
@ -7,15 +7,90 @@
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ $# -ge 1 ]
|
usage() {
|
||||||
then
|
echo
|
||||||
files=$*
|
echo "Usage: $0 [-h] [-d] [paths...]"
|
||||||
else
|
echo
|
||||||
files="synapse tests scripts-dev scripts contrib synctl"
|
echo "-d"
|
||||||
|
echo " Lint files that have changed since the last git commit."
|
||||||
|
echo
|
||||||
|
echo " If paths are provided and this option is set, both provided paths and those"
|
||||||
|
echo " that have changed since the last commit will be linted."
|
||||||
|
echo
|
||||||
|
echo " If no paths are provided and this option is not set, all files will be linted."
|
||||||
|
echo
|
||||||
|
echo " Note that paths with a file extension that is not '.py' will be excluded."
|
||||||
|
echo "-h"
|
||||||
|
echo " Display this help text."
|
||||||
|
}
|
||||||
|
|
||||||
|
USING_DIFF=0
|
||||||
|
files=()
|
||||||
|
|
||||||
|
while getopts ":dh" opt; do
|
||||||
|
case $opt in
|
||||||
|
d)
|
||||||
|
USING_DIFF=1
|
||||||
|
;;
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
echo "ERROR: Invalid option: -$OPTARG" >&2
|
||||||
|
usage
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Strip any options from the command line arguments now that
|
||||||
|
# we've finished processing them
|
||||||
|
shift "$((OPTIND-1))"
|
||||||
|
|
||||||
|
if [ $USING_DIFF -eq 1 ]; then
|
||||||
|
# Check both staged and non-staged changes
|
||||||
|
for path in $(git diff HEAD --name-only); do
|
||||||
|
filename=$(basename "$path")
|
||||||
|
file_extension="${filename##*.}"
|
||||||
|
|
||||||
|
# If an extension is present, and it's something other than 'py',
|
||||||
|
# then ignore this file
|
||||||
|
if [[ -n ${file_extension+x} && $file_extension != "py" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Append this path to our list of files to lint
|
||||||
|
files+=("$path")
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Linting these locations: $files"
|
# Append any remaining arguments as files to lint
|
||||||
isort $files
|
files+=("$@")
|
||||||
python3 -m black $files
|
|
||||||
|
if [[ $USING_DIFF -eq 1 ]]; then
|
||||||
|
# If we were asked to lint changed files, and no paths were found as a result...
|
||||||
|
if [ ${#files[@]} -eq 0 ]; then
|
||||||
|
# Then print and exit
|
||||||
|
echo "No files found to lint."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# If we were not asked to lint changed files, and no paths were found as a result,
|
||||||
|
# then lint everything!
|
||||||
|
if [[ -z ${files+x} ]]; then
|
||||||
|
# Lint all source code files and directories
|
||||||
|
files=("synapse" "tests" "scripts-dev" "scripts" "contrib" "synctl" "setup.py")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Linting these paths: ${files[*]}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Print out the commands being run
|
||||||
|
set -x
|
||||||
|
|
||||||
|
isort "${files[@]}"
|
||||||
|
python3 -m black "${files[@]}"
|
||||||
./scripts-dev/config-lint.sh
|
./scripts-dev/config-lint.sh
|
||||||
flake8 $files
|
flake8 "${files[@]}"
|
||||||
|
|
4
setup.py
4
setup.py
|
@ -15,12 +15,10 @@
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
from setuptools import setup, find_packages, Command
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
from setuptools import Command, find_packages, setup
|
||||||
|
|
||||||
here = os.path.abspath(os.path.dirname(__file__))
|
here = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue