Fixed keyboard / input issues with resizing.
This commit is contained in:
@@ -776,6 +776,7 @@ def _stage_and_install_release(
|
||||
raise LauncherUpdateError(
|
||||
f"launcher release destination is not a directory: {destination}"
|
||||
)
|
||||
_validate_release_directory(destination)
|
||||
if _tree_digest(destination) != _tree_digest(staging):
|
||||
raise LauncherUpdateError(
|
||||
f"launcher release {manifest.version} already exists with different contents"
|
||||
@@ -916,6 +917,16 @@ def _validate_release_directory(release: Path) -> str:
|
||||
):
|
||||
if not (release / required).is_file():
|
||||
raise LauncherUpdateError(f"launcher release is missing {required}")
|
||||
bundled_gamescope = (
|
||||
release
|
||||
/ "ptlinux/native/gamescope-3.16.20-ubuntu26.04-amd64"
|
||||
)
|
||||
if bundled_gamescope.exists():
|
||||
mode = bundled_gamescope.stat().st_mode
|
||||
if not stat.S_ISREG(mode) or not mode & 0o111:
|
||||
raise LauncherUpdateError(
|
||||
"launcher release contains a non-executable Gamescope compatibility binary"
|
||||
)
|
||||
return version
|
||||
|
||||
|
||||
@@ -1019,15 +1030,20 @@ def _archive_matches(path: Path, manifest: UpdateManifest) -> bool:
|
||||
|
||||
def _tree_digest(root: Path) -> str:
|
||||
digest = hashlib.sha256()
|
||||
root_mode = root.stat().st_mode
|
||||
digest.update(b"R\x00" + str(root_mode & 0o777).encode("ascii") + b"\x00")
|
||||
for item in sorted(root.rglob("*"), key=lambda value: value.relative_to(root).as_posix()):
|
||||
relative = item.relative_to(root).as_posix().encode("utf-8")
|
||||
if item.is_symlink():
|
||||
raise LauncherUpdateError(f"launcher release contains a symbolic link: {item}")
|
||||
if item.is_dir():
|
||||
digest.update(b"D\x00" + relative + b"\x00")
|
||||
elif item.is_file():
|
||||
state = item.stat()
|
||||
mode = str(state.st_mode & 0o777).encode("ascii")
|
||||
if stat.S_ISDIR(state.st_mode):
|
||||
digest.update(b"D\x00" + relative + b"\x00" + mode + b"\x00")
|
||||
elif stat.S_ISREG(state.st_mode):
|
||||
digest.update(b"F\x00" + relative + b"\x00")
|
||||
digest.update(str(item.stat().st_size).encode("ascii") + b"\x00")
|
||||
digest.update(mode + b"\x00")
|
||||
digest.update(str(state.st_size).encode("ascii") + b"\x00")
|
||||
with item.open("rb") as handle:
|
||||
for chunk in iter(lambda: handle.read(READ_SIZE), b""):
|
||||
digest.update(chunk)
|
||||
|
||||
Reference in New Issue
Block a user