Skip to content

Commit 22dc989

Browse files
Avoid writing files in rules_xcodeproj_generated if content hasn’t changed (#3313)
Reduces loading and analysis churn on hot Bazel servers. --------- Signed-off-by: Brentley Jones <github@brentleyjones.com>
1 parent 3f07d2e commit 22dc989

1 file changed

Lines changed: 29 additions & 6 deletions

File tree

xcodeproj/internal/templates/runner.sh

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -120,16 +120,34 @@ readonly output_base="${execution_root%/*/*}"
120120
# Set bazel env
121121
%collect_bazel_env%
122122

123+
cleanup() {
124+
rm -f "${defs_bzl_tmp:-}"
125+
if [[ -n "${installer_inputs_dir:-}" ]]; then
126+
rm -r "$installer_inputs_dir"
127+
fi
128+
}
129+
trap cleanup EXIT
130+
131+
# Avoid touching files in `@rules_xcodeproj_generated` unless their contents
132+
# actually changed. Rewriting them on every invocation invalidates the
133+
# generated package and forces Bazel to redo package analysis on warm runs.
134+
# `BUILD` can be compared directly because it is copied verbatim.
135+
# `defs.bzl` is derived content, so compare its final contents before copying.
123136
# Create files for the generator target
124137
readonly generator_package_directory="$output_base/rules_xcodeproj.noindex/%generator_package_name%"
125138

126139
mkdir -p "$generator_package_directory"
127-
cp "$generator_build_file" "$generator_package_directory/BUILD"
128-
chmod u+w "$generator_package_directory/BUILD"
129-
cp "$generator_defs_bzl" "$generator_package_directory/defs.bzl"
130-
chmod u+w "$generator_package_directory/defs.bzl"
140+
if [[ ! -f "$generator_package_directory/BUILD" ]] || \
141+
! cmp -s "$generator_build_file" "$generator_package_directory/BUILD"
142+
then
143+
cp "$generator_build_file" "$generator_package_directory/BUILD"
144+
chmod u+w "$generator_package_directory/BUILD"
145+
fi
131146

132-
cat <<EOF >> "$generator_package_directory/defs.bzl"
147+
defs_bzl_tmp="$(mktemp)"
148+
cp "$generator_defs_bzl" "$defs_bzl_tmp"
149+
150+
cat <<EOF >> "$defs_bzl_tmp"
133151
134152
# Constants
135153
@@ -138,9 +156,14 @@ BAZEL_PATH = "$bazel_path"
138156
WORKSPACE_DIRECTORY = "$BUILD_WORKSPACE_DIRECTORY"
139157
EOF
140158

159+
if [[ ! -f "$generator_package_directory/defs.bzl" ]] || ! cmp -s "$defs_bzl_tmp" "$generator_package_directory/defs.bzl"
160+
then
161+
cp "$defs_bzl_tmp" "$generator_package_directory/defs.bzl"
162+
chmod u+w "$generator_package_directory/defs.bzl"
163+
fi
164+
141165
installer_inputs_dir=$(mktemp -d)
142166
readonly installer_inputs_dir
143-
trap 'rm -r "$installer_inputs_dir"' EXIT
144167

145168
bazelrcs=(
146169
--noworkspace_rc

0 commit comments

Comments
 (0)