diff --git a/Cargo.lock b/Cargo.lock index d878f0f..a7ebc92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -237,7 +237,7 @@ checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "loki-cli" -version = "1.2.0" +version = "1.3.0" dependencies = [ "chrono", "clap", diff --git a/Cargo.toml b/Cargo.toml index cc30dfe..52b07d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "loki-cli" -version = "1.2.0" +version = "1.3.0" authors = ["Kyle W. Rader"] description = "Loki: 🚀 A Git productivity tool" homepage = "https://github.com/kyle-rader/loki-cli" diff --git a/src/main.rs b/src/main.rs index 84ed6fe..59e7e29 100644 --- a/src/main.rs +++ b/src/main.rs @@ -127,6 +127,10 @@ enum Cli { /// The branch to rebase onto. #[clap(default_value = "main", env = "LOKI_REBASE_TARGET")] target: String, + + /// Start an interactive rebase. + #[clap(short, long)] + interactive: bool, }, /// Run any command without triggering any hooks @@ -155,7 +159,7 @@ fn main() -> Result<(), String> { Cli::Fetch => fetch_prune(), Cli::Save(commit_options) => save(commit_options), Cli::Commit(commit_options) => commit(commit_options), - Cli::Rebase { target } => rebase(target), + Cli::Rebase { target, interactive } => rebase(target, *interactive), Cli::NoHooks { command } => no_hooks(command), Cli::Repo { command: RepoSubcommand::Stats(options), @@ -493,20 +497,26 @@ fn parse_naive_date(value: &str) -> Result { .map_err(|err| format!("Invalid date `{value}` (expected YYYY-MM-DD): {err}")) } -fn rebase(target: &str) -> Result<(), String> { - git_commands_status(vec![ - ( - "fetch target", - vec![ - "-c", - NO_HOOKS, - "fetch", - "origin", - format!("{target}:{target}").as_str(), - ], - ), - ("rebase", vec!["-c", NO_HOOKS, "rebase", target]), - ])?; +fn rebase(target: &str, interactive: bool) -> Result<(), String> { + let fetch_target = format!("{target}:{target}"); + git_command_status( + "fetch target", + vec![ + "-c", + NO_HOOKS, + "fetch", + "origin", + fetch_target.as_str(), + ], + )?; + + let mut rebase_args = vec!["-c", NO_HOOKS, "rebase"]; + if interactive { + rebase_args.push("-i"); + } + rebase_args.push(target); + + git_command_status("rebase", rebase_args)?; Ok(()) }