feat: add branch validation handler to session
This commit is contained in:
@@ -870,6 +870,10 @@ export class Session {
|
|||||||
await this.handleCheckoutStatusRequest(msg);
|
await this.handleCheckoutStatusRequest(msg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "validate_branch_request":
|
||||||
|
await this.handleValidateBranchRequest(msg);
|
||||||
|
break;
|
||||||
|
|
||||||
case "checkout_diff_request":
|
case "checkout_diff_request":
|
||||||
await this.handleCheckoutDiffRequest(msg);
|
await this.handleCheckoutDiffRequest(msg);
|
||||||
break;
|
break;
|
||||||
@@ -2515,6 +2519,81 @@ export class Session {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async handleValidateBranchRequest(
|
||||||
|
msg: Extract<SessionInboundMessage, { type: "validate_branch_request" }>
|
||||||
|
): Promise<void> {
|
||||||
|
const { cwd, branchName, requestId } = msg;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const resolvedCwd = expandTilde(cwd);
|
||||||
|
|
||||||
|
// Try local branch first
|
||||||
|
try {
|
||||||
|
await execAsync(`git rev-parse --verify ${branchName}`, {
|
||||||
|
cwd: resolvedCwd,
|
||||||
|
env: READ_ONLY_GIT_ENV,
|
||||||
|
});
|
||||||
|
this.emit({
|
||||||
|
type: "validate_branch_response",
|
||||||
|
payload: {
|
||||||
|
exists: true,
|
||||||
|
resolvedRef: branchName,
|
||||||
|
isRemote: false,
|
||||||
|
error: null,
|
||||||
|
requestId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
} catch {
|
||||||
|
// Local branch doesn't exist, try remote
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try remote branch (origin/{branchName})
|
||||||
|
try {
|
||||||
|
await execAsync(`git rev-parse --verify origin/${branchName}`, {
|
||||||
|
cwd: resolvedCwd,
|
||||||
|
env: READ_ONLY_GIT_ENV,
|
||||||
|
});
|
||||||
|
this.emit({
|
||||||
|
type: "validate_branch_response",
|
||||||
|
payload: {
|
||||||
|
exists: true,
|
||||||
|
resolvedRef: `origin/${branchName}`,
|
||||||
|
isRemote: true,
|
||||||
|
error: null,
|
||||||
|
requestId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
} catch {
|
||||||
|
// Remote branch doesn't exist either
|
||||||
|
}
|
||||||
|
|
||||||
|
// Branch not found anywhere
|
||||||
|
this.emit({
|
||||||
|
type: "validate_branch_response",
|
||||||
|
payload: {
|
||||||
|
exists: false,
|
||||||
|
resolvedRef: null,
|
||||||
|
isRemote: false,
|
||||||
|
error: null,
|
||||||
|
requestId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
this.emit({
|
||||||
|
type: "validate_branch_response",
|
||||||
|
payload: {
|
||||||
|
exists: false,
|
||||||
|
resolvedRef: null,
|
||||||
|
isRemote: false,
|
||||||
|
error: error instanceof Error ? error.message : String(error),
|
||||||
|
requestId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async handleCheckoutDiffRequest(
|
private async handleCheckoutDiffRequest(
|
||||||
msg: Extract<SessionInboundMessage, { type: "checkout_diff_request" }>
|
msg: Extract<SessionInboundMessage, { type: "checkout_diff_request" }>
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
|
|||||||
Reference in New Issue
Block a user