fix(tui_gateway): enrich persisted session git metadata
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import tui_gateway.server as server
|
||||
from hermes_state import SessionDB
|
||||
|
||||
|
||||
class _ImmediateThread:
|
||||
@@ -70,3 +71,36 @@ def test_missing_db_claim_never_starts_git_probe(monkeypatch):
|
||||
|
||||
assert generation is None
|
||||
assert probed == []
|
||||
|
||||
|
||||
def test_lazy_desktop_row_with_explicit_cwd_is_enriched_on_hydration(monkeypatch, tmp_path):
|
||||
db = SessionDB(db_path=tmp_path / "state.db")
|
||||
repo = tmp_path / "repo"
|
||||
repo.mkdir()
|
||||
session = {
|
||||
"session_key": "desktop-session",
|
||||
"source": "desktop",
|
||||
"cwd": str(repo),
|
||||
"explicit_cwd": True,
|
||||
}
|
||||
sid = "live-desktop-session"
|
||||
|
||||
monkeypatch.setattr(server, "_get_db", lambda: db)
|
||||
monkeypatch.setattr(server, "_resolve_model", lambda: "test-model")
|
||||
monkeypatch.setattr(server.threading, "Thread", _ImmediateThread)
|
||||
monkeypatch.setattr(server.git_probe, "branch", lambda _cwd: "feature/session-metadata")
|
||||
monkeypatch.setattr(server.git_probe, "common_repo_root", lambda _cwd: str(repo))
|
||||
server._sessions[sid] = session
|
||||
try:
|
||||
assert server._ensure_session_db_row(session) is True
|
||||
assert db.get_session("desktop-session")["git_branch"] is None
|
||||
|
||||
server._hydrate_session_cwd(sid, "desktop-session", db, None)
|
||||
|
||||
row = db.get_session("desktop-session")
|
||||
assert row["cwd"] == str(repo)
|
||||
assert row["git_branch"] == "feature/session-metadata"
|
||||
assert row["git_repo_root"] == str(repo)
|
||||
finally:
|
||||
server._sessions.pop(sid, None)
|
||||
db.close()
|
||||
|
||||
@@ -2643,7 +2643,7 @@ def _make_agent(
|
||||
|
||||
|
||||
def _hydrate_session_cwd(sid: str, key: str, session_db, profile_home: str | None) -> None:
|
||||
"""Adopt the stored row's cwd, or persist the fresh session's cwd (+ schedule git meta) when the row has none."""
|
||||
"""Adopt the stored row's cwd and fill missing Git metadata, or persist a fresh cwd."""
|
||||
owns_db, db = False, session_db
|
||||
if db is None and not profile_home:
|
||||
db = _get_db()
|
||||
@@ -2668,6 +2668,16 @@ def _hydrate_session_cwd(sid: str, key: str, session_db, profile_home: str | Non
|
||||
_sessions[sid]["cwd"] = row["cwd"]
|
||||
if remote:
|
||||
_sessions[sid]["explicit_cwd"] = True
|
||||
# Lazy desktop rows already carry their explicitly chosen cwd, so they never reach the fresh-cwd
|
||||
# branch below. Claim a generation before probing to keep an older probe from overwriting a later
|
||||
# workspace move; complete rows do not need another probe on every resume.
|
||||
if (not row.get("git_branch") or not row.get("git_repo_root")) and hasattr(
|
||||
db, "update_session_cwd"
|
||||
):
|
||||
try:
|
||||
_persist_session_cwd_and_schedule_git_meta(_sessions[sid], row["cwd"], db=db)
|
||||
except Exception:
|
||||
logger.debug("failed to enrich resumed session git metadata", exc_info=True)
|
||||
elif hasattr(db, "update_session_cwd"):
|
||||
try:
|
||||
_persist_session_cwd_and_schedule_git_meta(_sessions[sid], _sessions[sid]["cwd"], db=db)
|
||||
|
||||
Reference in New Issue
Block a user