1*d57664e9SAndroid Build Coastguard Worker#!/bin/bash -e 2*d57664e9SAndroid Build Coastguard Worker# This script dumps the git SHAs of all commits inside api tracking directories. 3*d57664e9SAndroid Build Coastguard Worker# It can used by tools wanting to track API changes, and the primary original 4*d57664e9SAndroid Build Coastguard Worker# purpose is to verify verify all API change SHAs have been tracked by the 5*d57664e9SAndroid Build Coastguard Worker# server-side API-council tools. 6*d57664e9SAndroid Build Coastguard Worker# 7*d57664e9SAndroid Build Coastguard Worker# The only argument is used to specify a git commit range to filter by. 8*d57664e9SAndroid Build Coastguard Worker# 9*d57664e9SAndroid Build Coastguard Worker# Example invocation (API changes between O and P): 10*d57664e9SAndroid Build Coastguard Worker# frameworks/base/api/dump_api_shas.sh origin/oreo-dev..origin/pie-dev 11*d57664e9SAndroid Build Coastguard Worker 12*d57664e9SAndroid Build Coastguard Workerset -o pipefail 13*d57664e9SAndroid Build Coastguard Worker 14*d57664e9SAndroid Build Coastguard Workereecho() { echo $@ >&2 ; } 15*d57664e9SAndroid Build Coastguard Worker 16*d57664e9SAndroid Build Coastguard Workerif [[ $1 == *..* ]]; then 17*d57664e9SAndroid Build Coastguard Worker exclude=${1/..*} 18*d57664e9SAndroid Build Coastguard Worker include=${1/*..} 19*d57664e9SAndroid Build Coastguard Workerelse 20*d57664e9SAndroid Build Coastguard Worker eecho No range or invalid range specified, defaulting to all commits from HEAD. 21*d57664e9SAndroid Build Coastguard Worker exclude= 22*d57664e9SAndroid Build Coastguard Worker include=HEAD 23*d57664e9SAndroid Build Coastguard Workerfi 24*d57664e9SAndroid Build Coastguard Worker 25*d57664e9SAndroid Build Coastguard Workereecho -n building queryview... 26*d57664e9SAndroid Build Coastguard Worker{ source build/envsetup.sh && lunch aosp_arm && m queryview; } >/dev/null 2>&1 \ 27*d57664e9SAndroid Build Coastguard Worker || { eecho failed; exit 1; } 28*d57664e9SAndroid Build Coastguard Workereecho "done" 29*d57664e9SAndroid Build Coastguard Worker 30*d57664e9SAndroid Build Coastguard Worker# This finds the directories where the dependant java_sdk_libs are defined 31*d57664e9SAndroid Build Coastguard Workerbpdirs=$( 32*d57664e9SAndroid Build Coastguard Worker bazel query --config=queryview --output=package \ 33*d57664e9SAndroid Build Coastguard Worker 'kind(java_sdk_library, deps(//frameworks/base/api/..., 1))' 2>/dev/null 34*d57664e9SAndroid Build Coastguard Worker echo frameworks/base/core/api # Not a java_sdk_library. 35*d57664e9SAndroid Build Coastguard Worker echo frameworks/base/services/api # Not a java_sdk_library. 36*d57664e9SAndroid Build Coastguard Worker) 37*d57664e9SAndroid Build Coastguard Worker 38*d57664e9SAndroid Build Coastguard Worker# Find relevant api subdirectories 39*d57664e9SAndroid Build Coastguard Workerapidirs=$( 40*d57664e9SAndroid Build Coastguard Worker find $bpdirs -type f -name '*current.txt' -path '*/api/*' \ 41*d57664e9SAndroid Build Coastguard Worker | xargs realpath --relative-to=$(pwd) | xargs dirname | sort | uniq 42*d57664e9SAndroid Build Coastguard Worker) 43*d57664e9SAndroid Build Coastguard Worker 44*d57664e9SAndroid Build Coastguard Worker# Dump sorted SHAs of commits in these directories 45*d57664e9SAndroid Build Coastguard Worker{ for d in $apidirs; do 46*d57664e9SAndroid Build Coastguard Worker ( cd $d 47*d57664e9SAndroid Build Coastguard Worker eecho inspecting $d 48*d57664e9SAndroid Build Coastguard Worker exclude_arg=$(test -n "$exclude" && { 49*d57664e9SAndroid Build Coastguard Worker git rev-parse -q --verify $exclude > /dev/null && echo "--not $exclude" \ 50*d57664e9SAndroid Build Coastguard Worker || eecho "$d has no revision $exclude, including all commits"; } || true) 51*d57664e9SAndroid Build Coastguard Worker for f in $(find . -name '*current.txt'); do 52*d57664e9SAndroid Build Coastguard Worker git --no-pager log --pretty=format:%H --no-merges --follow $include $exclude_arg -- $f 53*d57664e9SAndroid Build Coastguard Worker echo # No trailing newline with --no-pager 54*d57664e9SAndroid Build Coastguard Worker done 55*d57664e9SAndroid Build Coastguard Worker ) 56*d57664e9SAndroid Build Coastguard Workerdone; } | sort | uniq 57