mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-11-09 11:33:47 -06:00
fix: name release assets as GitHub serves them
This commit is contained in:
1 parent
a08827257d
commit
dbd47886ce
4 files changed
+35
-4
No files matched your search
@@ -76,7 +76,7 @@ import slot as slot_mod
|
|||||||
import slots
|
import slots
|
||||||
import split_pack
|
import split_pack
|
||||||
from deterministic_zip import _FIXED_DATE_TIME, rebuild_zip_deterministic
|
from deterministic_zip import _FIXED_DATE_TIME, rebuild_zip_deterministic
|
||||||
from largefiles import asset_name, load_registered_paths
|
from largefiles import asset_name, load_registered_paths, published_asset_name
|
||||||
from nativemode import (
|
from nativemode import (
|
||||||
digest_algorithm,
|
digest_algorithm,
|
||||||
hash_mismatch_excludes_file,
|
hash_mismatch_excludes_file,
|
||||||
@@ -3226,8 +3226,14 @@ def _repo_relative(local_path: str, repo_root: str) -> str:
|
|||||||
|
|
||||||
|
|
||||||
def _release_asset_name(local_path: str, repo_root: str) -> str:
|
def _release_asset_name(local_path: str, repo_root: str) -> str:
|
||||||
"""The large-files asset install.py downloads for a gitignored file."""
|
"""The large-files asset install.py downloads for a gitignored file.
|
||||||
return asset_name(_repo_relative(local_path, repo_root), sorted(_registered(repo_root)))
|
|
||||||
|
The name GitHub serves, not the one uploaded: a space in the path came
|
||||||
|
back as a 404 for an installer asking for it verbatim.
|
||||||
|
"""
|
||||||
|
return published_asset_name(
|
||||||
|
asset_name(_repo_relative(local_path, repo_root), sorted(_registered(repo_root)))
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _get_repo_path(sha1: str, db: dict) -> str:
|
def _get_repo_path(sha1: str, db: dict) -> str:
|
||||||
|
|||||||
@@ -2018,11 +2018,12 @@ def _fetch_url(path: str) -> str:
|
|||||||
LARGE_FILES_RELEASE,
|
LARGE_FILES_RELEASE,
|
||||||
asset_names,
|
asset_names,
|
||||||
load_registered_paths,
|
load_registered_paths,
|
||||||
|
published_asset_name,
|
||||||
)
|
)
|
||||||
|
|
||||||
_RELEASE_ASSET_NAMES = {
|
_RELEASE_ASSET_NAMES = {
|
||||||
registered: f"{REPO_URL}/releases/download/{LARGE_FILES_RELEASE}/"
|
registered: f"{REPO_URL}/releases/download/{LARGE_FILES_RELEASE}/"
|
||||||
+ urllib.parse.quote(name.replace(" ", "."))
|
+ urllib.parse.quote(published_asset_name(name))
|
||||||
for registered, name in asset_names(load_registered_paths()).items()
|
for registered, name in asset_names(load_registered_paths()).items()
|
||||||
}
|
}
|
||||||
return _RELEASE_ASSET_NAMES.get(path) or (
|
return _RELEASE_ASSET_NAMES.get(path) or (
|
||||||
|
|||||||
@@ -88,6 +88,11 @@ def asset_name(path: str, registered: Iterable[str]) -> str:
|
|||||||
return asset_names([*registered, path])[path]
|
return asset_names([*registered, path])[path]
|
||||||
|
|
||||||
|
|
||||||
|
def published_asset_name(name: str) -> str:
|
||||||
|
"""The name GitHub serves an asset under: it publishes a space as a dot."""
|
||||||
|
return name.replace(" ", ".")
|
||||||
|
|
||||||
|
|
||||||
def asset_candidates(name: str, registered: Iterable[str]) -> list[str]:
|
def asset_candidates(name: str, registered: Iterable[str]) -> list[str]:
|
||||||
"""Assets that may hold *name*, a registered path or a bare file name.
|
"""Assets that may hold *name*, a registered path or a bare file name.
|
||||||
|
|
||||||
|
|||||||
@@ -1993,6 +1993,25 @@ class ReleaseAssetCriterion(unittest.TestCase):
|
|||||||
finally:
|
finally:
|
||||||
generate_pack._registered.cache_clear()
|
generate_pack._registered.cache_clear()
|
||||||
|
|
||||||
|
def test_the_manifest_names_the_asset_as_github_serves_it(self):
|
||||||
|
# GitHub publishes a space as a dot; the site linked the dotted
|
||||||
|
# name while the manifest gave install.py the spaced one, a 404.
|
||||||
|
from scripts import generate_pack
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory(dir=TMP_ROOT) as directory:
|
||||||
|
root = self._repo(directory, "bios/MAME/MAME 0.174 Arcade XML.dat")
|
||||||
|
target = Path(root, "bios", "MAME", "MAME 0.174 Arcade XML.dat")
|
||||||
|
target.parent.mkdir(parents=True)
|
||||||
|
target.write_bytes(b"x")
|
||||||
|
generate_pack._registered.cache_clear()
|
||||||
|
try:
|
||||||
|
self.assertEqual(
|
||||||
|
generate_pack._release_asset_name(str(target), root),
|
||||||
|
"MAME.0.174.Arcade.XML.dat",
|
||||||
|
)
|
||||||
|
finally:
|
||||||
|
generate_pack._registered.cache_clear()
|
||||||
|
|
||||||
def test_a_gitignored_file_is_served_by_the_release_whatever_its_size(self):
|
def test_a_gitignored_file_is_served_by_the_release_whatever_its_size(self):
|
||||||
from scripts import generate_pack
|
from scripts import generate_pack
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user