@@ -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
101119def _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