xref: /aosp_15_r20/frameworks/base/api/dump_api_shas.sh (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
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