use anyhow::Result;
use std::path::Path;
use tokio::process::Command;
use super::{build_clone_args, reason, CloneOpts};
use crate::aws;
use crate::types::CredentialKind;
pub async fn clone_codecommit(opts: &CloneOpts, dest: &Path) -> Result<()> {
let (arn, external_id, via) = match &opts.credentials.as_ref().map(|c| &c.kind) {
Some(CredentialKind::AwsRole {
arn,
external_id,
via,
}) => (arn.as_str(), external_id.as_str(), via.as_deref()),
_ => anyhow::bail!("expected AwsRole credentials for CodeCommit clone"),
};
let creds = aws::assume_role(arn, external_id, &opts.repo_url, via).await?;
let args = build_clone_args(opts, &opts.repo_url, dest, &[]);
reason::run(
Command::new("git")
.args(&args)
.env("AWS_ACCESS_KEY_ID", &creds.access_key)
.env("AWS_SECRET_ACCESS_KEY", &creds.secret_key)
.env("AWS_SESSION_TOKEN", &creds.session_token)
.env("AWS_DEFAULT_REGION", &creds.region),
"CodeCommit",
&[],
)
.await
}