use std::io;
use std::process::{Command, ExitStatus, Stdio};
use super::constants::{self, commands, flags};
use super::executor::JjExecutor;
impl JjExecutor {
pub fn squash_into_interactive(
&self,
source: &str,
destination: &str,
) -> io::Result<ExitStatus> {
let mut cmd = Command::new(constants::JJ_COMMAND);
if let Some(repo_path) = self.repo_path() {
cmd.arg(flags::REPO_PATH).arg(repo_path);
}
cmd.args([commands::SQUASH, "--from", source, "--into", destination])
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
}
pub fn describe_edit_interactive(&self, revision: &str) -> io::Result<ExitStatus> {
let mut cmd = Command::new(constants::JJ_COMMAND);
if let Some(repo_path) = self.repo_path() {
cmd.arg(flags::REPO_PATH).arg(repo_path);
}
cmd.args([commands::DESCRIBE, "-r", revision, flags::EDITOR_FLAG])
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
}
pub fn split_interactive(&self, revision: &str) -> io::Result<ExitStatus> {
let mut cmd = Command::new(constants::JJ_COMMAND);
if let Some(repo_path) = self.repo_path() {
cmd.arg(flags::REPO_PATH).arg(repo_path);
}
cmd.args([commands::SPLIT, "-r", revision])
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
}
pub fn diffedit_interactive(&self, revision: &str) -> io::Result<ExitStatus> {
let mut cmd = Command::new(constants::JJ_COMMAND);
if let Some(repo_path) = self.repo_path() {
cmd.arg(flags::REPO_PATH).arg(repo_path);
}
cmd.args([commands::DIFFEDIT, flags::REVISION, revision])
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
}
pub fn diffedit_file_interactive(&self, revision: &str, file: &str) -> io::Result<ExitStatus> {
let mut cmd = Command::new(constants::JJ_COMMAND);
if let Some(repo_path) = self.repo_path() {
cmd.arg(flags::REPO_PATH).arg(repo_path);
}
cmd.args([commands::DIFFEDIT, flags::REVISION, revision, file])
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
}
pub fn resolve_interactive(
&self,
file_path: &str,
revision: Option<&str>,
) -> io::Result<ExitStatus> {
let mut cmd = Command::new(constants::JJ_COMMAND);
if let Some(repo_path) = self.repo_path() {
cmd.arg(flags::REPO_PATH).arg(repo_path);
}
let mut args = vec![commands::RESOLVE];
if let Some(rev) = revision {
args.push(flags::REVISION);
args.push(rev);
}
args.push(file_path);
cmd.args(args)
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
}
}