Skip to content

Commit b59bcf8

Browse files
committed
feat(record): support absent and binary files
1 parent 4ac3a4c commit b59bcf8

File tree

14 files changed

+682
-136
lines changed

14 files changed

+682
-136
lines changed

git-branchless-lib/bin/testing/regression_test_record.rs

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ use std::path::PathBuf;
66

77
use branchless::core::effects::Effects;
88
use branchless::core::formatting::Glyphs;
9-
use branchless::git::{hydrate_tree, process_diff_for_record, FileMode, Repo};
9+
use branchless::git::{hydrate_tree, process_diff_for_record, FileMode, MaybeZeroOid, Repo};
1010
use bstr::ByteSlice;
1111
use eyre::Context;
12-
use scm_record::{File, Section};
12+
use scm_record::{File, Section, SelectedContents};
1313

1414
fn main() -> eyre::Result<()> {
1515
let path_to_repo = std::env::var("PATH_TO_REPO")
@@ -51,11 +51,16 @@ fn main() -> eyre::Result<()> {
5151
}
5252
}
5353
Section::FileMode {
54-
is_toggled: _,
54+
is_toggled,
5555
before: _,
5656
after: _,
57+
}
58+
| Section::Binary {
59+
is_toggled,
60+
old_description: _,
61+
new_description: _,
5762
} => {
58-
unimplemented!("selecting Section::FileMode");
63+
*is_toggled = true;
5964
}
6065
}
6166
}
@@ -65,17 +70,35 @@ fn main() -> eyre::Result<()> {
6570
let entries: HashMap<_, _> = entries
6671
.into_iter()
6772
.map(|file| {
73+
let file_path = file.path.clone().into_owned();
6874
let value = {
69-
let new_file_mode = file
70-
.get_file_mode()
71-
.expect("File mode should have been set");
7275
let (selected, _unselected) = file.get_selected_contents();
73-
let blob_oid = repo.create_blob_from_contents(selected.as_bytes())?;
74-
let file_mode = i32::try_from(new_file_mode).unwrap();
75-
let file_mode = FileMode::from(file_mode);
76-
Some((blob_oid, file_mode))
76+
let blob_oid = match selected {
77+
SelectedContents::Absent => return Ok((file_path, None)),
78+
SelectedContents::Unchanged => {
79+
old_tree.get_oid_for_path(&file.path)?.unwrap_or_default()
80+
}
81+
SelectedContents::Binary {
82+
old_description: _,
83+
new_description: _,
84+
} => new_tree.get_oid_for_path(&file.path)?.unwrap(),
85+
SelectedContents::Present { contents } => MaybeZeroOid::NonZero(
86+
repo.create_blob_from_contents(contents.as_bytes())?,
87+
),
88+
};
89+
match blob_oid {
90+
MaybeZeroOid::Zero => None,
91+
MaybeZeroOid::NonZero(blob_oid) => {
92+
let new_file_mode = file
93+
.get_file_mode()
94+
.expect("File mode should have been set");
95+
let file_mode = i32::try_from(new_file_mode).unwrap();
96+
let file_mode = FileMode::from(file_mode);
97+
Some((blob_oid, file_mode))
98+
}
99+
}
77100
};
78-
Ok((file.path.clone().into_owned(), value))
101+
Ok((file_path, value))
79102
})
80103
.collect::<eyre::Result<_>>()?;
81104

0 commit comments

Comments
 (0)