just playing with tangled
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

conflicts: extract materialize_merge_result_to_bytes() helper

We have many callers of materialize_merge_result() who just want in-memory
buffer.

+34 -49
+6 -14
cli/src/diff_util.rs
··· 32 32 use jj_lib::backend::CopyRecord; 33 33 use jj_lib::backend::TreeValue; 34 34 use jj_lib::commit::Commit; 35 - use jj_lib::conflicts::materialize_merge_result; 35 + use jj_lib::conflicts::materialize_merge_result_to_bytes; 36 36 use jj_lib::conflicts::materialized_diff_stream; 37 37 use jj_lib::conflicts::MaterializedTreeDiffEntry; 38 38 use jj_lib::conflicts::MaterializedTreeValue; ··· 863 863 id: _, 864 864 contents, 865 865 executable: _, 866 - } => { 867 - let mut data = vec![]; 868 - materialize_merge_result(&contents, &mut data) 869 - .expect("Failed to materialize conflict to in-memory buffer"); 870 - Ok(FileContent { 871 - is_binary: false, 872 - contents: data, 873 - }) 874 - } 866 + } => Ok(FileContent { 867 + is_binary: false, 868 + contents: materialize_merge_result_to_bytes(&contents).into(), 869 + }), 875 870 MaterializedTreeValue::OtherConflict { id } => Ok(FileContent { 876 871 is_binary: false, 877 872 contents: id.describe().into_bytes(), ··· 1181 1176 } => { 1182 1177 mode = if executable { "100755" } else { "100644" }; 1183 1178 hash = DUMMY_HASH.to_owned(); 1184 - let mut data = vec![]; 1185 - materialize_merge_result(&contents, &mut data) 1186 - .expect("Failed to materialize conflict to in-memory buffer"); 1187 1179 content = FileContent { 1188 1180 is_binary: false, // TODO: are we sure this is never binary? 1189 - contents: data, 1181 + contents: materialize_merge_result_to_bytes(&contents).into(), 1190 1182 }; 1191 1183 } 1192 1184 MaterializedTreeValue::OtherConflict { id } => {
+2 -4
cli/src/merge_tools/builtin.rs
··· 12 12 use jj_lib::backend::FileId; 13 13 use jj_lib::backend::MergedTreeId; 14 14 use jj_lib::backend::TreeValue; 15 - use jj_lib::conflicts::materialize_merge_result; 15 + use jj_lib::conflicts::materialize_merge_result_to_bytes; 16 16 use jj_lib::conflicts::materialize_tree_value; 17 17 use jj_lib::conflicts::MaterializedTreeValue; 18 18 use jj_lib::diff::Diff; ··· 211 211 contents, 212 212 executable: _, 213 213 } => { 214 - let mut buf = Vec::new(); 215 - materialize_merge_result(&contents, &mut buf) 216 - .expect("Failed to materialize conflict to in-memory buffer"); 214 + let buf = materialize_merge_result_to_bytes(&contents).into(); 217 215 // TODO: Render the ID somehow? 218 216 let contents = buf_to_file_contents(None, buf); 219 217 Ok(FileInfo {
+4 -7
cli/src/merge_tools/external.rs
··· 12 12 use jj_lib::backend::MergedTreeId; 13 13 use jj_lib::backend::TreeValue; 14 14 use jj_lib::conflicts; 15 - use jj_lib::conflicts::materialize_merge_result; 15 + use jj_lib::conflicts::materialize_merge_result_to_bytes; 16 16 use jj_lib::gitignore::GitIgnoreFile; 17 17 use jj_lib::matchers::Matcher; 18 18 use jj_lib::merge::Merge; ··· 157 157 conflict: MergedTreeValue, 158 158 tree: &MergedTree, 159 159 ) -> Result<MergedTreeId, ConflictResolveError> { 160 - let initial_output_content: Vec<u8> = if editor.merge_tool_edits_conflict_markers { 161 - let mut materialized_conflict = vec![]; 162 - materialize_merge_result(&content, &mut materialized_conflict) 163 - .expect("Writing to an in-memory buffer should never fail"); 164 - materialized_conflict 160 + let initial_output_content = if editor.merge_tool_edits_conflict_markers { 161 + materialize_merge_result_to_bytes(&content) 165 162 } else { 166 - vec![] 163 + BString::default() 167 164 }; 168 165 assert_eq!(content.num_sides(), 2); 169 166 let files: HashMap<&str, &[u8]> = maplit::hashmap! {
+3 -11
lib/src/annotate.rs
··· 32 32 use crate::backend::BackendError; 33 33 use crate::backend::CommitId; 34 34 use crate::commit::Commit; 35 - use crate::conflicts::materialize_merge_result; 35 + use crate::conflicts::materialize_merge_result_to_bytes; 36 36 use crate::conflicts::materialize_tree_value; 37 37 use crate::conflicts::MaterializedTreeValue; 38 38 use crate::diff::Diff; ··· 358 358 })?; 359 359 Ok(file_contents) 360 360 } 361 - MaterializedTreeValue::FileConflict { id, contents, .. } => { 362 - let mut materialized_conflict_buffer = Vec::new(); 363 - materialize_merge_result(&contents, &mut materialized_conflict_buffer).map_err( 364 - |io_err| BackendError::ReadFile { 365 - path: path.to_owned(), 366 - source: Box::new(io_err), 367 - id: id.first().clone().unwrap(), 368 - }, 369 - )?; 370 - Ok(materialized_conflict_buffer) 361 + MaterializedTreeValue::FileConflict { contents, .. } => { 362 + Ok(materialize_merge_result_to_bytes(&contents).into()) 371 363 } 372 364 _ => Ok(Vec::new()), 373 365 }
+13
lib/src/conflicts.rs
··· 243 243 } 244 244 } 245 245 246 + pub fn materialize_merge_result_to_bytes<T: AsRef<[u8]>>(single_hunk: &Merge<T>) -> BString { 247 + let merge_result = files::merge(single_hunk); 248 + match merge_result { 249 + MergeResult::Resolved(content) => content, 250 + MergeResult::Conflict(hunks) => { 251 + let mut output = Vec::new(); 252 + materialize_conflict_hunks(&hunks, &mut output) 253 + .expect("writing to an in-memory buffer should never fail"); 254 + output.into() 255 + } 256 + } 257 + } 258 + 246 259 fn materialize_conflict_hunks(hunks: &[Merge<BString>], output: &mut dyn Write) -> io::Result<()> { 247 260 let num_conflicts = hunks 248 261 .iter()
+2 -5
lib/src/default_index/revset_engine.rs
··· 42 42 use crate::backend::CommitId; 43 43 use crate::backend::MillisSinceEpoch; 44 44 use crate::commit::Commit; 45 - use crate::conflicts::materialize_merge_result; 45 + use crate::conflicts::materialize_merge_result_to_bytes; 46 46 use crate::conflicts::materialize_tree_value; 47 47 use crate::conflicts::MaterializedTreeValue; 48 48 use crate::default_index::AsCompositeIndex; ··· 1346 1346 MaterializedTreeValue::Symlink { id: _, target } => Ok(target.into_bytes()), 1347 1347 MaterializedTreeValue::GitSubmodule(_) => Ok(vec![]), 1348 1348 MaterializedTreeValue::FileConflict { contents, .. } => { 1349 - let mut content = vec![]; 1350 - materialize_merge_result(&contents, &mut content) 1351 - .expect("Failed to materialize conflict to in-memory buffer"); 1352 - Ok(content) 1349 + Ok(materialize_merge_result_to_bytes(&contents).into()) 1353 1350 } 1354 1351 MaterializedTreeValue::OtherConflict { .. } => Ok(vec![]), 1355 1352 MaterializedTreeValue::Tree(id) => {
+2 -4
lib/src/local_working_copy.rs
··· 61 61 use crate::backend::TreeValue; 62 62 use crate::commit::Commit; 63 63 use crate::conflicts; 64 - use crate::conflicts::materialize_merge_result; 64 + use crate::conflicts::materialize_merge_result_to_bytes; 65 65 use crate::conflicts::materialize_tree_value; 66 66 use crate::conflicts::MaterializedTreeValue; 67 67 use crate::file_util::check_symlink_support; ··· 1597 1597 contents, 1598 1598 executable, 1599 1599 } => { 1600 - let mut data = vec![]; 1601 - materialize_merge_result(&contents, &mut data) 1602 - .expect("Failed to materialize conflict to in-memory buffer"); 1600 + let data = materialize_merge_result_to_bytes(&contents).into(); 1603 1601 self.write_conflict(&disk_path, data, executable)? 1604 1602 } 1605 1603 MaterializedTreeValue::OtherConflict { id } => {
+2 -4
lib/tests/test_conflicts.rs
··· 15 15 use indoc::indoc; 16 16 use jj_lib::backend::FileId; 17 17 use jj_lib::conflicts::extract_as_single_hunk; 18 - use jj_lib::conflicts::materialize_merge_result; 18 + use jj_lib::conflicts::materialize_merge_result_to_bytes; 19 19 use jj_lib::conflicts::parse_conflict; 20 20 use jj_lib::conflicts::update_from_content; 21 21 use jj_lib::merge::Merge; ··· 1063 1063 path: &RepoPath, 1064 1064 conflict: &Merge<Option<FileId>>, 1065 1065 ) -> String { 1066 - let mut result: Vec<u8> = vec![]; 1067 1066 let contents = extract_as_single_hunk(conflict, store, path) 1068 1067 .block_on() 1069 1068 .unwrap(); 1070 - materialize_merge_result(&contents, &mut result).unwrap(); 1071 - String::from_utf8(result).unwrap() 1069 + String::from_utf8(materialize_merge_result_to_bytes(&contents).into()).unwrap() 1072 1070 }