• 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
26check_all_files_are_categorized() {
27  #for each file name in ${HB_GIT_DIR}/src/hb-*.{cc,h,hh}
28  #  if the file name is not present in BUILD.gn
29  #    should be added to BUILD.gn (in 'unused_sources' if unwanted)
30
31  #for each file name \"src/.*\" in BUILD.gn
32  #  if the file name does not exist
33  #    should be removed from BUILD.gn
34
35  STEP="Updating BUILD.gn" &&
36  HB_BUILD_DIR_REL=$(realpath --relative-to=${HB_GIT_DIR} ${HB_BUILD_DIR})
37  ( # Create subshell for IFS, CDPATH, and cd.
38    # This implementation doesn't handle '"' or '\n' in file names.
39    IFS=$'\n' &&
40    CDPATH= &&
41    cd -- "${HB_GIT_DIR}" &&
42
43    HB_SOURCE_MISSING=false &&
44    find src -type f \( -name "*.cc" -o -name "*.h" -o -name "*.hh" \) | while read HB_SOURCE
45    do
46      if ! grep -qF "$HB_SOURCE" ${HB_BUILD_DIR_REL}/BUILD.gn; then
47        if ! ${HB_SOURCE_MISSING}; then
48          echo "Is in src/*.{cc,h,hh} but not in BUILD.gn:"
49          HB_SOURCE_MISSING=true
50        fi
51        echo "      \"\$_${HB_SOURCE}\","
52      fi
53    done &&
54
55    GN_SOURCE_MISSING=false &&
56    grep -oE "\"\\\$_src/[^\"]+\"" ${HB_BUILD_DIR_REL}/BUILD.gn | sed 's/^...\(.*\).$/\1/' | while read GN_SOURCE
57    do
58      if [ ! -f "${GN_SOURCE}" ]; then
59        if ! ${GN_SOURCE_MISSING}; then
60          echo "Is referenced in BUILD.gn but does not exist:" &&
61          GN_SOURCE_MISSING=true
62        fi
63        echo "\"${GN_SOURCE}\""
64      fi
65    done &&
66
67    GN_SOURCE_DUPLICATES=$(sort ${HB_BUILD_DIR_REL}/BUILD.gn | uniq -d | grep -oE "\"\\\$_src/[^\"]+\"")
68    if [ ! -z ${GN_SOURCE_DUPLICATES} ]; then
69      echo "Is listed more than once in BUILD.gn:" &&
70      echo ${GN_SOURCE_DUPLICATES}
71    fi
72  )
73}
74
75commit() {
76  STEP="commit" &&
77  HB_PREVIOUS_REV_SHORT=$(expr substr "${HB_PREVIOUS_REV}" 1 8) &&
78  HB_NEXT_REV_SHORT=$(expr substr "${HB_NEXT_REV}" 1 8) &&
79  HB_COMMIT_COUNT=$(git -C ${HB_GIT_DIR} rev-list --count ${HB_PREVIOUS_REV}..${HB_NEXT_REV}) &&
80  git commit -m"Roll HarfBuzz from ${HB_PREVIOUS_REV_SHORT} to ${HB_NEXT_REV_SHORT} (${HB_COMMIT_COUNT} commits)
81
82${HB_GIT_REPO}/+log/${HB_PREVIOUS_REV}..${HB_NEXT_REV}
83
84Disable: treat-URL-as-trailer"
85}
86
87previousrev &&
88nextrev &&
89rolldeps "$@" &&
90check_all_files_are_categorized &&
91commit &&
92true || { echo "Failed step ${STEP}"; exit 1; }
93