From aa6ad877f2565c9c8d55456908f38bf77e11115b Mon Sep 17 00:00:00 2001 From: Waleed Khan Date: Sat, 23 Dec 2023 00:44:34 -0600 Subject: [PATCH] feat(hide): remove `-D` option from `git hide` --- git-branchless-lib/tests/test_eventlog.rs | 2 +- git-branchless-opts/src/lib.rs | 7 +++-- git-branchless-query/tests/test_query.rs | 2 +- git-branchless/src/commands/hide.rs | 12 ++++---- git-branchless/src/commands/mod.rs | 4 +-- git-branchless/tests/test_branchless.rs | 28 +++++++++++------- git-branchless/tests/test_eventlog.rs | 3 +- git-branchless/tests/test_hide.rs | 18 ++++-------- git-branchless/tests/test_undo.rs | 35 +++++++++++------------ 9 files changed, 56 insertions(+), 55 deletions(-) diff --git a/git-branchless-lib/tests/test_eventlog.rs b/git-branchless-lib/tests/test_eventlog.rs index 7787851a4..a51135c6a 100644 --- a/git-branchless-lib/tests/test_eventlog.rs +++ b/git-branchless-lib/tests/test_eventlog.rs @@ -48,7 +48,7 @@ fn test_different_event_transaction_ids() -> eyre::Result<()> { git.init_repo()?; git.commit_file("test1", 1)?; - git.branchless("hide", &["HEAD"])?; + git.branchless("hide", &["--no-delete-branches", "HEAD"])?; let repo = git.get_repo()?; let conn = repo.get_db_conn()?; diff --git a/git-branchless-opts/src/lib.rs b/git-branchless-opts/src/lib.rs index d57ba55ac..e29321ae1 100644 --- a/git-branchless-opts/src/lib.rs +++ b/git-branchless-opts/src/lib.rs @@ -448,9 +448,10 @@ pub enum Command { #[clap(flatten)] resolve_revset_options: ResolveRevsetOptions, - /// Also delete any branches that are abandoned as a result of this hide. - #[clap(action, short = 'D', long = "delete-branches")] - delete_branches: bool, + /// Don't delete branches that point to commits that would be hidden. + /// (Those commits will remain visible as a result.) + #[clap(action, long = "no-delete-branches")] + no_delete_branches: bool, /// Also recursively hide all visible children commits of the provided /// commits. diff --git a/git-branchless-query/tests/test_query.rs b/git-branchless-query/tests/test_query.rs index 6e9c6654b..3f72d5b73 100644 --- a/git-branchless-query/tests/test_query.rs +++ b/git-branchless-query/tests/test_query.rs @@ -185,7 +185,7 @@ fn test_query_hidden_commits() -> eyre::Result<()> { let test2_oid = git.commit_file("test2", 2)?; git.commit_file("test3", 3)?; - git.branchless("hide", &["HEAD"])?; + git.branchless("hide", &["--no-delete-branches", "HEAD"])?; git.run(&["checkout", &test2_oid.to_string()])?; { diff --git a/git-branchless/src/commands/hide.rs b/git-branchless/src/commands/hide.rs index 69003bee1..32a20dfbb 100644 --- a/git-branchless/src/commands/hide.rs +++ b/git-branchless/src/commands/hide.rs @@ -26,7 +26,7 @@ pub fn hide( git_run_info: &GitRunInfo, revsets: Vec, resolve_revset_options: &ResolveRevsetOptions, - delete_branches: bool, + no_delete_branches: bool, recursive: bool, ) -> EyreExitOr<()> { let now = SystemTime::now(); @@ -44,6 +44,7 @@ pub fn hide( event_cursor, &references_snapshot, )?; + let delete_branches = !no_delete_branches; let commit_sets = match resolve_commits(effects, &repo, &mut dag, &revsets, resolve_revset_options) { @@ -155,16 +156,17 @@ pub fn hide( // This message will look like either of these: // To unhide these X commits, run: git undo // To unhide these X commits and restore X branches, run: git undo - let delete_branches_message = match delete_branches { - true => format!( + let delete_branches_message = if delete_branches && !abandoned_branches.is_empty() { + format!( " and restore {}", Pluralize { determiner: None, amount: abandoned_branches.len(), unit: ("branch", "branches"), } - ), - false => String::new(), + ) + } else { + String::new() }; writeln!( effects.get_output_stream(), diff --git a/git-branchless/src/commands/mod.rs b/git-branchless/src/commands/mod.rs index 617da2cdf..2f5f7eb21 100644 --- a/git-branchless/src/commands/mod.rs +++ b/git-branchless/src/commands/mod.rs @@ -69,14 +69,14 @@ fn command_main(ctx: CommandContext, opts: Opts) -> EyreExitOr<()> { Command::Hide { revsets, resolve_revset_options, - delete_branches, + no_delete_branches, recursive, } => hide::hide( &effects, &git_run_info, revsets, &resolve_revset_options, - delete_branches, + no_delete_branches, recursive, )?, diff --git a/git-branchless/tests/test_branchless.rs b/git-branchless/tests/test_branchless.rs index e29f1d4cb..9f64518aa 100644 --- a/git-branchless/tests/test_branchless.rs +++ b/git-branchless/tests/test_branchless.rs @@ -9,28 +9,31 @@ fn test_commands() -> eyre::Result<()> { git.init_repo()?; git.commit_file("test", 1)?; + git.detach_head()?; + git.commit_file("test2", 2)?; { let stdout = git.smartlog()?; insta::assert_snapshot!(stdout, @r###" : - @ 3df4b93 (> master) create test.txt + O 3df4b93 (master) create test.txt + | + @ 73b746c create test2.txt "###); } { - let (stdout, _stderr) = git.branchless("hide", &["3df4b935"])?; + let (stdout, _stderr) = git.branchless("hide", &["HEAD"])?; insta::assert_snapshot!(stdout, @r###" - Hid commit: 3df4b93 create test.txt - Abandoned 1 branch: master + Hid commit: 73b746c create test2.txt To unhide this 1 commit, run: git undo "###); } { - let (stdout, _stderr) = git.branchless("unhide", &["3df4b935"])?; + let (stdout, _stderr) = git.branchless("unhide", &["HEAD"])?; insta::assert_snapshot!(stdout, @r###" - Unhid commit: 3df4b93 create test.txt + Unhid commit: 73b746c create test2.txt To hide this 1 commit, run: git undo "###); } @@ -38,19 +41,22 @@ fn test_commands() -> eyre::Result<()> { { let (stdout, _stderr) = git.branchless("prev", &[])?; insta::assert_snapshot!(stdout, @r###" - branchless: running command: checkout f777ecc9b0db5ed372b2615695191a8a17f79f24 - @ f777ecc create initial.txt + branchless: running command: checkout master + : + @ 3df4b93 (> master) create test.txt | - O 3df4b93 (master) create test.txt + o 73b746c create test2.txt "###); } { let (stdout, _stderr) = git.branchless("next", &[])?; insta::assert_snapshot!(stdout, @r###" - branchless: running command: checkout master + branchless: running command: checkout 73b746ca864a21fc0c3dedbc937eaa9e279b73eb : - @ 3df4b93 (> master) create test.txt + O 3df4b93 (master) create test.txt + | + @ 73b746c create test2.txt "###); } diff --git a/git-branchless/tests/test_eventlog.rs b/git-branchless/tests/test_eventlog.rs index d320d7d0c..cc2cbf9e6 100644 --- a/git-branchless/tests/test_eventlog.rs +++ b/git-branchless/tests/test_eventlog.rs @@ -18,7 +18,6 @@ fn test_git_v2_31_events() -> eyre::Result<()> { git.run(&["checkout", "HEAD^"])?; git.commit_file("test2", 2)?; git.branchless("hide", &["test1"])?; - git.run(&["branch", "-D", "test1"])?; let effects = Effects::new_suppress_for_test(Glyphs::text()); let repo = git.get_repo()?; @@ -140,7 +139,7 @@ fn test_git_v2_31_events() -> eyre::Result<()> { RefUpdateEvent { timestamp: 0.0, event_tx_id: Id( - 10, + 9, ), ref_name: ReferenceName( "refs/heads/test1", diff --git a/git-branchless/tests/test_hide.rs b/git-branchless/tests/test_hide.rs index 8190ee5e1..1810265a2 100644 --- a/git-branchless/tests/test_hide.rs +++ b/git-branchless/tests/test_hide.rs @@ -173,7 +173,7 @@ fn test_branches_always_visible() -> eyre::Result<()> { git.run(&["branch", "test"])?; git.run(&["checkout", "master"])?; - let (stdout, _stderr) = git.branchless("hide", &["test", "test^"])?; + let (stdout, _stderr) = git.branchless("hide", &["--no-delete-branches", "test", "test^"])?; insta::assert_snapshot!(stdout, @r###" Hid commit: 62fc20d create test1.txt Hid commit: 96d1c37 create test2.txt @@ -213,7 +213,7 @@ fn test_hide_delete_branches() -> eyre::Result<()> { git.run(&["branch", "test"])?; git.run(&["checkout", "master"])?; - let (stdout, _stderr) = git.branchless("hide", &["--delete-branches", "test", "test^"])?; + let (stdout, _stderr) = git.branchless("hide", &["test", "test^"])?; insta::assert_snapshot!(stdout, @r###" Hid commit: 62fc20d create test1.txt Hid commit: 96d1c37 create test2.txt @@ -278,14 +278,8 @@ fn test_hide_delete_multiple_branches() -> eyre::Result<()> { "###); } - let (stdout, _stderr) = git.branchless( - "hide", - &[ - "--delete-branches", - &test1_oid.to_string(), - &test2_oid.to_string(), - ], - )?; + let (stdout, _stderr) = + git.branchless("hide", &[&test1_oid.to_string(), &test2_oid.to_string()])?; insta::assert_snapshot!(stdout, @r###" Hid commit: 62fc20d create test1.txt Hid commit: fe65c1f create test2.txt @@ -313,7 +307,7 @@ fn test_hide_delete_checked_out_branch() -> eyre::Result<()> { git.commit_file("test1", 1)?; git.commit_file("test2", 2)?; - let (stdout, _stderr) = git.branchless("hide", &["--delete-branches", "test"])?; + let (stdout, _stderr) = git.branchless("hide", &["test"])?; insta::assert_snapshot!(stdout, @r###" Hid commit: 96d1c37 create test2.txt branchless: processing 1 update: branch test @@ -551,7 +545,7 @@ fn test_smartlog_show_only_branches() -> eyre::Result<()> { git.run(&["branch", "branch-2", &test2_oid.to_string()])?; git.run(&["branch", "branch-4", &test4_oid.to_string()])?; - git.branchless("hide", &[&test4_oid.to_string()])?; + git.branchless("hide", &["--no-delete-branches", &test4_oid.to_string()])?; git.branchless("hide", &[&test6_oid.to_string()])?; // confirm our baseline: diff --git a/git-branchless/tests/test_undo.rs b/git-branchless/tests/test_undo.rs index e0d695a46..1ee81acca 100644 --- a/git-branchless/tests/test_undo.rs +++ b/git-branchless/tests/test_undo.rs @@ -317,7 +317,6 @@ fn test_undo_hide() -> eyre::Result<()> { git.run(&["checkout", "HEAD^"])?; git.commit_file("test2", 2)?; git.branchless("hide", &["test1"])?; - git.run(&["branch", "-D", "test1"])?; { let (stdout, stderr) = git.run(&["smartlog"])?; @@ -332,7 +331,6 @@ fn test_undo_hide() -> eyre::Result<()> { let event_cursor = run_select_past_event( &git.get_repo()?, vec![ - CursiveTestingEvent::Event('p'.into()), CursiveTestingEvent::Event('p'.into()), CursiveTestingEvent::Event(Key::Enter.into()), CursiveTestingEvent::Event('y'.into()), @@ -436,6 +434,7 @@ fn test_historical_smartlog_visibility() -> eyre::Result<()> { let git = make_git()?; git.init_repo()?; + git.detach_head()?; git.commit_file("test1", 1)?; git.branchless("hide", &["HEAD"])?; @@ -454,9 +453,9 @@ fn test_historical_smartlog_visibility() -> eyre::Result<()> { if git.supports_reference_transactions()? { insta::assert_snapshot!(screen_to_string(&screenshot1), @r###" ┌───────────────────────────────────────────────────┤ Commit graph ├───────────────────────────────────────────────────┐ - │: │ - │% 62fc20d (manually hidden) (master) create test1.txt │ - │ │ + │O f777ecc (master) create initial.txt │ + │| │ + │% 62fc20d (manually hidden) create test1.txt │ │ │ │ │ │ │ @@ -473,16 +472,16 @@ fn test_historical_smartlog_visibility() -> eyre::Result<()> { │ │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────┤ Events ├──────────────────────────────────────────────────────┐ - │Repo after transaction 3 (event 4). Press 'h' for help, 'q' to quit. │ + │Repo after transaction 5 (event 5). Press 'h' for help, 'q' to quit. │ │1. Hide commit 62fc20d create test1.txt │ │ │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ "###); insta::assert_snapshot!(screen_to_string(&screenshot2), @r###" ┌───────────────────────────────────────────────────┤ Commit graph ├───────────────────────────────────────────────────┐ - │: │ - │@ 62fc20d (master) create test1.txt │ - │ │ + │O f777ecc (master) create initial.txt │ + │| │ + │@ 62fc20d create test1.txt │ │ │ │ │ │ │ @@ -499,7 +498,7 @@ fn test_historical_smartlog_visibility() -> eyre::Result<()> { │ │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────┤ Events ├──────────────────────────────────────────────────────┐ - │Repo after transaction 2 (event 3). Press 'h' for help, 'q' to quit. │ + │Repo after transaction 4 (event 4). Press 'h' for help, 'q' to quit. │ │1. Commit 62fc20d create test1.txt │ │ │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ @@ -507,9 +506,9 @@ fn test_historical_smartlog_visibility() -> eyre::Result<()> { } else { insta::assert_snapshot!(screen_to_string(&screenshot1), @r###" ┌───────────────────────────────────────────────────┤ Commit graph ├───────────────────────────────────────────────────┐ - │: │ - │% 62fc20d (manually hidden) (master) create test1.txt │ - │ │ + │O f777ecc (master) create initial.txt │ + │| │ + │% 62fc20d (manually hidden) create test1.txt │ │ │ │ │ │ │ @@ -526,16 +525,16 @@ fn test_historical_smartlog_visibility() -> eyre::Result<()> { │ │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────┤ Events ├──────────────────────────────────────────────────────┐ - │Repo after transaction 2 (event 2). Press 'h' for help, 'q' to quit. │ + │Repo after transaction 3 (event 3). Press 'h' for help, 'q' to quit. │ │1. Hide commit 62fc20d create test1.txt │ │ │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ "###); insta::assert_snapshot!(screen_to_string(&screenshot2), @r###" ┌───────────────────────────────────────────────────┤ Commit graph ├───────────────────────────────────────────────────┐ - │: │ - │@ 62fc20d (master) create test1.txt │ - │ │ + │O f777ecc (master) create initial.txt │ + │| │ + │@ 62fc20d create test1.txt │ │ │ │ │ │ │ @@ -552,7 +551,7 @@ fn test_historical_smartlog_visibility() -> eyre::Result<()> { │ │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────┤ Events ├──────────────────────────────────────────────────────┐ - │Repo after transaction 1 (event 1). Press 'h' for help, 'q' to quit. │ + │Repo after transaction 2 (event 2). Press 'h' for help, 'q' to quit. │ │1. Commit 62fc20d create test1.txt │ │ │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘