blob: fc20795b45b9b4c22c2cf69595f433594ed84c5c [file] [log] [blame] [edit]
#!/bin/bash
# git pre-push hook to detect whether a developer is attempting to push
# non-public commits to a public repository.
remote="$1"
url="$2"
# Don't bother checking if this is being pushed to gerrit.
if [[ "$url" = "sso://googleplex-android/platform/external/drm_hwcomposer" ]] ||
[[ "$url" = "sso://android.googlesource.com/platform/external/drm_hwcomposer" ]]
then
exit 0
fi
while read local_ref local_sha remote_ref remote_sha
do
# Gather a list of all commits that are to be pushed to the remote.
# remote_sha will be 000000 if there is no corresponding remote branch.
if [[ "$remote_sha" =~ "0000000000" ]]; then
commits=$(git rev-list $local_sha --not --remotes=$remote)
else
commits=$(git rev-list $remote_sha..$local_sha)
fi
# Check each commit message for the prohibited prefix.
for commit in $commits; do
# Get the commit message.
message=$(git log -1 --pretty=%B $commit)
# Check if the commit message starts with "ANDROID:"
if [[ "$message" == "ANDROID"* ]] ||
[[ "$message" == "INTERNAL"* ]] ||
[[ "$message" == "DO NOT MERGE"* ]]; then
echo "Error: Commit message starts with downstream tag:"
echo "$message"
echo "It looks like you're trying to push internal changes to an externally "
echo "visible repository: $url"
exit 1
fi
done
done
exit 0