1*c8dee2aaSAndroid Build Coastguard Worker#!/bin/bash 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard WorkerHB_GIT_REPO=https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git 4*c8dee2aaSAndroid Build Coastguard WorkerHB_GIT_REF=origin/upstream/main 5*c8dee2aaSAndroid Build Coastguard WorkerHB_GIT_DIR=third_party/externals/harfbuzz 6*c8dee2aaSAndroid Build Coastguard WorkerHB_BUILD_DIR=$(dirname -- "$0") 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Workerpreviousrev() { 9*c8dee2aaSAndroid Build Coastguard Worker STEP="original revision" && 10*c8dee2aaSAndroid Build Coastguard Worker HB_PREVIOUS_REV=$(git grep "${HB_GIT_REPO}" HEAD~1 -- DEPS | sed 's!.*'${HB_GIT_REPO}'@\([[:xdigit:]]\{40\}\).*!\1!') 11*c8dee2aaSAndroid Build Coastguard Worker} 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Workernextrev() { 14*c8dee2aaSAndroid Build Coastguard Worker STEP="next revision" && 15*c8dee2aaSAndroid Build Coastguard Worker git -C ${HB_GIT_DIR} fetch && 16*c8dee2aaSAndroid Build Coastguard Worker HB_NEXT_REV=$(git -C ${HB_GIT_DIR} rev-parse ${HB_GIT_REF}) 17*c8dee2aaSAndroid Build Coastguard Worker} 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Workerrolldeps() { 20*c8dee2aaSAndroid Build Coastguard Worker STEP="roll-deps" && 21*c8dee2aaSAndroid Build Coastguard Worker sed -i'' -e "s!${HB_GIT_REPO}@${HB_PREVIOUS_REV}!${HB_GIT_REPO}@${HB_NEXT_REV}!" DEPS && 22*c8dee2aaSAndroid Build Coastguard Worker tools/git-sync-deps && 23*c8dee2aaSAndroid Build Coastguard Worker git add DEPS 24*c8dee2aaSAndroid Build Coastguard Worker} 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Workerrollbazel() { 27*c8dee2aaSAndroid Build Coastguard Worker STEP="roll-bazel" && 28*c8dee2aaSAndroid Build Coastguard Worker sed -i'' -e "s!commit = \"${HB_PREVIOUS_REV}\",!commit = \"${HB_NEXT_REV}\",!" bazel/deps.bzl && 29*c8dee2aaSAndroid Build Coastguard Worker git add bazel/deps.bzl 30*c8dee2aaSAndroid Build Coastguard Worker} 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Workercheck_all_files_are_categorized() { 33*c8dee2aaSAndroid Build Coastguard Worker #for each file name in ${HB_GIT_DIR}/src/hb-*.{cc,h,hh} 34*c8dee2aaSAndroid Build Coastguard Worker # if the file name is not present in BUILD.gn 35*c8dee2aaSAndroid Build Coastguard Worker # should be added to BUILD.gn (in 'unused_sources' if unwanted) 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker #for each file name \"src/.*\" in BUILD.gn 38*c8dee2aaSAndroid Build Coastguard Worker # if the file name does not exist 39*c8dee2aaSAndroid Build Coastguard Worker # should be removed from BUILD.gn 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker STEP="Updating BUILD.gn" && 42*c8dee2aaSAndroid Build Coastguard Worker HB_BUILD_DIR_REL=$(realpath --relative-to=${HB_GIT_DIR} ${HB_BUILD_DIR}) 43*c8dee2aaSAndroid Build Coastguard Worker ( # Create subshell for IFS, CDPATH, and cd. 44*c8dee2aaSAndroid Build Coastguard Worker # This implementation doesn't handle '"' or '\n' in file names. 45*c8dee2aaSAndroid Build Coastguard Worker IFS=$'\n' && 46*c8dee2aaSAndroid Build Coastguard Worker CDPATH= && 47*c8dee2aaSAndroid Build Coastguard Worker cd -- "${HB_GIT_DIR}" && 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker HB_SOURCE_MISSING=false && 50*c8dee2aaSAndroid Build Coastguard Worker find src -type f \( -name "*.cc" -o -name "*.h" -o -name "*.hh" \) | while read HB_SOURCE 51*c8dee2aaSAndroid Build Coastguard Worker do 52*c8dee2aaSAndroid Build Coastguard Worker if ! grep -qF "$HB_SOURCE" ${HB_BUILD_DIR_REL}/BUILD.gn; then 53*c8dee2aaSAndroid Build Coastguard Worker if ! ${HB_SOURCE_MISSING}; then 54*c8dee2aaSAndroid Build Coastguard Worker echo "Is in src/*.{cc,h,hh} but not in BUILD.gn:" 55*c8dee2aaSAndroid Build Coastguard Worker HB_SOURCE_MISSING=true 56*c8dee2aaSAndroid Build Coastguard Worker fi 57*c8dee2aaSAndroid Build Coastguard Worker echo " \"\$_${HB_SOURCE}\"," 58*c8dee2aaSAndroid Build Coastguard Worker fi 59*c8dee2aaSAndroid Build Coastguard Worker done && 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker GN_SOURCE_MISSING=false && 62*c8dee2aaSAndroid Build Coastguard Worker grep -oE "\"\\\$_src/[^\"]+\"" ${HB_BUILD_DIR_REL}/BUILD.gn | sed 's/^...\(.*\).$/\1/' | while read GN_SOURCE 63*c8dee2aaSAndroid Build Coastguard Worker do 64*c8dee2aaSAndroid Build Coastguard Worker if [ ! -f "${GN_SOURCE}" ]; then 65*c8dee2aaSAndroid Build Coastguard Worker if ! ${GN_SOURCE_MISSING}; then 66*c8dee2aaSAndroid Build Coastguard Worker echo "Is referenced in BUILD.gn but does not exist:" && 67*c8dee2aaSAndroid Build Coastguard Worker GN_SOURCE_MISSING=true 68*c8dee2aaSAndroid Build Coastguard Worker fi 69*c8dee2aaSAndroid Build Coastguard Worker echo "\"${GN_SOURCE}\"" 70*c8dee2aaSAndroid Build Coastguard Worker fi 71*c8dee2aaSAndroid Build Coastguard Worker done && 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker GN_SOURCE_DUPLICATES=$(sort ${HB_BUILD_DIR_REL}/BUILD.gn | uniq -d | grep -oE "\"\\\$_src/[^\"]+\"") 74*c8dee2aaSAndroid Build Coastguard Worker if [ -n "${GN_SOURCE_DUPLICATES}" ]; then 75*c8dee2aaSAndroid Build Coastguard Worker echo "Is listed more than once in BUILD.gn:" && 76*c8dee2aaSAndroid Build Coastguard Worker echo ${GN_SOURCE_DUPLICATES} 77*c8dee2aaSAndroid Build Coastguard Worker fi 78*c8dee2aaSAndroid Build Coastguard Worker ) 79*c8dee2aaSAndroid Build Coastguard Worker} 80*c8dee2aaSAndroid Build Coastguard Worker 81*c8dee2aaSAndroid Build Coastguard Workercommit() { 82*c8dee2aaSAndroid Build Coastguard Worker STEP="commit" && 83*c8dee2aaSAndroid Build Coastguard Worker HB_PREVIOUS_REV_SHORT=$(expr substr "${HB_PREVIOUS_REV}" 1 8) && 84*c8dee2aaSAndroid Build Coastguard Worker HB_NEXT_REV_SHORT=$(expr substr "${HB_NEXT_REV}" 1 8) && 85*c8dee2aaSAndroid Build Coastguard Worker HB_COMMIT_COUNT=$(git -C ${HB_GIT_DIR} rev-list --count ${HB_PREVIOUS_REV}..${HB_NEXT_REV}) && 86*c8dee2aaSAndroid Build Coastguard Worker git commit -m"Roll HarfBuzz from ${HB_PREVIOUS_REV_SHORT} to ${HB_NEXT_REV_SHORT} (${HB_COMMIT_COUNT} commits) 87*c8dee2aaSAndroid Build Coastguard Worker 88*c8dee2aaSAndroid Build Coastguard Worker${HB_GIT_REPO}/+log/${HB_PREVIOUS_REV}..${HB_NEXT_REV} 89*c8dee2aaSAndroid Build Coastguard Worker 90*c8dee2aaSAndroid Build Coastguard WorkerDisable: treat-URL-as-trailer" 91*c8dee2aaSAndroid Build Coastguard Worker} 92*c8dee2aaSAndroid Build Coastguard Worker 93*c8dee2aaSAndroid Build Coastguard Workerpreviousrev && 94*c8dee2aaSAndroid Build Coastguard Workernextrev && 95*c8dee2aaSAndroid Build Coastguard Workerrolldeps "$@" && 96*c8dee2aaSAndroid Build Coastguard Workerrollbazel && 97*c8dee2aaSAndroid Build Coastguard Workercheck_all_files_are_categorized && 98*c8dee2aaSAndroid Build Coastguard Workercommit && 99*c8dee2aaSAndroid Build Coastguard Workertrue || { echo "Failed step ${STEP}"; exit 1; } 100