Skip to content

Commit a682785

Browse files
Fix hanging calculate_output_groups.py (#2660)
1 parent 4491a46 commit a682785

File tree

1 file changed

+28
-22
lines changed

1 file changed

+28
-22
lines changed

xcodeproj/internal/bazel_integration_files/calculate_output_groups.py

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def _wait_for_value(calculate_value, value_name):
5757
return value
5858

5959

60-
def _calculate_build_request_file(
60+
def _get_build_request(
6161
xcode_version,
6262
objroot,
6363
build_request_min_ctime):
@@ -81,40 +81,46 @@ def wait_for_description():
8181
with open(build_description_cache, 'rb') as f:
8282
f.seek(-32, os.SEEK_END)
8383
build_request_id = f.read().decode('ASCII')
84-
return f"{objroot}/XCBuildData/{build_request_id}-buildRequest.json"
8584

86-
def wait_for_xcbuilddata():
85+
build_request_file = (
86+
f"{objroot}/XCBuildData/{build_request_id}-buildRequest.json"
87+
)
88+
def wait_for_build_request():
89+
if os.path.exists(build_request_file):
90+
with open(build_request_file, encoding = "utf-8") as f:
91+
# Parse the build-request.json file
92+
return json.load(f)
93+
return None
94+
95+
return _wait_for_value(
96+
wait_for_build_request,
97+
f"\"{build_request_file}\"",
98+
)
99+
100+
def wait_for_build_request():
87101
xcbuilddata = max(
88102
glob.iglob(f"{objroot}/XCBuildData/*.xcbuilddata"),
89103
key = os.path.getctime,
90104
)
91105
if os.path.getctime(xcbuilddata) >= build_request_min_ctime:
92-
return xcbuilddata
106+
build_request_file = f"{xcbuilddata}/build-request.json"
107+
if os.path.exists(build_request_file):
108+
with open(build_request_file, encoding = "utf-8") as f:
109+
# Parse the build-request.json file
110+
return json.load(f)
93111
return None
94112

95-
xcbuilddata = (
96-
_wait_for_value(wait_for_xcbuilddata, "newest '.xcbuilddata' folder")
113+
return _wait_for_value(
114+
wait_for_build_request,
115+
"newest 'buildRequest.json' file",
97116
)
98-
return f"{xcbuilddata}/build-request.json"
99117

100118

101119
def _calculate_label_and_target_ids(
102-
build_request_file,
120+
build_request,
103121
guid_labels,
104122
guid_target_ids):
105123
try:
106-
# TODO: Remove this existence check after Xcode 14.3 is the minimum
107-
# The first time a certain buildRequest is used, the buildRequest.json
108-
# might not exist yet, so we for it to exist
109-
_wait_for_value(
110-
lambda: os.path.exists(build_request_file),
111-
f"\"{build_request_file}\"",
112-
)
113-
114-
with open(build_request_file, encoding = "utf-8") as f:
115-
# Parse the build-request.json file
116-
build_request = json.load(f)
117-
118124
# Xcode gets "stuck" in the `buildFiles` or `build` command for
119125
# top-level targets, so we can't reliably change commands here. Leaving
120126
# the code in place in case this is fixed in the future, or we want to
@@ -358,7 +364,7 @@ def _main(
358364
prefixes = prefixes_str.split(",")
359365

360366
try:
361-
build_request_file = _calculate_build_request_file(
367+
build_request = _get_build_request(
362368
xcode_version,
363369
objroot,
364370
build_request_min_ctime,
@@ -378,7 +384,7 @@ def _main(
378384
sys.exit(1)
379385

380386
labels_and_target_ids = _calculate_label_and_target_ids(
381-
build_request_file,
387+
build_request,
382388
guid_labels,
383389
guid_target_ids,
384390
)

0 commit comments

Comments
 (0)