@@ -55,15 +55,10 @@ def fetch_release(tag, tarball_dir, *, org='python', verbose=False):
5555
5656
5757def extract_tarball (externals_dir , tarball_path , tag ):
58- # Extract to externals_dir and return the path to the first top-level directory
58+ output_path = externals_dir / tag
5959 with tarfile .open (tarball_path ) as tf :
60- # Get the first top-level directory name from the tarball
61- members = tf .getmembers ()
62- if not members :
63- raise ValueError (f"Tarball { tarball_path } is empty" )
64- top_level_dir = members [0 ].name .split ('/' )[0 ]
6560 tf .extractall (os .fspath (externals_dir ))
66- return externals_dir / top_level_dir
61+ return output_path
6762
6863
6964def extract_zip (externals_dir , zip_path ):
@@ -121,21 +116,23 @@ def main():
121116 verbose = args .verbose ,
122117 )
123118 extracted = extract_zip (args .externals_dir , zip_path )
124- for wait in [1 , 2 , 3 , 5 , 8 , 0 ]:
125- try :
126- extracted .replace (final_name )
127- break
128- except PermissionError as ex :
129- retry = f" Retrying in { wait } s..." if wait else ""
130- print (f"Encountered permission error '{ ex } '.{ retry } " , file = sys .stderr )
131- time .sleep (wait )
132- else :
133- print (
134- f"ERROR: Failed to extract { final_name } ." ,
135- "You may need to restart your build" ,
136- file = sys .stderr ,
137- )
138- sys .exit (1 )
119+
120+ if extracted != final_name :
121+ for wait in [1 , 2 , 3 , 5 , 8 , 0 ]:
122+ try :
123+ extracted .replace (final_name )
124+ break
125+ except PermissionError as ex :
126+ retry = f" Retrying in { wait } s..." if wait else ""
127+ print (f"Encountered permission error '{ ex } '.{ retry } " , file = sys .stderr )
128+ time .sleep (wait )
129+ else :
130+ print (
131+ f"ERROR: Failed to rename { extracted } to { final_name } ." ,
132+ "You may need to restart your build" ,
133+ file = sys .stderr ,
134+ )
135+ sys .exit (1 )
139136
140137
141138if __name__ == '__main__' :
0 commit comments