use clap_complete::ArgValueCandidates;
use jj_lib::git;
use jj_lib::ref_name::RemoteNameBuf;
use super::super::rename_remote_in_repo_config;
use crate::cli_util::CommandHelper;
use crate::command_error::CommandError;
use crate::complete;
use crate::ui::Ui;
#[derive(clap::Args, Clone, Debug)]
pub struct GitRemoteRenameArgs {
#[arg(add = ArgValueCandidates::new(complete::git_remotes))]
old: RemoteNameBuf,
new: RemoteNameBuf,
}
pub async fn cmd_git_remote_rename(
ui: &mut Ui,
command: &CommandHelper,
args: &GitRemoteRenameArgs,
) -> Result<(), CommandError> {
let mut workspace_command = command.workspace_helper(ui)?;
let mut tx = workspace_command.start_transaction();
git::rename_remote(tx.repo_mut(), &args.old, &args.new)?;
if tx.repo().has_changes() {
tx.finish(
ui,
format!(
"rename git remote {old} to {new}",
old = args.old.as_symbol(),
new = args.new.as_symbol()
),
)
.await?;
} else {
}
rename_remote_in_repo_config(ui, command.raw_config(), &args.old, &args.new)?;
Ok(())
}