File: dump_api_shas.sh

package info (click to toggle)
android-platform-frameworks-base 1%3A14~beta1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 326,092 kB
  • sloc: java: 2,032,373; xml: 343,016; cpp: 304,181; python: 3,683; ansic: 2,090; sh: 1,871; makefile: 117; sed: 19
file content (56 lines) | stat: -rwxr-xr-x 1,952 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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