Prepare 0.3.3 and migrate recognized legacy console wrappers
This commit is contained in:
1 parent
c0a679d989
commit
b1ff87dd81
5 files changed
+55
-4
No files matched your search
@@ -1 +1 @@
|
||||
__version__ = "0.3.2+private.20261028.2"
|
||||
__version__ = "0.3.3"
|
||||
@@ -78,6 +78,38 @@ def _new_entry(state):
|
||||
"StartupWMClass=Gnome-terminal\n").encode()
|
||||
|
||||
|
||||
def _new_wrapper(state):
|
||||
command = ["/usr/bin/fb", "--state-dir", str(state), "console"]
|
||||
return ("#!/usr/bin/python3\n"
|
||||
'"""Open the packaged FrameBridge console using the retained local profile."""\n'
|
||||
"import os\nimport sys\n"
|
||||
"command = " + repr(command) + "\n"
|
||||
"if sys.argv[1:] == ['--inside']:\n"
|
||||
" command += ['--inside', '--mode', 'gui']\n"
|
||||
"elif sys.argv[1:]:\n"
|
||||
" raise SystemExit('Usage: framebridge-console')\n"
|
||||
"os.execv(command[0], command)\n").encode()
|
||||
|
||||
|
||||
def _migrate_wrapper(state, home):
|
||||
path = home / ".local/bin/framebridge-console"
|
||||
before, mode = _snapshot(path)
|
||||
after = _new_wrapper(state)
|
||||
if before == after:
|
||||
return False
|
||||
_need(hashlib.sha256(before).hexdigest() == LEGACY_WRAPPER_SHA256,
|
||||
"CONSOLE_DESKTOP_LEGACY_WRAPPER_CHANGED")
|
||||
backup = state / "console-wrapper-legacy.backup"
|
||||
if backup.exists() or backup.is_symlink():
|
||||
data, backup_mode = _snapshot(backup)
|
||||
_need(data == before and backup_mode == 0o600, "CONSOLE_DESKTOP_WRAPPER_BACKUP_CHANGED")
|
||||
else:
|
||||
_atomic(backup, before)
|
||||
_need(_snapshot(path)[0] == before, "CONSOLE_DESKTOP_WRAPPER_CHANGED_DURING_MIGRATION")
|
||||
_atomic(path, after, mode)
|
||||
return True
|
||||
|
||||
|
||||
def _legacy_identity(node, runtime):
|
||||
return {"socket": runtime / (node.lower() + "-tty1") / "console.sock",
|
||||
"session": node.upper() + "-FBTERM"}
|
||||
@@ -123,7 +155,9 @@ def migrate_legacy(state, *, home=None, node=None, runtime=None):
|
||||
after = _new_entry(state)
|
||||
if before == after:
|
||||
_need(legacy_context(state, node, runtime) is not None, "CONSOLE_DESKTOP_RECORD_MISSING")
|
||||
return {"ok": True, "changed": False, "reason": "ALREADY_MIGRATED"}
|
||||
wrapper_changed = _migrate_wrapper(state, home)
|
||||
return {"ok": True, "changed": wrapper_changed, "reason": "ALREADY_MIGRATED",
|
||||
"wrapper_changed": wrapper_changed}
|
||||
if before != _legacy_entry(home):
|
||||
return {"ok": True, "changed": False, "reason": "CUSTOM_DESKTOP_ENTRY_PRESERVED"}
|
||||
wrapper, _ = _snapshot(home / ".local/bin/framebridge-console")
|
||||
@@ -166,6 +200,8 @@ def migrate_legacy(state, *, home=None, node=None, runtime=None):
|
||||
_atomic(state / RECORD, (json.dumps(record, sort_keys=True, indent=2) + "\n").encode())
|
||||
_need(_snapshot(desktop)[0] == before, "CONSOLE_DESKTOP_CHANGED_DURING_MIGRATION")
|
||||
_atomic(desktop, after, mode)
|
||||
wrapper_changed = _migrate_wrapper(state, home)
|
||||
return {"ok": True, "changed": True, "desktop": str(desktop),
|
||||
"wrapper_changed": wrapper_changed,
|
||||
"session": identity["session"], "socket": str(identity["socket"]),
|
||||
"backup": str(backup), "runtime_changed": False}
|
||||
Reference in new issue
Block a user