From 13ae26bc26bb95469bc26f9a112ff30227310ac0 Mon Sep 17 00:00:00 2001 From: Bobbe Date: Thu, 11 Jul 2024 16:50:14 +0200 Subject: [PATCH 1/2] Adjust get_selected_contents behavior - only return selected = 'Absent' if the file actually doesn't exist (return selected = 'Present' or 'Unchanged' if it's empty) - only return unselected = 'Absent' if there is a unselected file mode change, changing the file mode to 'Absent' --- scm-record/src/types.rs | 20 ++++++++++++++++---- scm-record/tests/test_scm_record.rs | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/scm-record/src/types.rs b/scm-record/src/types.rs index ae8ac4b..9cee5ea 100644 --- a/scm-record/src/types.rs +++ b/scm-record/src/types.rs @@ -273,14 +273,18 @@ impl File<'_> { /// example, the first value would be suitable for staging or committing, /// and the second value would be suitable for potentially recording again. pub fn get_selected_contents(&self) -> (SelectedContents, SelectedContents) { - let mut acc_selected = SelectedContents::Absent; - let mut acc_unselected = SelectedContents::Absent; let Self { old_path: _, path: _, - file_mode: _, + file_mode, sections, } = self; + let mut acc_selected = if file_mode == &None || file_mode == &Some(FileMode::absent()) { + SelectedContents::Absent + } else { + SelectedContents::Unchanged + }; + let mut acc_unselected = SelectedContents::Unchanged; for section in sections { match section { Section::Unchanged { lines } => { @@ -303,6 +307,9 @@ impl File<'_> { } (ChangeType::Added, false) | (ChangeType::Removed, true) => { acc_unselected.push_str(line); + if acc_selected == SelectedContents::Unchanged { + acc_selected.push_str(""); + } } } } @@ -315,7 +322,13 @@ impl File<'_> { } => { if *is_checked && after == &FileMode::absent() { acc_selected = SelectedContents::Absent; + } else if *is_checked && after != &FileMode::absent() { + acc_selected = SelectedContents::Present { + contents: "".to_string(), + }; } else if !is_checked && before == &FileMode::absent() { + acc_selected = SelectedContents::Absent; + } else if !is_checked && after == &FileMode::absent() { acc_unselected = SelectedContents::Absent; } } @@ -331,7 +344,6 @@ impl File<'_> { }; if *is_checked { acc_selected = selected_contents; - acc_unselected = SelectedContents::Unchanged; } else { acc_selected = SelectedContents::Unchanged; acc_unselected = selected_contents; diff --git a/scm-record/tests/test_scm_record.rs b/scm-record/tests/test_scm_record.rs index e8a425c..a3d5402 100644 --- a/scm-record/tests/test_scm_record.rs +++ b/scm-record/tests/test_scm_record.rs @@ -1198,7 +1198,7 @@ fn test_state_binary_selected_contents() -> TestResult { // the UI to never allow selecting both). assert_snapshot!(test(false, true), @r###"(Binary { old_description: Some("abc123 (123 bytes)"), new_description: Some("def456 (456 bytes)") }, Unchanged)"###); - assert_snapshot!(test(true, true), @r###"(Binary { old_description: Some("abc123 (123 bytes)"), new_description: Some("def456 (456 bytes)") }, Unchanged)"###); + assert_snapshot!(test(true, true), @r###"(Binary { old_description: Some("abc123 (123 bytes)"), new_description: Some("def456 (456 bytes)") }, Present { contents: "foo\n" })"###); Ok(()) } From 758da141909d40de7a0b17068e589378356029d8 Mon Sep 17 00:00:00 2001 From: Bobbe Date: Mon, 15 Jul 2024 02:59:07 +0200 Subject: [PATCH 2/2] Fix style --- scm-record/src/types.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-record/src/types.rs b/scm-record/src/types.rs index 9cee5ea..6d08167 100644 --- a/scm-record/src/types.rs +++ b/scm-record/src/types.rs @@ -279,7 +279,7 @@ impl File<'_> { file_mode, sections, } = self; - let mut acc_selected = if file_mode == &None || file_mode == &Some(FileMode::absent()) { + let mut acc_selected = if file_mode.is_none() || file_mode == &Some(FileMode::absent()) { SelectedContents::Absent } else { SelectedContents::Unchanged