Skip to content

Commit 0d4c0c8

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

1 file changed

Lines changed: 28 additions & 5 deletions

File tree

xcodeproj/internal/templates/runner.sh

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

123+
function replace_if_changed() {
124+
local -r _new_file="$1"
125+
local -r _destination="$2"
126+
127+
if [[ -f "$_destination" ]] && cmp -s "$_new_file" "$_destination"; then
128+
rm -f "$_new_file"
129+
return
130+
fi
131+
132+
mv -f "$_new_file" "$_destination"
133+
chmod u+w "$_destination"
134+
}
135+
136+
# Avoid touching files in `@rules_xcodeproj_generated` unless their contents
137+
# actually changed. Rewriting them on every invocation invalidates the
138+
# generated package and forces Bazel to redo package analysis on warm runs.
123139
# Create files for the generator target
124140
readonly generator_package_directory="$output_base/rules_xcodeproj.noindex/%generator_package_name%"
125141

126142
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"
143+
if [[ ! -f "$generator_package_directory/BUILD" ]] || \
144+
! cmp -s "$generator_build_file" "$generator_package_directory/BUILD"
145+
then
146+
cp "$generator_build_file" "$generator_package_directory/BUILD"
147+
chmod u+w "$generator_package_directory/BUILD"
148+
fi
131149

132-
cat <<EOF >> "$generator_package_directory/defs.bzl"
150+
defs_bzl_tmp="$(mktemp "$generator_package_directory/defs.bzl.XXXXXX")"
151+
cp "$generator_defs_bzl" "$defs_bzl_tmp"
152+
153+
cat <<EOF >> "$defs_bzl_tmp"
133154
134155
# Constants
135156
@@ -138,6 +159,8 @@ BAZEL_PATH = "$bazel_path"
138159
WORKSPACE_DIRECTORY = "$BUILD_WORKSPACE_DIRECTORY"
139160
EOF
140161

162+
replace_if_changed "$defs_bzl_tmp" "$generator_package_directory/defs.bzl"
163+
141164
installer_inputs_dir=$(mktemp -d)
142165
readonly installer_inputs_dir
143166
trap 'rm -r "$installer_inputs_dir"' EXIT

0 commit comments

Comments
 (0)