mirror of
https://github.com/martinvonz/jj.git
synced 2024-10-23 23:10:01 +00:00
merge: add missing doc comments
This commit is contained in:
parent
be1a6bf127
commit
f0efdf116e
1 changed files with 17 additions and 7 deletions
|
@ -12,7 +12,8 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#![allow(missing_docs)]
|
//! Generic algorithms for working with merged values, plus specializations for
|
||||||
|
//! some common types of merged values.
|
||||||
|
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
@ -110,6 +111,7 @@ pub struct Merge<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> Merge<T> {
|
impl<T> Merge<T> {
|
||||||
|
/// Creates a new merge object from the given removes and adds.
|
||||||
pub fn new(removes: Vec<T>, adds: Vec<T>) -> Self {
|
pub fn new(removes: Vec<T>, adds: Vec<T>) -> Self {
|
||||||
assert_eq!(adds.len(), removes.len() + 1);
|
assert_eq!(adds.len(), removes.len() + 1);
|
||||||
Merge { removes, adds }
|
Merge { removes, adds }
|
||||||
|
@ -142,10 +144,12 @@ impl<T> Merge<T> {
|
||||||
(self.removes, self.adds)
|
(self.removes, self.adds)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The removed values, also called negative terms.
|
||||||
pub fn removes(&self) -> &[T] {
|
pub fn removes(&self) -> &[T] {
|
||||||
&self.removes
|
&self.removes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The removed values, also called positive terms.
|
||||||
pub fn adds(&self) -> &[T] {
|
pub fn adds(&self) -> &[T] {
|
||||||
&self.adds
|
&self.adds
|
||||||
}
|
}
|
||||||
|
@ -197,6 +201,8 @@ impl<T> Merge<T> {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// If this merge can be trivially resolved, returns the value it resolves
|
||||||
|
/// to.
|
||||||
pub fn resolve_trivial(&self) -> Option<&T>
|
pub fn resolve_trivial(&self) -> Option<&T>
|
||||||
where
|
where
|
||||||
T: Eq + Hash,
|
T: Eq + Hash,
|
||||||
|
@ -235,6 +241,7 @@ impl<T> Merge<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Iterator over the terms in a merge. See `Merge::iter()`.
|
||||||
pub struct Iter<'a, T> {
|
pub struct Iter<'a, T> {
|
||||||
merge: &'a Merge<T>,
|
merge: &'a Merge<T>,
|
||||||
i: usize,
|
i: usize,
|
||||||
|
@ -311,10 +318,12 @@ impl<T> Merge<Option<T>> {
|
||||||
Self::resolved(Some(value))
|
Self::resolved(Some(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Whether this represents a resolved value of `None`.
|
||||||
pub fn is_absent(&self) -> bool {
|
pub fn is_absent(&self) -> bool {
|
||||||
matches!(self.as_resolved(), Some(None))
|
matches!(self.as_resolved(), Some(None))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The opposite of `is_absent()`.
|
||||||
pub fn is_present(&self) -> bool {
|
pub fn is_present(&self) -> bool {
|
||||||
!self.is_absent()
|
!self.is_absent()
|
||||||
}
|
}
|
||||||
|
@ -372,17 +381,16 @@ impl<T: ContentHash> ContentHash for Merge<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Merge<TreeId> {
|
impl Merge<TreeId> {
|
||||||
// Creates a resolved merge for a legacy tree id (same as
|
/// Creates a resolved merge for a legacy tree id (same as
|
||||||
// `Merge::resolved()`).
|
/// `Merge::resolved()`).
|
||||||
// TODO(#1624): delete when all callers have been updated to support tree-level
|
// TODO(#1624): delete when all callers have been updated to support tree-level
|
||||||
// conflicts
|
// conflicts
|
||||||
pub fn from_legacy_tree_id(value: TreeId) -> Self {
|
pub fn from_legacy_tree_id(value: TreeId) -> Self {
|
||||||
Merge {
|
Merge::resolved(value)
|
||||||
removes: vec![],
|
|
||||||
adds: vec![value],
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Assumes that this merge is resolved and returns a reference to the
|
||||||
|
/// value. Panics otherwise.
|
||||||
// TODO(#1624): delete when all callers have been updated to support tree-level
|
// TODO(#1624): delete when all callers have been updated to support tree-level
|
||||||
// conflicts
|
// conflicts
|
||||||
pub fn as_legacy_tree_id(&self) -> &TreeId {
|
pub fn as_legacy_tree_id(&self) -> &TreeId {
|
||||||
|
@ -423,6 +431,8 @@ impl Merge<Option<TreeValue>> {
|
||||||
.all(|value| matches!(value, Some(TreeValue::Tree(_)) | None))
|
.all(|value| matches!(value, Some(TreeValue::Tree(_)) | None))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// If this merge contains only non-executable files or absent entries,
|
||||||
|
/// returns a merge of the `FileId`s`.
|
||||||
pub fn to_file_merge(&self) -> Option<Merge<Option<FileId>>> {
|
pub fn to_file_merge(&self) -> Option<Merge<Option<FileId>>> {
|
||||||
self.maybe_map(|term| match term {
|
self.maybe_map(|term| match term {
|
||||||
None => Some(None),
|
None => Some(None),
|
||||||
|
|
Loading…
Reference in a new issue