Skip to content

Commit

Permalink
merge: add .cloned() method that maps inner Option<&T> to Option<T>
Browse files Browse the repository at this point in the history
MergedTreeVal::to_merge() will be replaced with this.
  • Loading branch information
yuja committed Aug 12, 2024
1 parent e2ab6d4 commit accd1e3
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
7 changes: 7 additions & 0 deletions lib/src/merge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,13 @@ impl<T> Merge<Option<T>> {
}
}

impl<T: Clone> Merge<Option<&T>> {
/// Creates a new merge by cloning inner `Option<&T>`s.
pub fn cloned(&self) -> Merge<Option<T>> {
self.map(|value| value.cloned())
}
}

impl<T> Merge<Merge<T>> {
/// Flattens a nested merge into a regular merge.
///
Expand Down
6 changes: 3 additions & 3 deletions lib/src/merged_tree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ fn all_tree_entries(
let iter = all_merged_tree_entries(trees).map(|(name, values)| {
let value = match values.resolve_trivial() {
Some(resolved) => MergedTreeVal::Resolved(*resolved),
None => MergedTreeVal::Conflict(values.map(|value| value.cloned())),
None => MergedTreeVal::Conflict(values.cloned()),
};
(name, value)
});
Expand Down Expand Up @@ -441,7 +441,7 @@ fn trees_value<'a>(trees: &'a Merge<Tree>, basename: &RepoPathComponent) -> Merg
if let Some(resolved) = value.resolve_trivial() {
return MergedTreeVal::Resolved(*resolved);
}
MergedTreeVal::Conflict(value.map(|x| x.cloned()))
MergedTreeVal::Conflict(value.cloned())
}

/// The returned conflict will either be resolved or have the same number of
Expand Down Expand Up @@ -522,7 +522,7 @@ fn merge_tree_values(
Ok(Merge::normal(resolved))
} else {
// Failed to merge the files, or the paths are not files
Ok(values.map(|value| value.cloned()))
Ok(values.cloned())
}
}
}
Expand Down

0 comments on commit accd1e3

Please sign in to comment.