1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
#!/usr/bin/env bash
set -eou pipefail
GIT_TOP_DIR=$(git rev-parse --show-toplevel)
TMPFILE=$(mktemp)
trap "rm -rf ${TMPFILE}" EXIT
# By default just run against the latest commit
BASE=${BASE:-HEAD~1}
HEAD=${HEAD:-HEAD}
ancestor=$(git merge-base "${BASE}" "${HEAD}")
echo "INFO: Checking aginst the following stats"
(
set -x
git diff --stat "$ancestor" "${HEAD}" | sed '$d' > "${TMPFILE}"
)
while read -r git_attribute; do
if echo "${git_attribute}" | grep "linguist-generated=true" >/dev/null 2>/dev/null; then
pattern=$(echo ${git_attribute} | cut -d' ' -f1)
escaped_pattern=$(printf '%s\n' "$pattern" | sed -e 's/[\/&]/\\&/g')
# Delete known generated files
sed -i '/'"${escaped_pattern}"'/d' "${TMPFILE}"
fi
done < "${GIT_TOP_DIR}/.gitattributes"
echo "INFO: Showing non-generated files:"
(
set -x
cat "${TMPFILE}"
)
# Get only files that have changed
changed_files=$(cut -d' ' -f2 "${TMPFILE}" | xargs)
details=$(git diff --shortstat "$ancestor" "${HEAD}" -- ${changed_files})
add=$(echo "$details" | grep -o '[0-9]* insertion' | grep -o '[0-9]*' || true)
remove=$(echo "$details" | grep -o '[0-9]* deletion' | grep -o '[0-9]*' || true)
pr_size=0
if [ "$add" ]; then
pr_size=$(("$pr_size" + "$add"))
fi
if [ "$remove" ]; then
pr_size=$(("$pr_size" + "$remove"))
fi
echo "INFO: PR SIZE is ${pr_size}"
if ((pr_size > 2000)); then
echo
echo 'Your PR is '"$pr_size"' LOC which is more than the 2000 maximum'
echo 'allowed within PyTorch infra. PLease make sure to split up'
echo 'your PR into smaller pieces that can be reviewed.'
echo 'If you think that this rule should not apply to your PR,'
echo 'please contact @albanD or @seemethere.'
echo
exit 1
fi
|