mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-05 23:13:46 +08:00
Added options for setting config and ba_root paths
This commit is contained in:
parent
6c515672ad
commit
ca5f45f3a2
@ -3932,26 +3932,26 @@
|
|||||||
"assets/build/windows/Win32/ucrtbased.dll": "https://files.ballistica.net/cache/ba1/b5/85/f8b6d0558ddb87267f34254b1450",
|
"assets/build/windows/Win32/ucrtbased.dll": "https://files.ballistica.net/cache/ba1/b5/85/f8b6d0558ddb87267f34254b1450",
|
||||||
"assets/build/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/1c/e1/4a1a2eddda2f4aebd5f8b64ab08e",
|
"assets/build/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/1c/e1/4a1a2eddda2f4aebd5f8b64ab08e",
|
||||||
"assets/build/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/50/8d/bc2600ac9491f1b14d659709451f",
|
"assets/build/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/50/8d/bc2600ac9491f1b14d659709451f",
|
||||||
"build/prefab/full/linux_arm64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/b0/41/1773777bea8220fb532b02207bd8",
|
"build/prefab/full/linux_arm64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/84/a1/420d282610456205a0c7317ef587",
|
||||||
"build/prefab/full/linux_arm64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/7a/aa/7db23036581440bd28d245f7b6b0",
|
"build/prefab/full/linux_arm64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/a9/63/eabb9fe980c4686ff48c62dc3215",
|
||||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e2/ef/7254a413f4bb7618b9d7898d6a7f",
|
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4c/3f/7bc2491bcb678a964043ba7d25dd",
|
||||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/7b/64/71ddea075764913a51b13c331d88",
|
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ee/12/8addc0aa42af13c2e2903b1f2cb1",
|
||||||
"build/prefab/full/linux_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ee/bf/5aa9ef09d3adf56836c0370e587e",
|
"build/prefab/full/linux_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/00/11/ca95947488543f6e9fcb6ff4a122",
|
||||||
"build/prefab/full/linux_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/91/b6/f323561fb316ba15a3f5d7d45858",
|
"build/prefab/full/linux_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/d8/d9/e4f7c8454210a1bedef3416d1768",
|
||||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/bc/a6/88edc1066bc69f967a924e84fc5b",
|
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f7/b9/21faa11f5b965f55e548b6485b2c",
|
||||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/96/b6/2ba6d3b0ef4dff3a0a1e1fb7b5da",
|
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ac/aa/b1641c07d4539f673445467ccef9",
|
||||||
"build/prefab/full/mac_arm64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/4b/af/8a1214609ee5f0d207905e384394",
|
"build/prefab/full/mac_arm64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ac/a3/ff8cbd9b0bae767ad4809360e21a",
|
||||||
"build/prefab/full/mac_arm64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/2a/90/f7532756dd8a21f1a07c1ed12ccc",
|
"build/prefab/full/mac_arm64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/46/ee/4c5599f4b9aef54eff51b7702409",
|
||||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/86/86/a0506a90f1a5845843affb842e09",
|
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/db/ce/aec9518eee7bcd7fdc8ca80b1d76",
|
||||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a3/2b/3127e1a79e6e3aece248ef41ec8c",
|
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d8/dc/6b1c63cb28db2ff64554526d5311",
|
||||||
"build/prefab/full/mac_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ae/31/3542167c07e9abd5f1df07d08181",
|
"build/prefab/full/mac_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a4/fa/8613c74733350c3cd26945823ed0",
|
||||||
"build/prefab/full/mac_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/94/5a/e3b3c60976be78d1728660c638b3",
|
"build/prefab/full/mac_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/10/65/62b7f0eb542a037f54ea486be204",
|
||||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/7a/b2/ca6ad8142f08e81d63d65f52e0ce",
|
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/89/6e/569b32f6c9401b17ceed5327257f",
|
||||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c9/62/4b17a374c663c730e091a1695911",
|
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/99/dc/5a55ebdf3e5541c74a59f68f3f65",
|
||||||
"build/prefab/full/windows_x86/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/75/11/0bbb84a7d2f285e97d5f6e8b8c5e",
|
"build/prefab/full/windows_x86/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/9c/58/1be66154a04eab5f00f6aa92d165",
|
||||||
"build/prefab/full/windows_x86/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/d9/89/1d495c48545be16152915c5933ab",
|
"build/prefab/full/windows_x86/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/bd/89/b6210c67baf254ab314317973b5e",
|
||||||
"build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/77/71/570b0118c6e2fe3603b9832a2991",
|
"build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/93/41/617d1b3436173551780992842b6e",
|
||||||
"build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/29/dd/2646ab0b39c07c541ad80a7b4727",
|
"build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/3e/c5/d5a2841dc15918206f8c19b1ce02",
|
||||||
"build/prefab/lib/linux_arm64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4c/bf/393694ea67f3d590dd2706c9955e",
|
"build/prefab/lib/linux_arm64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4c/bf/393694ea67f3d590dd2706c9955e",
|
||||||
"build/prefab/lib/linux_arm64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/78/cb/bb9ae4f896f862074057c8e36e1d",
|
"build/prefab/lib/linux_arm64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/78/cb/bb9ae4f896f862074057c8e36e1d",
|
||||||
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ae/bd/39d7b885f7f01e81d0e96f0f85ce",
|
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ae/bd/39d7b885f7f01e81d0e96f0f85ce",
|
||||||
@ -3960,12 +3960,12 @@
|
|||||||
"build/prefab/lib/linux_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/52/d9/563a6949d2c4db5a915c54460fbc",
|
"build/prefab/lib/linux_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/52/d9/563a6949d2c4db5a915c54460fbc",
|
||||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d0/6a/42fe8d2e34f95e1b3282e8422344",
|
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d0/6a/42fe8d2e34f95e1b3282e8422344",
|
||||||
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/50/cf/bad44b07a4022aee3001002086b5",
|
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/50/cf/bad44b07a4022aee3001002086b5",
|
||||||
"build/prefab/lib/mac_arm64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/84/d0/d46d2ce177f1ce6bc0304ce673c9",
|
"build/prefab/lib/mac_arm64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fa/8a/a6aedb3b2c74c055005792710be8",
|
||||||
"build/prefab/lib/mac_arm64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/09/b7/e094fdfa54fa38751f0caa1c9e68",
|
"build/prefab/lib/mac_arm64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4b/97/0b6acf3397515a5fb997b3a81e3d",
|
||||||
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/69/6f/c99b2718ac104de79337e35414f7",
|
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ee/b0/81fbb6e8996205a16e3d8e912000",
|
||||||
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d7/76/eecf9cc91f73e3cae73291215216",
|
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/64/68/e668be0a349bcdd51efe35703b8a",
|
||||||
"build/prefab/lib/mac_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/77/0f/0ef7575b11fd70a1d897ab261813",
|
"build/prefab/lib/mac_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4b/06/3e80d9b9efa82e28b77d895562b0",
|
||||||
"build/prefab/lib/mac_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/45/62/8267446a6c71bcc34234ec5e119a",
|
"build/prefab/lib/mac_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/34/b1/942b8c6206051dbaa15f225bc8d9",
|
||||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/78/9b/a5a29e1baa7d5d9d2eaabc9412f9",
|
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e1/a6/2b3a07d7afe0215ab5843a83809f",
|
||||||
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ab/67/4c447ca41efd957bce227a34887c"
|
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/48/5d/e8c8deb5b42593c805fa9c181c0c"
|
||||||
}
|
}
|
||||||
@ -9,6 +9,8 @@
|
|||||||
- Added ba.clipboard_* functions for copying and pasting text on supported platforms.
|
- Added ba.clipboard_* functions for copying and pasting text on supported platforms.
|
||||||
- Implemented clipboard functionality on SDL based builds (such as prefab).
|
- Implemented clipboard functionality on SDL based builds (such as prefab).
|
||||||
- Fixed an issue where click locations on scaled text fields could be incorrectly calculated.
|
- Fixed an issue where click locations on scaled text fields could be incorrectly calculated.
|
||||||
|
- Server-wrapper improvements allowing config path and ba_root path to be passed explicitly.
|
||||||
|
- Binary -cfgdir option now properly allows any path, not just './ba_root'.
|
||||||
|
|
||||||
### 1.5.29 (20246)
|
### 1.5.29 (20246)
|
||||||
- Exposed ba method/class initing in public C++ layer.
|
- Exposed ba method/class initing in public C++ layer.
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import signal
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from threading import Lock, Thread, current_thread
|
from threading import Lock, Thread, current_thread
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
@ -36,7 +37,7 @@ VERSION_STR = '1.1.2'
|
|||||||
|
|
||||||
# Version history:
|
# Version history:
|
||||||
# 1.1.2:
|
# 1.1.2:
|
||||||
# Now accepts config path as sole optional argument.
|
# Added args for setting config path and ba_root path
|
||||||
# 1.1.1:
|
# 1.1.1:
|
||||||
# Switched config reading to use efro.dataclasses.dataclass_from_dict()
|
# Switched config reading to use efro.dataclasses.dataclass_from_dict()
|
||||||
# 1.1.0:
|
# 1.1.0:
|
||||||
@ -58,8 +59,10 @@ class ServerManagerApp:
|
|||||||
managing BallisticaCore operating in server mode.
|
managing BallisticaCore operating in server mode.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, config_path: Optional[str] = None) -> None:
|
def __init__(self, args: Args) -> None:
|
||||||
self._config_path = config_path
|
self._config_path = args.config_path
|
||||||
|
self._ba_root_path = (args.ba_root_path if args.ba_root_path
|
||||||
|
is not None else os.path.abspath('dist/ba_root'))
|
||||||
try:
|
try:
|
||||||
self._config = self._load_config()
|
self._config = self._load_config()
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
@ -336,8 +339,9 @@ class ServerManagerApp:
|
|||||||
print(f'{Clr.CYN}Launching server subprocess...{Clr.RST}')
|
print(f'{Clr.CYN}Launching server subprocess...{Clr.RST}')
|
||||||
binary_name = ('ballisticacore_headless.exe'
|
binary_name = ('ballisticacore_headless.exe'
|
||||||
if os.name == 'nt' else './ballisticacore_headless')
|
if os.name == 'nt' else './ballisticacore_headless')
|
||||||
|
assert self._ba_root_path is not None
|
||||||
self._subprocess = subprocess.Popen(
|
self._subprocess = subprocess.Popen(
|
||||||
[binary_name, '-cfgdir', 'ba_root'],
|
[binary_name, '-cfgdir', self._ba_root_path],
|
||||||
stdin=subprocess.PIPE,
|
stdin=subprocess.PIPE,
|
||||||
cwd='dist')
|
cwd='dist')
|
||||||
|
|
||||||
@ -363,9 +367,12 @@ class ServerManagerApp:
|
|||||||
|
|
||||||
def _prep_subprocess_environment(self) -> None:
|
def _prep_subprocess_environment(self) -> None:
|
||||||
"""Write files that must exist at process launch."""
|
"""Write files that must exist at process launch."""
|
||||||
os.makedirs('dist/ba_root', exist_ok=True)
|
|
||||||
if os.path.exists('dist/ba_root/config.json'):
|
assert self._ba_root_path is not None
|
||||||
with open('dist/ba_root/config.json') as infile:
|
os.makedirs(self._ba_root_path, exist_ok=True)
|
||||||
|
cfgpath = os.path.join(self._ba_root_path, 'config.json')
|
||||||
|
if os.path.exists(cfgpath):
|
||||||
|
with open(cfgpath) as infile:
|
||||||
bincfg = json.loads(infile.read())
|
bincfg = json.loads(infile.read())
|
||||||
else:
|
else:
|
||||||
bincfg = {}
|
bincfg = {}
|
||||||
@ -376,7 +383,7 @@ class ServerManagerApp:
|
|||||||
bincfg['Auto Balance Teams'] = self._config.auto_balance_teams
|
bincfg['Auto Balance Teams'] = self._config.auto_balance_teams
|
||||||
bincfg['Show Tutorial'] = False
|
bincfg['Show Tutorial'] = False
|
||||||
bincfg['Idle Exit Minutes'] = self._config.idle_exit_minutes
|
bincfg['Idle Exit Minutes'] = self._config.idle_exit_minutes
|
||||||
with open('dist/ba_root/config.json', 'w') as outfile:
|
with open(cfgpath, 'w') as outfile:
|
||||||
outfile.write(json.dumps(bincfg))
|
outfile.write(json.dumps(bincfg))
|
||||||
|
|
||||||
def _enqueue_server_command(self, command: ServerCommand) -> None:
|
def _enqueue_server_command(self, command: ServerCommand) -> None:
|
||||||
@ -544,22 +551,61 @@ def _parse_args() -> Optional[str]:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Args:
|
||||||
|
"""Wraps arguments that can be passed from the command line."""
|
||||||
|
config_path: Optional[str] = None
|
||||||
|
ba_root_path: Optional[str] = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_command_line(cls) -> Args:
|
||||||
|
"""Parse command line args and fill ourself out."""
|
||||||
|
args = Args()
|
||||||
|
|
||||||
|
i = 1
|
||||||
|
argc = len(sys.argv)
|
||||||
|
while i < argc:
|
||||||
|
arg = sys.argv[i]
|
||||||
|
if arg == '--config':
|
||||||
|
if i + 1 >= argc:
|
||||||
|
raise CleanError('Expected a config path as next arg.')
|
||||||
|
path = sys.argv[i + 1]
|
||||||
|
if not os.path.exists(path):
|
||||||
|
raise CleanError(
|
||||||
|
f"Supplied path does not exist: '{path}'.")
|
||||||
|
args.config_path = os.path.abspath(path)
|
||||||
|
i += 2
|
||||||
|
elif arg == '--root':
|
||||||
|
if i + 1 >= argc:
|
||||||
|
raise CleanError('Expected a path as next arg.')
|
||||||
|
path = sys.argv[i + 1]
|
||||||
|
# Note: this one doesn't have to exist.
|
||||||
|
args.ba_root_path = os.path.abspath(path)
|
||||||
|
i += 2
|
||||||
|
else:
|
||||||
|
raise CleanError(f"Invalid arg: '{arg}'.")
|
||||||
|
|
||||||
|
return args
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
"""Run a BallisticaCore server manager in interactive mode."""
|
"""Run a BallisticaCore server manager in interactive mode."""
|
||||||
try:
|
try:
|
||||||
# User can optionally supply a config path.
|
# Note: we need to parse args before we chdir since we might be
|
||||||
# (need to get this before we chdir).
|
# dealing with relative paths.
|
||||||
config_path = _parse_args()
|
args = Args.from_command_line()
|
||||||
|
|
||||||
# ServerManager expects cwd to be the server dir (containing
|
# ServerManager expects cwd to be the server dir (containing
|
||||||
# dist/, config.yaml, etc.)
|
# dist/, config.yaml, etc.) Let's change our working directory to
|
||||||
# Let's change our working directory to the location of this file
|
# the location of this file so we can run this script from anywhere
|
||||||
# so we can run this script from anywhere and it'll work.
|
# and it'll work.
|
||||||
os.chdir(os.path.abspath(os.path.dirname(__file__)))
|
os.chdir(os.path.abspath(os.path.dirname(__file__)))
|
||||||
|
|
||||||
ServerManagerApp(config_path=config_path).run_interactive()
|
ServerManagerApp(args).run_interactive()
|
||||||
|
|
||||||
except CleanError as exc:
|
except CleanError as exc:
|
||||||
# For clean errors, do a simple print and fail; no tracebacks/etc.
|
# For clean errors, do a simple print and fail; no tracebacks/etc.
|
||||||
|
# Any others will bubble up and give us the usual mess.
|
||||||
exc.pretty_print()
|
exc.pretty_print()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
namespace ballistica {
|
namespace ballistica {
|
||||||
|
|
||||||
// These are set automatically via script; don't change here.
|
// These are set automatically via script; don't change here.
|
||||||
const int kAppBuildNumber = 20300;
|
const int kAppBuildNumber = 20303;
|
||||||
const char* kAppVersion = "1.6.0";
|
const char* kAppVersion = "1.6.0";
|
||||||
|
|
||||||
// Our standalone globals.
|
// Our standalone globals.
|
||||||
|
|||||||
@ -572,25 +572,22 @@ static void HandleArgs(int argc, char** argv) {
|
|||||||
if (i + 1 < argc) {
|
if (i + 1 < argc) {
|
||||||
g_app_globals->user_config_dir = argv[i + 1];
|
g_app_globals->user_config_dir = argv[i + 1];
|
||||||
|
|
||||||
// Need to remove this limitation!!!
|
|
||||||
// Don't remember why it's here; something about not being able to
|
|
||||||
// create nested directories properly in windows. But perhaps we
|
|
||||||
// can just error if a dir is provided that's invalid.
|
|
||||||
if (g_app_globals->user_config_dir != "ba_root") {
|
|
||||||
printf("%s", "ERROR: -cfgdir currently has to be 'ba_root'\n");
|
|
||||||
fflush(stdout);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Need to convert this to an abs path since we chdir soon.
|
// Need to convert this to an abs path since we chdir soon.
|
||||||
std::string buffer = g_platform->GetCWD();
|
bool success =
|
||||||
if (buffer.empty()) {
|
g_platform->AbsPath(argv[i + 1], &g_app_globals->user_config_dir);
|
||||||
printf("%s", "ERROR: unable to get cwd for cfgdir setup\n");
|
if (!success) {
|
||||||
|
// This can fail if the path doesn't exist.
|
||||||
|
if (!g_platform->FilePathExists(argv[i + 1])) {
|
||||||
|
printf("ERROR: provided config dir does not exist: '%s'\n",
|
||||||
|
argv[i + 1]);
|
||||||
|
} else {
|
||||||
|
printf(
|
||||||
|
"ERROR: unable to determine absolute path of config dir '%s'\n",
|
||||||
|
argv[i + 1]);
|
||||||
|
}
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
g_app_globals->user_config_dir =
|
|
||||||
std::string(buffer) + BA_DIRSLASH + g_app_globals->user_config_dir;
|
|
||||||
} else {
|
} else {
|
||||||
Log("ERROR: expected arg after -cfgdir");
|
Log("ERROR: expected arg after -cfgdir");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
@ -1150,6 +1147,30 @@ void Platform::Unlink(const char* path) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto Platform::AbsPath(const std::string& path, std::string* outpath) -> bool {
|
||||||
|
// Ensure all implementations fail if the file does not exist.
|
||||||
|
if (!FilePathExists(path)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return DoAbsPath(path, outpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto Platform::DoAbsPath(const std::string& path, std::string* outpath)
|
||||||
|
-> bool {
|
||||||
|
// This covers all but windows.
|
||||||
|
#if BA_OSTYPE_WINDOWS
|
||||||
|
throw Exception();
|
||||||
|
#else
|
||||||
|
char buffer[PATH_MAX + 1];
|
||||||
|
char* ptr = realpath(path.c_str(), buffer);
|
||||||
|
if (ptr) {
|
||||||
|
*outpath = ptr;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
auto Platform::IsEventPushMode() -> bool { return false; }
|
auto Platform::IsEventPushMode() -> bool { return false; }
|
||||||
|
|
||||||
auto Platform::GetDisplayResolution(int* x, int* y) -> bool { return false; }
|
auto Platform::GetDisplayResolution(int* x, int* y) -> bool { return false; }
|
||||||
|
|||||||
@ -105,6 +105,10 @@ class Platform {
|
|||||||
// Unlink a file.
|
// Unlink a file.
|
||||||
virtual auto Unlink(const char* path) -> void;
|
virtual auto Unlink(const char* path) -> void;
|
||||||
|
|
||||||
|
/// Return the absolute path for the provided path. Note that this requires
|
||||||
|
/// the path to already exist.
|
||||||
|
auto AbsPath(const std::string& path, std::string* outpath) -> bool;
|
||||||
|
|
||||||
#pragma mark CLIPBOARD ---------------------------------------------------------
|
#pragma mark CLIPBOARD ---------------------------------------------------------
|
||||||
|
|
||||||
/// Return whether clipboard operations are supported at all.
|
/// Return whether clipboard operations are supported at all.
|
||||||
@ -494,6 +498,10 @@ class Platform {
|
|||||||
// Should not except if it already exists or if quiet is true.
|
// Should not except if it already exists or if quiet is true.
|
||||||
virtual void DoMakeDir(const std::string& dir, bool quiet);
|
virtual void DoMakeDir(const std::string& dir, bool quiet);
|
||||||
|
|
||||||
|
// Attempt to actually get an abs path. This will only be called if
|
||||||
|
// the path is valid and exists.
|
||||||
|
virtual auto DoAbsPath(const std::string& path, std::string* outpath) -> bool;
|
||||||
|
|
||||||
// Calc the user scripts dir path for this platform.
|
// Calc the user scripts dir path for this platform.
|
||||||
// This will be called once and the path cached.
|
// This will be called once and the path cached.
|
||||||
virtual auto DoGetUserPythonDirectory() -> std::string;
|
virtual auto DoGetUserPythonDirectory() -> std::string;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user