import type { Octokits } from "../api/client"; import { GITHUB_SERVER_URL } from "../api/config"; export async function checkAndDeleteEmptyBranch( octokit: Octokits, owner: string, repo: string, claudeBranch: string | undefined, baseBranch: string, ): Promise<{ shouldDeleteBranch: boolean; branchLink: string }> { let branchLink = ""; let shouldDeleteBranch = false; if (claudeBranch) { // Check if Claude made any commits to the branch try { const { data: comparison } = await octokit.rest.repos.compareCommitsWithBasehead({ owner, repo, basehead: `${baseBranch}...${claudeBranch}`, }); // If there are no commits, mark branch for deletion if (comparison.total_commits === 0) { console.log( `Branch ${claudeBranch} has no commits from Claude, will delete it`, ); shouldDeleteBranch = true; } else { // Only add branch link if there are commits const branchUrl = `${GITHUB_SERVER_URL}/${owner}/${repo}/tree/${claudeBranch}`; branchLink = `\n[View branch](${branchUrl})`; } } catch (error) { console.error("Error checking for commits on Claude branch:", error); // If we can't check, assume the branch has commits to be safe const branchUrl = `${GITHUB_SERVER_URL}/${owner}/${repo}/tree/${claudeBranch}`; branchLink = `\n[View branch](${branchUrl})`; } } // Delete the branch if it has no commits if (shouldDeleteBranch && claudeBranch) { try { await octokit.rest.git.deleteRef({ owner, repo, ref: `heads/${claudeBranch}`, }); console.log(`✅ Deleted empty branch: ${claudeBranch}`); } catch (deleteError) { console.error(`Failed to delete branch ${claudeBranch}:`, deleteError); // Continue even if deletion fails } } return { shouldDeleteBranch, branchLink }; }