diff --git a/docs/git-comparison.md b/docs/git-comparison.md index 893fd54f4..0b34f8868 100644 --- a/docs/git-comparison.md +++ b/docs/git-comparison.md @@ -90,7 +90,7 @@ commit), but that's left out of the table to keep it simple. For example, Abandon the current change and start a new change - jj prune + jj abandon git reset --hard (cannot be undone) diff --git a/docs/tutorial.md b/docs/tutorial.md index 7f118d191..dce40cab0 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -307,9 +307,9 @@ o 661432c51c08 cf49e6bec410 martinvonz@google.com 2021-05-26 12:39:12.000 -07:00 Note that commit C automatically got rebased on top of the resolved B2, and that C is also resolved (since it modified only a different file). -By the way, if we want to get rid of B1 now, we can run `jj prune 47e336632333`. -That will hide the commit from the log output and will rebase any descendants to -its parent. +By the way, if we want to get rid of B1 now, we can run `jj abandon +47e336632333`. That will hide the commit from the log output and will rebase any +descendants to its parent. ## The operation log diff --git a/lib/src/repo.rs b/lib/src/repo.rs index a62d43fdb..f7f8d68b6 100644 --- a/lib/src/repo.rs +++ b/lib/src/repo.rs @@ -610,8 +610,9 @@ impl MutableRepo { if current_checkout.is_empty() && !(current_checkout.is_pruned() || self.evolution().is_obsolete(¤t_checkout_id)) { - // Prune the checkout we're leaving if it's empty. - // TODO: Also prune it if the only changes are conflicts that got materialized. + // Abandon the checkout we're leaving if it's empty. + // TODO: Also abandon it if the only changes are conflicts that got + // materialized. CommitBuilder::for_rewrite_from(settings, self.store(), ¤t_checkout) .set_pruned(true) .write_to_repo(self); diff --git a/lib/tests/test_rewrite.rs b/lib/tests/test_rewrite.rs index 2425832bb..409ecae01 100644 --- a/lib/tests/test_rewrite.rs +++ b/lib/tests/test_rewrite.rs @@ -273,8 +273,8 @@ fn test_rebase_descendants_degenerate_merge(use_git: bool) { let settings = testutils::user_settings(); let (_temp_dir, repo) = testutils::init_repo(&settings, use_git); - // Commit 2 was replaced by commit 1 (maybe it was pruned). Commit 4 should get - // rebased to have only 3 as parent (not 1 and 3). + // Commit 2 was replaced by commit 1 (maybe it was abandoned). Commit 4 should + // get rebased to have only 3 as parent (not 1 and 3). // // 4 // |\ @@ -308,7 +308,7 @@ fn test_rebase_descendants_widen_merge(use_git: bool) { let settings = testutils::user_settings(); let (_temp_dir, repo) = testutils::init_repo(&settings, use_git); - // Commit 5 was replaced by commits 2 and 3 (maybe 5 was pruned). Commit 6 + // Commit 5 was replaced by commits 2 and 3 (maybe 5 was abandoned). Commit 6 // should get rebased to have 2, 3, and 4 as parents (in that order). // // 6 diff --git a/src/commands.rs b/src/commands.rs index dcbb78578..bf882720b 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -871,19 +871,18 @@ With the `--from` and/or `--to` options, shows the difference from/to the given .default_value("@") .help("The revision to duplicate"), ); - // TODO: Maybe this should be renamed to `jj abandon`? Or `jj drop`? - let prune_command = SubCommand::with_name("prune") + let abandon_command = SubCommand::with_name("abandon") .about("Abandon a revision") .long_about( "Abandon a revision, rebasing descendants onto its parent(s). The behavior is similar \ - to `jj restore`; the difference is that `jj prune` gives you a new change, while `jj \ - restore` updates the existing change.", + to `jj restore`; the difference is that `jj abandon` gives you a new change, while \ + `jj restore` updates the existing change.", ) .arg( Arg::with_name("revision") .index(1) .default_value("@") - .help("The revision(s) to prune"), + .help("The revision(s) to abandon"), ); let new_command = SubCommand::with_name("new") .about("Create a new, empty change") @@ -891,7 +890,7 @@ With the `--from` and/or `--to` options, shows the difference from/to the given "Create a new, empty change. This may be useful if you want to make some changes \ you're unsure of on top of the working copy. If the changes turned out to useful, \ you can `jj squash` them into the previous working copy. If they turned out to be \ - unsuccessful, you can `jj prune` them and `jj co :@` the previous working copy.", + unsuccessful, you can `jj abandon` them and `jj co :@` the previous working copy.", ) .arg( Arg::with_name("revision") @@ -908,7 +907,7 @@ With the `--from` and/or `--to` options, shows the difference from/to the given .long_about( "Move changes from a revision into its parent. After moving the changes into the \ parent, the child revision will have the same content state as before. If that means \ - that the change is now empty compared to its parent, it will be pruned. Note that \ + that the change is now empty compared to its parent, it will be abandon. Note that \ this will always be the case without `--interactive`.", ) .arg(rev_arg()) @@ -919,7 +918,7 @@ With the `--from` and/or `--to` options, shows the difference from/to the given .help("Interactively squash part of the changes"), ); // TODO: It doesn't make much sense to run this without -i. We should make that - // the default. We should also prune the parent commit if that becomes empty. + // the default. We should also abandon the parent commit if that becomes empty. let unsquash_command = SubCommand::with_name("unsquash") .about("Move changes from a revision's parent into the revision") .arg(rev_arg()) @@ -931,7 +930,7 @@ With the `--from` and/or `--to` options, shows the difference from/to the given ); // TODO: This command is not very compatible with the current implementation of // evolution. Once we've removed support for evolution (as I hope to do), - // this command will become equivalent to prune (or perhaps it's the other + // this command will become equivalent to abandon (or perhaps it's the other // way around). let discard_command = SubCommand::with_name("discard") .about("Discard a revision and its descendants (avoid command for now)") @@ -1344,7 +1343,7 @@ It is possible to mutating commands when loading the repo at an earlier operatio close_command, open_command, duplicate_command, - prune_command, + abandon_command, new_command, squash_command, unsquash_command, @@ -1805,7 +1804,7 @@ fn log_template(settings: &UserSettings) -> String { "branches: " branches "\n" "tags: " tags "\n" "open: " open "\n" - "pruned: " pruned "\n" + "abandoned: " abandoned "\n" "obsolete: " obsolete "\n" "orphan: " orphan "\n" "divergent: " divergent "\n" @@ -1829,7 +1828,7 @@ fn graph_log_template(settings: &UserSettings) -> String { " " label("timestamp", author.timestamp()) " " branches " " tags - if(pruned, label("pruned", " pruned")) + if(abandoned, label("abandoned", " abandoned")) if(obsolete, label("obsolete", " obsolete")) if(orphan, label("orphan", " orphan")) if(divergent, label("divergent", " divergent")) @@ -2147,7 +2146,7 @@ fn cmd_duplicate( Ok(()) } -fn cmd_prune( +fn cmd_abandon( ui: &mut Ui, command: &CommandHelper, sub_matches: &ArgMatches, @@ -2161,10 +2160,10 @@ fn cmd_prune( } let repo = repo_command.repo(); let transaction_description = if predecessors.len() == 1 { - format!("prune commit {}", predecessors[0].id().hex()) + format!("abandon commit {}", predecessors[0].id().hex()) } else { format!( - "prune commit {} and {} more", + "abandon commit {} and {} more", predecessors[0].id().hex(), predecessors.len() - 1 ) @@ -2248,9 +2247,9 @@ from the source will be moved into the parent. } else { new_parent_tree_id = commit.tree().id().clone(); } - // Prune the child if the parent now has all the content from the child (always - // the case in the non-interactive case). - let prune_child = &new_parent_tree_id == commit.tree().id(); + // Abandon the child if the parent now has all the content from the child + // (always the case in the non-interactive case). + let abandon_child = &new_parent_tree_id == commit.tree().id(); let new_parent = CommitBuilder::for_rewrite_from(ui.settings(), repo.store(), parent) .set_tree(new_parent_tree_id) .set_predecessors(vec![parent.id().clone(), commit.id().clone()]) @@ -2258,7 +2257,7 @@ from the source will be moved into the parent. // Commit the remainder on top of the new parent commit. CommitBuilder::for_rewrite_from(ui.settings(), repo.store(), &commit) .set_parents(vec![new_parent.id().clone()]) - .set_pruned(prune_child) + .set_pruned(abandon_child) .write_to_repo(mut_repo); repo_command.finish_transaction(ui, tx)?; Ok(()) @@ -2309,13 +2308,13 @@ aborted. } else { new_parent_tree_id = parent_base_tree.id().clone(); } - // Prune the parent if it is now empty (always the case in the non-interactive + // Abandon the parent if it is now empty (always the case in the non-interactive // case). - let prune_parent = &new_parent_tree_id == parent_base_tree.id(); + let abandon_parent = &new_parent_tree_id == parent_base_tree.id(); let new_parent = CommitBuilder::for_rewrite_from(ui.settings(), repo.store(), parent) .set_tree(new_parent_tree_id) .set_predecessors(vec![parent.id().clone(), commit.id().clone()]) - .set_pruned(prune_parent) + .set_pruned(abandon_parent) .write_to_repo(mut_repo); // Commit the new child on top of the new parent. CommitBuilder::for_rewrite_from(ui.settings(), repo.store(), &commit) @@ -2885,7 +2884,11 @@ fn cmd_debug( writeln!(ui, "Number of merges: {}", stats.num_merges)?; writeln!(ui, "Max generation number: {}", stats.max_generation_number)?; writeln!(ui, "Number of heads: {}", stats.num_heads)?; - writeln!(ui, "Number of pruned commits: {}", stats.num_pruned_commits)?; + writeln!( + ui, + "Number of abandoned commits: {}", + stats.num_pruned_commits + )?; writeln!(ui, "Number of changes: {}", stats.num_changes)?; writeln!(ui, "Stats per level:")?; for (i, level) in stats.levels.iter().enumerate() { @@ -3653,8 +3656,8 @@ where cmd_open(&mut ui, &command_helper, sub_matches) } else if let Some(sub_matches) = matches.subcommand_matches("duplicate") { cmd_duplicate(&mut ui, &command_helper, sub_matches) - } else if let Some(sub_matches) = matches.subcommand_matches("prune") { - cmd_prune(&mut ui, &command_helper, sub_matches) + } else if let Some(sub_matches) = matches.subcommand_matches("abandon") { + cmd_abandon(&mut ui, &command_helper, sub_matches) } else if let Some(sub_matches) = matches.subcommand_matches("new") { cmd_new(&mut ui, &command_helper, sub_matches) } else if let Some(sub_matches) = matches.subcommand_matches("squash") { diff --git a/src/formatter.rs b/src/formatter.rs index c85080958..c92c01be0 100644 --- a/src/formatter.rs +++ b/src/formatter.rs @@ -92,7 +92,7 @@ fn config_colors(user_settings: &UserSettings) -> HashMap { result.insert(String::from("branches"), String::from("magenta")); result.insert(String::from("tags"), String::from("magenta")); result.insert(String::from("git_refs"), String::from("magenta")); - result.insert(String::from("pruned"), String::from("red")); + result.insert(String::from("abandoned"), String::from("red")); result.insert(String::from("obsolete"), String::from("red")); result.insert(String::from("orphan"), String::from("red")); result.insert(String::from("divergent"), String::from("red")); diff --git a/src/template_parser.rs b/src/template_parser.rs index 39d5be1d4..179fc2978 100644 --- a/src/template_parser.rs +++ b/src/template_parser.rs @@ -238,7 +238,7 @@ fn parse_commit_keyword<'a>(repo: RepoRef<'a>, pair: Pair) -> (Property<'a "author" => Property::Signature(Box::new(AuthorProperty)), "committer" => Property::Signature(Box::new(CommitterProperty)), "open" => Property::Boolean(Box::new(OpenProperty)), - "pruned" => Property::Boolean(Box::new(PrunedProperty)), + "abandoned" => Property::Boolean(Box::new(PrunedProperty)), "current_checkout" => Property::Boolean(Box::new(CurrentCheckoutProperty { repo })), "branches" => Property::String(Box::new(BranchProperty { repo })), "tags" => Property::String(Box::new(TagProperty { repo })),