aboutsummaryrefslogtreecommitdiff
path: root/src/app/api/plugins/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/api/plugins/mod.rs')
-rw-r--r--src/app/api/plugins/mod.rs70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/app/api/plugins/mod.rs b/src/app/api/plugins/mod.rs
index 8c0e4212..833134b5 100644
--- a/src/app/api/plugins/mod.rs
+++ b/src/app/api/plugins/mod.rs
@@ -1906,6 +1906,76 @@ command = ["sh", "-c", "printf '%s' \"$HERDR_PLUGIN_CONTEXT_JSON\" > {}"]
pane_context.focused_pane_id.as_deref(),
Some(active_public_pane_id.as_str())
);
+
+ app.state.workspaces[0].worktree_space = Some(crate::workspace::WorktreeSpaceMembership {
+ key: "repo-key".into(),
+ label: "herdr".into(),
+ repo_root: "/repo/herdr".into(),
+ checkout_path: "/repo/herdr-issue".into(),
+ is_linked_worktree: true,
+ });
+ let workspace = app.workspace_info(0);
+ let worktree = crate::api::schema::WorktreeInfo {
+ path: "/repo/herdr-issue".into(),
+ branch: Some("worktree/issue".into()),
+ is_bare: false,
+ is_detached: false,
+ is_prunable: false,
+ is_linked_worktree: true,
+ open_workspace_id: None,
+ label: "herdr".into(),
+ };
+ app.state.workspaces[0].worktree_space = Some(crate::workspace::WorktreeSpaceMembership {
+ key: "repo-key".into(),
+ label: "herdr".into(),
+ repo_root: "/repo/herdr".into(),
+ checkout_path: "/repo/herdr-other".into(),
+ is_linked_worktree: true,
+ });
+ let changed_context = app.plugin_context_for_event(
+ &crate::api::schema::EventEnvelope {
+ event: crate::api::schema::EventKind::WorktreeRemoved,
+ data: crate::api::schema::EventData::WorktreeRemoved {
+ workspace_id: workspace_id.clone(),
+ workspace: Some(workspace.clone()),
+ worktree: worktree.clone(),
+ forced: true,
+ },
+ },
+ "worktree.removed",
+ );
+ assert_eq!(
+ changed_context
+ .worktree
+ .as_ref()
+ .map(|worktree| worktree.checkout_path.as_str()),
+ Some("/repo/herdr-issue")
+ );
+
+ app.state.workspaces.clear();
+ let removed_context = app.plugin_context_for_event(
+ &crate::api::schema::EventEnvelope {
+ event: crate::api::schema::EventKind::WorktreeRemoved,
+ data: crate::api::schema::EventData::WorktreeRemoved {
+ workspace_id: workspace_id.clone(),
+ workspace: Some(workspace),
+ worktree,
+ forced: true,
+ },
+ },
+ "worktree.removed",
+ );
+ assert_eq!(
+ removed_context.workspace_id.as_deref(),
+ Some(workspace_id.as_str())
+ );
+ assert_eq!(
+ removed_context
+ .worktree
+ .as_ref()
+ .map(|worktree| worktree.checkout_path.as_str()),
+ Some("/repo/herdr-issue")
+ );
}
#[cfg(unix)]