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