mirror of
https://github.com/martinvonz/jj.git
synced 2025-05-29 11:01:13 +00:00
cli: add jj git remote add
command
The user currently has to edit `.jj/git/config` (or run `git --git-dir=.jj/git config`) to manage remotes in the underlying Git repo. That's not very discoverable (and we may change the path some day), so let's provide a command for it.
This commit is contained in:
parent
d8c0282873
commit
e4f7795fd3
@ -1066,6 +1066,26 @@ https://github.com/martinvonz/jj/blob/main/docs/git-comparison.md.\
|
|||||||
",
|
",
|
||||||
)
|
)
|
||||||
.setting(clap::AppSettings::SubcommandRequiredElseHelp)
|
.setting(clap::AppSettings::SubcommandRequiredElseHelp)
|
||||||
|
.subcommand(
|
||||||
|
SubCommand::with_name("remote")
|
||||||
|
.about("Manage Git remotes")
|
||||||
|
.subcommand(
|
||||||
|
SubCommand::with_name("add")
|
||||||
|
.about("Add a Git remote")
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("remote")
|
||||||
|
.index(1)
|
||||||
|
.required(true)
|
||||||
|
.help("The remote's name"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("url")
|
||||||
|
.index(2)
|
||||||
|
.required(true)
|
||||||
|
.help("The remote's URL"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
.subcommand(
|
.subcommand(
|
||||||
SubCommand::with_name("fetch")
|
SubCommand::with_name("fetch")
|
||||||
.about("Fetch from a Git remote")
|
.about("Fetch from a Git remote")
|
||||||
@ -3316,6 +3336,41 @@ fn get_git_repo(store: &Store) -> Result<git2::Repository, CommandError> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn cmd_git_remote(
|
||||||
|
ui: &mut Ui,
|
||||||
|
command: &CommandHelper,
|
||||||
|
_git_matches: &ArgMatches,
|
||||||
|
remote_matches: &ArgMatches,
|
||||||
|
) -> Result<(), CommandError> {
|
||||||
|
if let Some(command_matches) = remote_matches.subcommand_matches("add") {
|
||||||
|
cmd_git_remote_add(ui, command, remote_matches, remote_matches, command_matches)?;
|
||||||
|
} else {
|
||||||
|
panic!("unhandled command: {:#?}", command.root_matches());
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn cmd_git_remote_add(
|
||||||
|
ui: &mut Ui,
|
||||||
|
command: &CommandHelper,
|
||||||
|
_git_matches: &ArgMatches,
|
||||||
|
_remote_matches: &ArgMatches,
|
||||||
|
cmd_matches: &ArgMatches,
|
||||||
|
) -> Result<(), CommandError> {
|
||||||
|
let repo_command = command.repo_helper(ui)?;
|
||||||
|
let repo = repo_command.repo();
|
||||||
|
let git_repo = get_git_repo(repo.store())?;
|
||||||
|
let remote_name = cmd_matches.value_of("remote").unwrap();
|
||||||
|
let url = cmd_matches.value_of("url").unwrap();
|
||||||
|
if git_repo.find_remote(remote_name).is_ok() {
|
||||||
|
return Err(CommandError::UserError("Remote already exists".to_string()));
|
||||||
|
}
|
||||||
|
git_repo
|
||||||
|
.remote(remote_name, url)
|
||||||
|
.map_err(|err| CommandError::UserError(err.to_string()))?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn cmd_git_fetch(
|
fn cmd_git_fetch(
|
||||||
ui: &mut Ui,
|
ui: &mut Ui,
|
||||||
command: &CommandHelper,
|
command: &CommandHelper,
|
||||||
@ -3526,7 +3581,9 @@ fn cmd_git(
|
|||||||
command: &CommandHelper,
|
command: &CommandHelper,
|
||||||
sub_matches: &ArgMatches,
|
sub_matches: &ArgMatches,
|
||||||
) -> Result<(), CommandError> {
|
) -> Result<(), CommandError> {
|
||||||
if let Some(command_matches) = sub_matches.subcommand_matches("fetch") {
|
if let Some(command_matches) = sub_matches.subcommand_matches("remote") {
|
||||||
|
cmd_git_remote(ui, command, sub_matches, command_matches)?;
|
||||||
|
} else if let Some(command_matches) = sub_matches.subcommand_matches("fetch") {
|
||||||
cmd_git_fetch(ui, command, sub_matches, command_matches)?;
|
cmd_git_fetch(ui, command, sub_matches, command_matches)?;
|
||||||
} else if let Some(command_matches) = sub_matches.subcommand_matches("clone") {
|
} else if let Some(command_matches) = sub_matches.subcommand_matches("clone") {
|
||||||
cmd_git_clone(ui, command, sub_matches, command_matches)?;
|
cmd_git_clone(ui, command, sub_matches, command_matches)?;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user