diff options
author | Anton Hansson <hansson@google.com> | 2021-03-24 14:54:49 +0000 |
---|---|---|
committer | Anton Hansson <hansson@google.com> | 2021-04-07 17:33:10 +0100 |
commit | 8caea0d426c4599afb19d1a913252cd5d5176536 (patch) | |
tree | 59815c26add6e3761cd91a4a205bce5f6ec0a465 /api | |
parent | 2af1306a773a2698da6f2a5138a7a4227014177b (diff) |
Add a tool to dump git SHAs of API changes
Necessary for use by API council near the end of a release to verify
their server-side tool has filed bugs for all the API changes.
This utilized bazel-query to figure out what contributes to current.txt,
and then finds api subdirectories in the relevant directories. Finally,
it prints the non-merge SHAs of changes in those directories.
Test: frameworks/base/api/dump_api_shas.sh
Change-Id: I330bfe24fb4df5a8a9218241540f7a7ab3b66e2f
Diffstat (limited to 'api')
-rwxr-xr-x | api/dump_api_shas.sh | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/api/dump_api_shas.sh b/api/dump_api_shas.sh new file mode 100755 index 000000000000..c023b312b471 --- /dev/null +++ b/api/dump_api_shas.sh @@ -0,0 +1,56 @@ +#!/bin/bash -e +# This script dumps the git SHAs of all commits inside api tracking directories. +# It can used by tools wanting to track API changes, and the primary original +# purpose is to verify verify all API change SHAs have been tracked by the +# server-side API-council tools. +# +# The only argument is used to specify a git commit range to filter by. +# +# Example invocation (API changes between O and P): +# frameworks/base/api/dump_api_shas.sh origin/oreo-dev..origin/pie-dev + +set -o pipefail + +eecho() { echo $@ >&2 ; } + +if [[ $1 == *..* ]]; then + exclude=${1/..*} + include=${1/*..} +else + eecho No range or invalid range specified, defaulting to all commits from HEAD. + exclude= + include=HEAD +fi + +eecho -n building queryview... +{ source build/envsetup.sh && lunch aosp_arm && m queryview; } >/dev/null 2>&1 \ + || { eecho failed; exit 1; } +eecho "done" + +# This finds the directories where the dependant java_sdk_libs are defined +bpdirs=$( + bazel query --config=queryview --output=package \ + 'kind(java_sdk_library, deps(//frameworks/base/api/..., 1))' 2>/dev/null + echo frameworks/base/core/api # Not a java_sdk_library. + echo frameworks/base/services/api # Not a java_sdk_library. +) + +# Find relevant api subdirectories +apidirs=$( + find $bpdirs -type f -name '*current.txt' -path '*/api/*' \ + | xargs realpath --relative-to=$(pwd) | xargs dirname | sort | uniq +) + +# Dump sorted SHAs of commits in these directories +{ for d in $apidirs; do + ( cd $d + eecho inspecting $d + exclude_arg=$(test -n "$exclude" && { + git rev-parse -q --verify $exclude > /dev/null && echo "--not $exclude" \ + || eecho "$d has no revision $exclude, including all commits"; } || true) + for f in $(find . -name '*current.txt'); do + git --no-pager log --pretty=format:%H --no-merges --follow $include $exclude_arg -- $f + echo # No trailing newline with --no-pager + done + ) +done; } | sort | uniq |