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