Skip to content

Commit 4f01b4f

Browse files
committed
Replace existing matching entries in the index.
1 parent 27ea9a8 commit 4f01b4f

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

windows-release/merge-and-upload.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
UPLOAD_URL_PREFIX = os.getenv("UPLOAD_URL_PREFIX", "https://www.python.org/ftp/")
1212
UPLOAD_PATH_PREFIX = os.getenv("UPLOAD_PATH_PREFIX", "/srv/www.python.org/ftp/")
13-
INDEX_URL = os.getenv("INDEX_URL", UPLOAD_URL_PREFIX + "python/index.windows.json")
13+
INDEX_URL = os.getenv("INDEX_URL", UPLOAD_URL_PREFIX + "python/index-windows.json")
1414
INDEX_FILE = os.getenv("INDEX_FILE")
1515
# A version will be inserted before the extension later on
1616
MANIFEST_FILE = os.getenv("MANIFEST_FILE")
@@ -190,6 +190,22 @@ def calculate_uploads():
190190
)
191191

192192

193+
def remove_and_insert(index, new_installs):
194+
new = {
195+
(i["id"].casefold(), i["sort-version"].casefold()) for i in new_installs
196+
}
197+
to_remove = [x for x, i in enumerate(index)
198+
if (i["id"].casefold(), i["sort-version"].casefold()) in new]
199+
for i in reversed(to_remove):
200+
del index[i]
201+
index[:0] = new_installs
202+
print("Added", len(new_installs), "entries:")
203+
for i in new_installs:
204+
print("-", i["id"], i["sort-version"])
205+
print("Replaced", len(to_remove), "existing entries")
206+
print()
207+
208+
193209
def hash_packages(uploads):
194210
for i, src, *_ in uploads:
195211
i["hash"] = get_hashes(src)
@@ -243,15 +259,13 @@ def install_sortkey(install):
243259
new_installs = [trim_install(i) for i, *_ in UPLOADS]
244260
validate_new_installs(new_installs)
245261
new_installs = sorted(new_installs, key=install_sortkey)
246-
index["versions"][:0] = new_installs
262+
remove_and_insert(index["versions"], new_installs)
247263

248264
if INDEX_FILE:
249265
INDEX_FILE = Path(INDEX_FILE).absolute()
250266
INDEX_FILE.parent.mkdir(parents=True, exist_ok=True)
251267
with open(INDEX_FILE, "w", encoding="utf-8") as f:
252-
# Include an indent for sanity while testing.
253-
# We should probably remove it later for the size benefits.
254-
json.dump(index, f, indent=1)
268+
json.dump(index, f)
255269

256270
if MANIFEST_FILE:
257271
# Use the sort-version so that the manifest name includes prerelease marks
@@ -266,8 +280,6 @@ def install_sortkey(install):
266280
# far more likely to be read by humans than the index.
267281
json.dump({"versions": new_installs}, f, indent=2)
268282

269-
print("Merged", len(UPLOADS), "entries")
270-
271283

272284
# Upload last to ensure we've got a valid index first
273285
for i, src, dest, sbom, sbom_dest in UPLOADS:

0 commit comments

Comments
 (0)