mirror of
https://github.com/martinvonz/jj.git
synced 2025-05-11 10:22:51 +00:00
files: use borrowed Merge iterator in merge()
Since the underlying Merge data type is no longer (Vec<T>, Vec<T>), it doesn't make sense to build removes/adds Vecs and concatenate them.
This commit is contained in:
parent
f344651d2c
commit
895bbce8c0
@ -516,7 +516,7 @@ pub fn edit_merge_builtin(
|
|||||||
content: Merge<ContentHunk>,
|
content: Merge<ContentHunk>,
|
||||||
) -> Result<MergedTreeId, BuiltinToolError> {
|
) -> Result<MergedTreeId, BuiltinToolError> {
|
||||||
let slices = content.map(|ContentHunk(v)| v.as_slice());
|
let slices = content.map(|ContentHunk(v)| v.as_slice());
|
||||||
let merge_result = files::merge(slices);
|
let merge_result = files::merge(&slices);
|
||||||
let sections = make_merge_sections(merge_result)?;
|
let sections = make_merge_sections(merge_result)?;
|
||||||
let recorder = scm_record::Recorder::new(
|
let recorder = scm_record::Recorder::new(
|
||||||
scm_record::RecordState {
|
scm_record::RecordState {
|
||||||
@ -731,7 +731,7 @@ mod tests {
|
|||||||
);
|
);
|
||||||
let content = extract_as_single_hunk(&merge, store, &path).block_on();
|
let content = extract_as_single_hunk(&merge, store, &path).block_on();
|
||||||
let slices = content.map(|ContentHunk(buf)| buf.as_slice());
|
let slices = content.map(|ContentHunk(buf)| buf.as_slice());
|
||||||
let merge_result = files::merge(slices);
|
let merge_result = files::merge(&slices);
|
||||||
let sections = make_merge_sections(merge_result).unwrap();
|
let sections = make_merge_sections(merge_result).unwrap();
|
||||||
insta::assert_debug_snapshot!(sections, @r###"
|
insta::assert_debug_snapshot!(sections, @r###"
|
||||||
[
|
[
|
||||||
|
@ -109,7 +109,7 @@ pub fn materialize_merge_result(
|
|||||||
output: &mut dyn Write,
|
output: &mut dyn Write,
|
||||||
) -> std::io::Result<()> {
|
) -> std::io::Result<()> {
|
||||||
let slices = single_hunk.map(|content| content.0.as_slice());
|
let slices = single_hunk.map(|content| content.0.as_slice());
|
||||||
let merge_result = files::merge(slices);
|
let merge_result = files::merge(&slices);
|
||||||
match merge_result {
|
match merge_result {
|
||||||
MergeResult::Resolved(content) => {
|
MergeResult::Resolved(content) => {
|
||||||
output.write_all(&content.0)?;
|
output.write_all(&content.0)?;
|
||||||
|
@ -167,14 +167,12 @@ struct SyncRegion {
|
|||||||
right: Range<usize>,
|
right: Range<usize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn merge(slices: Merge<&[u8]>) -> MergeResult {
|
pub fn merge(slices: &Merge<&[u8]>) -> MergeResult {
|
||||||
let (removes, adds) = slices.take();
|
|
||||||
let num_diffs = removes.len();
|
|
||||||
// TODO: Using the first remove as base (first in the inputs) is how it's
|
// TODO: Using the first remove as base (first in the inputs) is how it's
|
||||||
// usually done for 3-way conflicts. Are there better heuristics when there are
|
// usually done for 3-way conflicts. Are there better heuristics when there are
|
||||||
// more than 3 parts?
|
// more than 3 parts?
|
||||||
let mut diff_inputs = removes.to_vec();
|
let num_diffs = slices.removes().len();
|
||||||
diff_inputs.extend(adds);
|
let diff_inputs = slices.removes().chain(slices.adds()).copied().collect_vec();
|
||||||
|
|
||||||
let diff = Diff::for_tokenizer(&diff_inputs, &diff::find_line_ranges);
|
let diff = Diff::for_tokenizer(&diff_inputs, &diff::find_line_ranges);
|
||||||
let mut resolved_hunk = ContentHunk(vec![]);
|
let mut resolved_hunk = ContentHunk(vec![]);
|
||||||
@ -226,7 +224,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn merge(removes: &[&[u8]], adds: &[&[u8]]) -> MergeResult {
|
fn merge(removes: &[&[u8]], adds: &[&[u8]]) -> MergeResult {
|
||||||
super::merge(Merge::new(removes.to_vec(), adds.to_vec()))
|
super::merge(&Merge::new(removes.to_vec(), adds.to_vec()))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -453,7 +453,7 @@ pub fn try_resolve_file_conflict(
|
|||||||
Ok(content)
|
Ok(content)
|
||||||
})?;
|
})?;
|
||||||
let slices = contents.map(|content| content.as_slice());
|
let slices = contents.map(|content| content.as_slice());
|
||||||
let merge_result = files::merge(slices);
|
let merge_result = files::merge(&slices);
|
||||||
match merge_result {
|
match merge_result {
|
||||||
MergeResult::Resolved(merged_content) => {
|
MergeResult::Resolved(merged_content) => {
|
||||||
let id = store.write_file(filename, &mut merged_content.0.as_slice())?;
|
let id = store.write_file(filename, &mut merged_content.0.as_slice())?;
|
||||||
|
@ -1305,7 +1305,7 @@ fn test_merge_simplify_file_conflict() {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
assert!(matches!(
|
assert!(matches!(
|
||||||
jj_lib::files::merge(text_merge.flatten()),
|
jj_lib::files::merge(&text_merge.flatten()),
|
||||||
MergeResult::Conflict(_)
|
MergeResult::Conflict(_)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user