From 47cb3ab3f6825d65ba5f0dc4d77021b9a7a0d8f5 Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Fri, 1 Jul 2022 13:40:42 -0700 Subject: [PATCH] bacloud workspace functionality --- .efrocachemap | 62 +++++++++---------- .idea/dictionaries/ericf.xml | 4 ++ CHANGELOG.md | 3 +- .../.idea/dictionaries/ericf.xml | 4 ++ src/ballistica/ballistica.cc | 2 +- tools/bacommon/bacloud.py | 2 +- tools/bacommon/transfer.py | 23 +++++-- tools/batools/build.py | 4 +- tools/efro/rpc.py | 2 +- tools/efro/util.py | 4 +- tools/efrotools/xcode.py | 2 +- 11 files changed, 69 insertions(+), 43 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 0fd7e7b8..a1eef795 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -944,11 +944,11 @@ "assets/build/ba_data/models/zoeUpperArm.bob": "https://files.ballistica.net/cache/ba1/99/38/b7694cae0804260eeb337aa1676a", "assets/build/ba_data/models/zoeUpperLeg.bob": "https://files.ballistica.net/cache/ba1/83/4f/28b2202d0109fa93272c0b09fa2d", "assets/build/ba_data/python-site-packages/_yaml/__init__.py": "https://files.ballistica.net/cache/ba1/0d/45/65ba92f51d411dcffac8835b6130", - "assets/build/ba_data/python-site-packages/certifi/__init__.py": "https://files.ballistica.net/cache/ba1/6d/50/5ccd19e3e711e761aaad65b6e9c7", + "assets/build/ba_data/python-site-packages/certifi/__init__.py": "https://files.ballistica.net/cache/ba1/ca/90/4cf111df6bafc9735f6d2a05d6f2", "assets/build/ba_data/python-site-packages/certifi/__main__.py": "https://files.ballistica.net/cache/ba1/b2/bb/d7d8216212bcf66cdc3067700fb7", - "assets/build/ba_data/python-site-packages/certifi/cacert.pem": "https://files.ballistica.net/cache/ba1/f3/72/0988233f002061ec2bddbcdb0ece", + "assets/build/ba_data/python-site-packages/certifi/cacert.pem": "https://files.ballistica.net/cache/ba1/c9/f9/e2d0dd61a7f4e36a3309a3981d07", "assets/build/ba_data/python-site-packages/certifi/core.py": "https://files.ballistica.net/cache/ba1/8a/01/33e774b2ed89a56756f32d2f3bef", - "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/b6/df/c941d69b4a09ff4650b3780cb423", + "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/a5/c3/66c408bfad73af8644f507d8ee17", "assets/build/ba_data/python-site-packages/yaml/__init__.py": "https://files.ballistica.net/cache/ba1/e5/47/17715ca7620f3b9749558b9dcb2d", "assets/build/ba_data/python-site-packages/yaml/composer.py": "https://files.ballistica.net/cache/ba1/3e/aa/d7fcfc4707ad19a6964d72654b82", "assets/build/ba_data/python-site-packages/yaml/constructor.py": "https://files.ballistica.net/cache/ba1/f4/29/cd8c7f5a2296d8f1715ad49b5797", @@ -3992,26 +3992,26 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/8c/d5/fba79229deede06e5b031a87157f", - "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/54/2b/673fa74014cf61159cb54c1108b2", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/17/53/abb7da95eae90b11633c63393818", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/57/aa/75c12cfcd4e3808816ba13209ed1", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c7/78/e6c34d274e0fe86c5c353e020443", - "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/94/15/df389e478c6ed7e882eb0d5256b9", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b4/91/12712fd256f857dc495463946657", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/17/e0/eae88b03b5633ff79c3f6b016c4b", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/82/df/f255e2b59b9088d55b035115e44b", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/d1/30/d2dbc28b610f8b95ef9b3c3ff7c9", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ab/dc/8aff10d5b007669a786605682259", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e8/86/4c4ca5e324176f2efe1e8fa1b430", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/9b/2b/4fea397239bc255bee521eb1dbb0", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/59/df/34794ec6cef67f9c62d120b1eec0", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c9/0b/cfbfa79dc9b9647734376d9dcd20", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/14/e6/bbfd8659960b2986cb9610d31d6a", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/b5/96/80efe4c008a59cace8ff8ccdd3bc", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/31/47/ec287452c4a01db5491e89c051d0", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/57/84/c6257839b104458099b183b24afd", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/77/cb/d10b854cfb3dc39f1387563888c2", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/14/32/34006cd68ca39d27add8c36839a9", + "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/f9/27/943498c90fd48490581721549831", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/99/ee/a7e516ce3d295c32a9fae1f61837", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/33/1c/c84d7e2f9108787614e8fa47b178", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/66/ca/89977fb3b87de266a9da81655879", + "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/50/ed/fa670d5646074507df2bd11cc9f3", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5d/e1/7dde73d49d729d4ad722d7042821", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/3a/57/a994445b5ba27e8b21df9218f05f", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/3b/db/742462576b3e78cc42cbe8c15b4d", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/98/52/3dd887570176346b2b0a9c40658e", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ad/26/9bc36871955e6bafc5a5c6f21e74", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5e/94/f021148e84ed3ba2997c51c701bf", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/2b/11/63ecf6112d1a3ea71ee31c192d32", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/ae/5a/bc6c4c10a64fb230edb1d16ec0e7", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/76/ce/ba8b95c2ea1fbef5ee6fc22fc421", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/bf/b3/6b576d8587719ec0f9dcdc851613", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/a6/25/6c769b43530cc0f5870fde6b01f4", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/4f/b2/915fa6ee32e67839fdab20b20e9f", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/54/a0/02d658b28cee638eb2587e5800af", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/e7/56/3aa98841dab173ddfe3e4c7dd19e", "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3f/60/5fb1cb5bd1ee656517914df2eb26", "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/95/92/1bac3bcac3e1f71417b7ff053b52", "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/54/55/b16bb20de7c3ab30311e73707e17", @@ -4028,14 +4028,14 @@ "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bc/c0/1230a5a3ff3786fc335b57800324", "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b5/7f/0e2c1cf8683876727192587148ac", "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fe/04/375a70cb1510e2ec904a8d413a84", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/95/fd/76e14f54aa05b9893d7e51a9b72f", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/5f/2a/3f294394d9b3cac746e72d12371a", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/18/12/6ce38decdc15438730d6599e1205", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/cf/1e/cfc52166831c2845b52c3fdfe97e", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/8a/1e/496af892e73099ad8d019f48c0d6", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/94/be/26c915da46e21c50c266e5067fab", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/a4/e4/58fbe24e57b0cd7ccfc89b728c9a", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/83/20/3576abd41776af09082ebc4e798c", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/09/77/21bbba5f4a88b3534e133dc156d5", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/72/95/fc9be2f3b29b4bcc19079269d4b3", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/19/d8/d2728c0e48b220b7c20e2690ecae", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/07/d6/d4305dab6a066c0a1459efcec85e", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/75/26/dc45c1c15b7727a013fd98ce1796", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/ee/39/9498eb5c1103b27df3454b52ba98", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/61/b1/3ab8780ac812d4cdedf19f504aaa", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/43/90/175c959c383fe983a614f92b6dec", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/6e/6f/004b696e9a13b083069374e4bb6a", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/d3/db/e73d4dcf1280d5f677c3cf8b47c3" } \ No newline at end of file diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index 7cd468d9..10dd41b6 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -822,6 +822,7 @@ fdout fecfc feedparser + fentry ffaeff ffap ffbbdf @@ -1047,6 +1048,7 @@ gname gnode goles + goneplug goodlist googleplaytab googlevr @@ -1225,6 +1227,7 @@ isysroot itms itmsp + itsre itunes itunesconnectutils ival @@ -1250,6 +1253,7 @@ jsonstrbase jsontools jsonutils + juleskie kbclass kbytecount keepalive diff --git a/CHANGELOG.md b/CHANGELOG.md index e9aa5b7e..05a8793f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### 1.7.3 (20623, 2022-06-30) +### 1.7.3 (20627, 2022-07-01) - Fixed an issue with King of the Hill flag regions not working when players entered them (Thanks itsre3!) - Fixed an issue in Chosen One where the flag resetting on top of a player would not cause them to become the chosen one (Thanks Dliwk!) - Fixed an issue where triple-bomb powerup would not flash before wearing off (Thanks Juleskie!). @@ -6,6 +6,7 @@ - Net-testing window now requires you to be signed in instead of giving an error result in that case. - The app now issues a gentle notice if plugins are removed instead of erroring and continuing to look for them on subsequent launches. This makes things much smoother when switching between workspaces or users. - Added new translation entries for Workspace/Plugin stuff. +- tools/bacloud workspace get/put commands are now functional (wiki page with instructions coming soon). ### 1.7.2 (20620, 2022-06-25) - Minor fixes in some minigames (Thanks Droopy!) diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml index c0cb9fc6..07e928a0 100644 --- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml +++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml @@ -420,6 +420,7 @@ fdirx fdiry fdirz + fentry fenv fesetround ffbbdf @@ -530,6 +531,7 @@ gles glext globalns + goneplug googleplaytab gpgs gqualstr @@ -621,6 +623,7 @@ itemsize itri itsclass + itsre itunes itunesconnectutils ival @@ -638,6 +641,7 @@ jmessage jnames json's + juleskie keepalives kerploople keyanntype diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 8415b93d..45c608fc 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20623; +const int kAppBuildNumber = 20627; const char* kAppVersion = "1.7.3"; // Our standalone globals. diff --git a/tools/bacommon/bacloud.py b/tools/bacommon/bacloud.py index 99c9be3b..5ce38d3c 100644 --- a/tools/bacommon/bacloud.py +++ b/tools/bacommon/bacloud.py @@ -14,7 +14,7 @@ if TYPE_CHECKING: # Version is sent to the master-server with all commands. Can be incremented # if we need to change behavior server-side to go along with client changes. -BACLOUD_VERSION = 6 +BACLOUD_VERSION = 7 @ioprepped diff --git a/tools/bacommon/transfer.py b/tools/bacommon/transfer.py index 03ff6bdb..65042879 100644 --- a/tools/bacommon/transfer.py +++ b/tools/bacommon/transfer.py @@ -5,13 +5,14 @@ from __future__ import annotations import os +from pathlib import Path from dataclasses import dataclass from typing import TYPE_CHECKING, Annotated from efro.dataclassio import ioprepped, IOAttrs if TYPE_CHECKING: - from pathlib import Path + pass @ioprepped @@ -40,15 +41,17 @@ class DirectoryManifest: paths: list[str] = [] if path.is_dir(): - # Build the full list of package-relative paths. + # Build the full list of relative paths. for basename, _dirnames, filenames in os.walk(path): for filename in filenames: fullname = os.path.join(basename, filename) assert fullname.startswith(pathstr) - paths.append(fullname[len(pathstr) + 1:]) + # Make sure we end up with forward slashes no matter + # what the os.* stuff above here was using. + paths.append(Path(fullname[len(pathstr) + 1:]).as_posix()) elif path.exists(): # Just return a single file entry if path is not a dir. - paths.append(pathstr) + paths.append(path.as_posix()) def _get_file_info(filepath: str) -> tuple[str, DirectoryManifestFile]: sha = hashlib.sha256() @@ -70,6 +73,18 @@ class DirectoryManifest: with ThreadPoolExecutor(max_workers=cpus) as executor: return cls(files=dict(executor.map(_get_file_info, paths))) + def validate(self) -> None: + """Log any odd data in the manifest; for debugging.""" + import logging + for fpath, _fentry in self.files.items(): + # We want to be dealing in only forward slashes; make sure + # that's the case (wondering if we'll ever see backslashes + # for escape purposes). + if '\\' in fpath: + logging.exception("Found unusual path in manifest: '%s'.", + fpath) + break # 1 error is enough for now. + @classmethod def get_empty_hash(cls) -> str: """Return the hash for an empty file.""" diff --git a/tools/batools/build.py b/tools/batools/build.py index 63e0ee4a..8d70913b 100644 --- a/tools/batools/build.py +++ b/tools/batools/build.py @@ -38,7 +38,7 @@ class PipRequirement: # installing it. And as far as manually-installed bits, pip itself must # have some way to allow for that, right?... PIP_REQUIREMENTS = [ - PipRequirement(modulename='pylint', minversion=[2, 14, 2]), + PipRequirement(modulename='pylint', minversion=[2, 14, 4]), PipRequirement(modulename='mypy', minversion=[0, 961]), PipRequirement(modulename='yapf', minversion=[0, 32, 0]), PipRequirement(modulename='cpplint', minversion=[1, 6, 0]), @@ -48,7 +48,7 @@ PIP_REQUIREMENTS = [ PipRequirement(modulename='yaml', pipname='PyYAML'), PipRequirement(modulename='requests'), PipRequirement(modulename='pdoc'), - PipRequirement(pipname='typing_extensions', minversion=[4, 2, 0]), + PipRequirement(pipname='typing_extensions', minversion=[4, 3, 0]), PipRequirement(pipname='types-filelock', minversion=[3, 2, 6]), PipRequirement(pipname='types-requests', minversion=[2, 27, 29]), PipRequirement(pipname='types-pytz', minversion=[2021, 3, 8]), diff --git a/tools/efro/rpc.py b/tools/efro/rpc.py index c9e52aeb..1797164c 100644 --- a/tools/efro/rpc.py +++ b/tools/efro/rpc.py @@ -13,8 +13,8 @@ from dataclasses import dataclass from threading import current_thread from typing import TYPE_CHECKING, Annotated -from efro.error import CommunicationError, is_asyncio_streams_network_error from efro.util import assert_never +from efro.error import CommunicationError, is_asyncio_streams_network_error from efro.dataclassio import (dataclass_to_json, dataclass_from_json, ioprepped, IOAttrs) diff --git a/tools/efro/util.py b/tools/efro/util.py index cc4342ab..d9d3634a 100644 --- a/tools/efro/util.py +++ b/tools/efro/util.py @@ -637,9 +637,11 @@ def compact_id(num: int) -> str: 'abcdefghijklmnopqrstuvwxyz') +# NOTE: Even though this is available as part of typing_extensions, keeping +# it in here for now so we don't require typing_extensions as a dependency. +# Once 3.11 rolls around we can kill this and use typing.assert_never. def assert_never(value: NoReturn) -> NoReturn: """Trick for checking exhaustive handling of Enums, etc. - See https://github.com/python/typing/issues/735 """ assert False, f'Unhandled value: {value} ({type(value).__name__})' diff --git a/tools/efrotools/xcode.py b/tools/efrotools/xcode.py index 70f0e7b8..21334a23 100644 --- a/tools/efrotools/xcode.py +++ b/tools/efrotools/xcode.py @@ -13,9 +13,9 @@ import shlex from enum import Enum from typing import TYPE_CHECKING +from efro.util import assert_never from efro.terminal import Clr from efro.error import CleanError -from efro.util import assert_never if TYPE_CHECKING: from typing import Any