forked from mirrors/jj
command: add --interactive
flag to jj commit
This commit is contained in:
parent
946a6e0bf7
commit
d58664d40c
2 changed files with 23 additions and 1 deletions
|
@ -44,6 +44,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
* `jj commit` accepts an optional list of paths indicating a subset of files to
|
* `jj commit` accepts an optional list of paths indicating a subset of files to
|
||||||
include in the first commit
|
include in the first commit
|
||||||
|
|
||||||
|
* `jj commit` accepts the `--interactive` flag.
|
||||||
|
|
||||||
### Fixed bugs
|
### Fixed bugs
|
||||||
|
|
||||||
## [0.9.0] - 2023-09-06
|
## [0.9.0] - 2023-09-06
|
||||||
|
|
|
@ -469,6 +469,9 @@ struct DescribeArgs {
|
||||||
#[derive(clap::Args, Clone, Debug)]
|
#[derive(clap::Args, Clone, Debug)]
|
||||||
#[command(visible_aliases=&["ci"])]
|
#[command(visible_aliases=&["ci"])]
|
||||||
struct CommitArgs {
|
struct CommitArgs {
|
||||||
|
/// Interactively choose which changes to include in the first commit
|
||||||
|
#[arg(short, long)]
|
||||||
|
interactive: bool,
|
||||||
/// The change description to use (don't open editor)
|
/// The change description to use (don't open editor)
|
||||||
#[arg(long = "message", short, value_name = "MESSAGE")]
|
#[arg(long = "message", short, value_name = "MESSAGE")]
|
||||||
message_paragraphs: Vec<String>,
|
message_paragraphs: Vec<String>,
|
||||||
|
@ -2141,7 +2144,24 @@ fn cmd_commit(ui: &mut Ui, command: &CommandHelper, args: &CommitArgs) -> Result
|
||||||
let matcher = workspace_command.matcher_from_values(&args.paths)?;
|
let matcher = workspace_command.matcher_from_values(&args.paths)?;
|
||||||
let mut tx = workspace_command.start_transaction(&format!("commit {}", commit.id().hex()));
|
let mut tx = workspace_command.start_transaction(&format!("commit {}", commit.id().hex()));
|
||||||
let base_tree = merge_commit_trees(tx.repo(), &commit.parents())?;
|
let base_tree = merge_commit_trees(tx.repo(), &commit.parents())?;
|
||||||
let tree_id = tx.select_diff(ui, &base_tree, &commit.tree()?, matcher.as_ref(), "", false)?;
|
let instructions = format!(
|
||||||
|
"\
|
||||||
|
You are splitting the working-copy commit: {}
|
||||||
|
|
||||||
|
The diff initially shows all changes. Adjust the right side until it shows the
|
||||||
|
contents you want for the first commit. The remainder will be included in the
|
||||||
|
new working-copy commit.
|
||||||
|
",
|
||||||
|
tx.format_commit_summary(&commit)
|
||||||
|
);
|
||||||
|
let tree_id = tx.select_diff(
|
||||||
|
ui,
|
||||||
|
&base_tree,
|
||||||
|
&commit.tree()?,
|
||||||
|
matcher.as_ref(),
|
||||||
|
&instructions,
|
||||||
|
args.interactive,
|
||||||
|
)?;
|
||||||
let middle_tree = tx.repo().store().get_root_tree(&tree_id)?;
|
let middle_tree = tx.repo().store().get_root_tree(&tree_id)?;
|
||||||
if !args.paths.is_empty() && middle_tree.id() == base_tree.id() {
|
if !args.paths.is_empty() && middle_tree.id() == base_tree.id() {
|
||||||
writeln!(
|
writeln!(
|
||||||
|
|
Loading…
Reference in a new issue