use super::pr_command::create_pr_args;
use super::pr_description::{collect_commit_log, format_commit_bullets};
use crate::worktree::WorktreeInfo;
pub(super) async fn push_branch(wt: &WorktreeInfo) -> anyhow::Result<()> {
let output = tokio::process::Command::new("git")
.args(["push", "-u", "origin", &wt.branch])
.current_dir(&wt.path)
.output()
.await
.map_err(|e| anyhow::anyhow!("Failed to run git push: {e}"))?;
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
return Err(anyhow::anyhow!("git push failed: {stderr}"));
}
tracing::info!(branch = %wt.branch, "Pushed branch to origin");
Ok(())
}
pub(super) async fn create_github_pr(
wt: &WorktreeInfo,
base_branch: Option<&str>,
prompt: Option<&str>,
) -> anyhow::Result<String> {
let commits = collect_commit_log(&wt.path, base_branch).await;
let bullets = format_commit_bullets(&commits);
let args = create_pr_args(wt, base_branch, prompt, &bullets);
let output = tokio::process::Command::new("gh")
.args(&args)
.current_dir(&wt.path)
.output()
.await
.map_err(|e| anyhow::anyhow!("Failed to run gh pr create: {e}"))?;
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
return Err(anyhow::anyhow!("gh pr create failed: {stderr}"));
}
Ok(String::from_utf8_lossy(&output.stdout).trim().to_string())
}