Skip to content

Commit 6f5ded6

Browse files
committed
fix(builder[here]): Move rename-conflict check before session mutation
build(here=True) was setting options, environment, and hooks on the session before checking if the target session name already exists. If rename failed, the user's session was left with stale hooks/options. Now checks for conflicts first, before any session state is modified.
1 parent cefea02 commit 6f5ded6

1 file changed

Lines changed: 12 additions & 11 deletions

File tree

src/tmuxp/workspace/builder.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,18 @@ def build(
534534
if self.on_build_event:
535535
self.on_build_event({"event": "before_script_done"})
536536

537+
# Check for rename conflicts early, before any session mutation
538+
if here:
539+
session_name = self.session_config["session_name"]
540+
if session.name != session_name:
541+
existing = self.server.sessions.get(
542+
session_name=session_name, default=None
543+
)
544+
if existing is not None:
545+
msg = f"cannot rename to {session_name!r}: session already exists"
546+
raise exc.TmuxpException(msg)
547+
session.rename_session(session_name)
548+
537549
if "options" in self.session_config:
538550
for option, value in self.session_config["options"].items():
539551
self.session.set_option(option, value)
@@ -575,17 +587,6 @@ def build(
575587
self.session_config["start_directory"],
576588
)
577589

578-
if here:
579-
session_name = self.session_config["session_name"]
580-
if session.name != session_name:
581-
existing = self.server.sessions.get(
582-
session_name=session_name, default=None
583-
)
584-
if existing is not None:
585-
msg = f"cannot rename to {session_name!r}: session already exists"
586-
raise exc.TmuxpException(msg)
587-
session.rename_session(session_name)
588-
589590
for window, window_config in self.iter_create_windows(
590591
session, append, here=here
591592
):

0 commit comments

Comments
 (0)