@@ -49,17 +49,34 @@ def upload_list(stack_name, dist_dir):
4949
5050
5151def symlink (stack_name , version ):
52+
53+ def get_system_version (obj_key ):
54+ _ , system , system_version = obj_key .strip (".tar.gz" ).rsplit ("-" , 2 )
55+ return f"{ system } -{ system_version } "
56+
5257 object_list = [
5358 obj .key for obj in bucket .list_objects (
5459 f"stacks/{ stack_name } /{ stack_name } -{ version } ." ).object_list
5560 ]
5661 prefix = f"stacks/{ stack_name } /{ stack_name } -"
57- version_list = sorted (
58- [obj .replace (prefix , "" ).split ("-" , 1 )[0 ] for obj in object_list ],
59- key = parse ,
60- reverse = True ,
61- )
62+ # Build a map of system-version to object keys
63+ version_map = {}
64+ for obj in object_list :
65+ system = get_system_version (obj )
66+ if system not in version_map :
67+ version_map [system ] = [obj ]
68+ else :
69+ version_map [system ].append (obj )
70+ for key , value in version_map .items ():
71+ version_list = sorted (
72+ [obj .replace (prefix , "" ).split ("-" , 1 )[0 ] for obj in value ],
73+ key = parse ,
74+ reverse = True ,
75+ )
76+ version_map [key ] = version_list
77+
6278 for obj in object_list :
79+ version_list = version_map [get_system_version (obj )]
6380 if obj .startswith (f"{ prefix } { version_list [0 ]} -" ):
6481 symlink = re .sub (r"%s.([0-9]\.?){1,}" % f"{ prefix } { version } " , f"{ prefix } { version } " , obj )
6582 bucket .put_symlink (obj , symlink )
0 commit comments