@@ -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
124140readonly generator_package_directory=" $output_base /rules_xcodeproj.noindex/%generator_package_name%"
125141
126142mkdir -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"
138159WORKSPACE_DIRECTORY = "$BUILD_WORKSPACE_DIRECTORY "
139160EOF
140161
162+ replace_if_changed " $defs_bzl_tmp " " $generator_package_directory /defs.bzl"
163+
141164installer_inputs_dir=$( mktemp -d)
142165readonly installer_inputs_dir
143166trap ' rm -r "$installer_inputs_dir"' EXIT
0 commit comments