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