• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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