@@ -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
124137readonly generator_package_directory=" $output_base /rules_xcodeproj.noindex/%generator_package_name%"
125138
126139mkdir -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"
138156WORKSPACE_DIRECTORY = "$BUILD_WORKSPACE_DIRECTORY "
139157EOF
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+
141165installer_inputs_dir=$( mktemp -d)
142166readonly installer_inputs_dir
143- trap ' rm -r "$installer_inputs_dir"' EXIT
144167
145168bazelrcs=(
146169 --noworkspace_rc
0 commit comments