ok/jj
1
0
Fork 0
forked from mirrors/jj

merged_tree: extract value() function of non-legacy trees

This commit is contained in:
Yuya Nishihara 2023-11-20 15:28:08 +09:00
parent ca3f549c9e
commit 4ad3db2e84

View file

@ -177,17 +177,7 @@ impl MergedTree {
}
other => MergedTreeVal::Resolved(other),
},
MergedTree::Merge(trees) => {
if let Some(tree) = trees.as_resolved() {
return MergedTreeVal::Resolved(tree.value(basename));
}
let value = trees.map(|tree| tree.value(basename));
if let Some(resolved) = value.resolve_trivial() {
return MergedTreeVal::Resolved(*resolved);
}
MergedTreeVal::Conflict(value.map(|x| x.cloned()))
}
MergedTree::Merge(trees) => trees_value(trees, basename),
}
}
@ -460,6 +450,17 @@ fn merged_tree_basenames<'a>(
}
}
fn trees_value<'a>(trees: &'a Merge<Tree>, basename: &RepoPathComponent) -> MergedTreeVal<'a> {
if let Some(tree) = trees.as_resolved() {
return MergedTreeVal::Resolved(tree.value(basename));
}
let value = trees.map(|tree| tree.value(basename));
if let Some(resolved) = value.resolve_trivial() {
return MergedTreeVal::Resolved(*resolved);
}
MergedTreeVal::Conflict(value.map(|x| x.cloned()))
}
fn merge_trees(merge: &Merge<Tree>) -> Result<Merge<Tree>, TreeMergeError> {
if let Some(tree) = merge.resolve_trivial() {
return Ok(Merge::resolved(tree.clone()));