#!/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