roll-harfbuzz.sh 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #!/bin/bash
  2. rolldeps() {
  3. STEP="roll-deps" &&
  4. REVIEWERS=$(grep -E -v "^$|#" third_party/harfbuzz-ng/OWNERS | paste -s -d, -) &&
  5. roll-dep -r "${REVIEWERS}" --roll-to origin/upstream/main "$@" src/third_party/harfbuzz-ng/src/
  6. }
  7. updatereadme() {
  8. STEP="update README.chromium" &&
  9. HB_VERSION=$(git -C third_party/harfbuzz-ng/src/ describe --long) &&
  10. HB_COMMIT=$(git -C third_party/harfbuzz-ng/src/ rev-parse HEAD) &&
  11. HB_DATE=$(date "+%Y%m%d")
  12. HB_CPE_VERSION=$(echo ${HB_VERSION} | sed -r -e's/^([0-9]+)\.([0-9]+)\.([0-9]+)-[0-9]+-g[0-9a-f]+$/\1.\2.\3/') &&
  13. [ ${HB_VERSION} != ${HB_CPE_VERSION} ] &&
  14. sed -i'' -e "s/^Version: .*\$/Version: ${HB_VERSION%-*}/" third_party/harfbuzz-ng/README.chromium &&
  15. sed -i'' -e "s@^CPEPrefix: cpe:/a:harfbuzz_project:harfbuzz:.*\$@CPEPrefix: cpe:/a:harfbuzz_project:harfbuzz:${HB_CPE_VERSION}@" third_party/harfbuzz-ng/README.chromium &&
  16. sed -i'' -e "s/^Revision: .*\$/Revision: ${HB_COMMIT}/" third_party/harfbuzz-ng/README.chromium &&
  17. sed -i'' -e "s/^Date: .*\$/Date: ${HB_DATE}/" third_party/harfbuzz-ng/README.chromium &&
  18. git add third_party/harfbuzz-ng/README.chromium
  19. }
  20. previousrev() {
  21. STEP="original revision" &&
  22. PREVIOUS_HARFBUZZ_REV=$(git grep "'harfbuzz_revision':" HEAD~1 -- DEPS | grep -Eho "[0-9a-fA-F]{32}")
  23. }
  24. check_added_deleted_files() {
  25. previousrev &&
  26. STEP="Check for added or deleted files since last HarfBuzz revision" &&
  27. ADDED_FILES=$(git -C third_party/harfbuzz-ng/src/ diff --diff-filter=A --name-only ${PREVIOUS_HARFBUZZ_REV} -- src/ | paste -s -d, -) &&
  28. DELETED_FILES=$(git -C third_party/harfbuzz-ng/src/ diff --diff-filter=D --name-only ${PREVIOUS_HARFBUZZ_REV} -- src/ | paste -s -d, -) &&
  29. RENAMED_FILES=$(git -C third_party/harfbuzz-ng/src/ diff --diff-filter=R --name-only ${PREVIOUS_HARFBUZZ_REV} -- src/ | paste -s -d, -) &&
  30. if [ -n "$ADDED_FILES" ]; then echo "Added files detected: " $ADDED_FILES; fi &&
  31. if [ -n "$DELETED_FILES" ]; then echo "Deleted files detected" $DELETED_FILES; fi &&
  32. if [ -n "$RENAMED_FILES" ]; then echo "Renamed files detected" $RENAMED_FILES; fi &&
  33. if [ -n "$ADDED_FILES" ] || [ -n "$DELETED_FILES" ] || [ -n "$RENAMED_FILES" ]; then echo -e "\nPlease update src/third_party/harfbuzz-ng/BUILD.gn before continuing."; fi
  34. }
  35. check_all_files_are_categorized() {
  36. #for each file name in src/src/hb-*.{cc,h,hh}
  37. # if the file name is not present in BUILD.gn
  38. # should be added to BUILD.gn (in 'unused_sources' if unwanted)
  39. #for each file name \"src/src/.*\" in BUILD.gn
  40. # if the file name does not exist
  41. # should be removed from BUILD.gn
  42. STEP="Updating BUILD.gn" &&
  43. ( # Create subshell for IFS, CDPATH, and cd.
  44. # This implementation doesn't handle '"' or '\n' in file names.
  45. IFS=$'\n' &&
  46. CDPATH= && cd -- "$(dirname -- "$0")" &&
  47. HB_SOURCE_MISSING=false &&
  48. find src/src -type f \( -name "hb-*.cc" -o -name "hb-*.h" -o -name "hb-*.hh" \) | while read HB_SOURCE
  49. do
  50. if ! grep -qF "$HB_SOURCE" BUILD.gn; then
  51. if ! ${HB_SOURCE_MISSING}; then
  52. echo "Is in src/src/hb-*.{cc,h,hh} but not in BUILD.gn:"
  53. HB_SOURCE_MISSING=true
  54. fi
  55. echo " \"$HB_SOURCE\","
  56. fi
  57. done &&
  58. GN_SOURCE_MISSING=false
  59. grep -oE "\"src/src/[^\"]+\"" BUILD.gn | sed 's/^.\(.*\).$/\1/' | while read GN_SOURCE
  60. do
  61. if [ ! -f "$GN_SOURCE" ]; then
  62. if ! ${GN_SOURCE_MISSING}; then
  63. echo "Is referenced in BUILD.gn but does not exist:" &&
  64. GN_SOURCE_MISSING=true
  65. fi
  66. echo "\"$GN_SOURCE\""
  67. fi
  68. done
  69. )
  70. }
  71. commit() {
  72. STEP="commit" &&
  73. git commit --quiet --amend --no-edit
  74. }
  75. rolldeps "$@" &&
  76. updatereadme &&
  77. check_added_deleted_files &&
  78. check_all_files_are_categorized &&
  79. commit ||
  80. { echo "Failed step ${STEP}"; exit 1; }