Details
Details
Diff Detail
Diff Detail
- Repository
- rHG Mercurial
- Lint
Automatic diff as part of commit; lint not applicable. - Unit
Automatic diff as part of commit; unit tests not applicable.
Automatic diff as part of commit; lint not applicable. |
Automatic diff as part of commit; unit tests not applicable. |
Path | Packages | |||
---|---|---|---|---|
M | rust/hg-core/src/dirstate_tree/dirstate_map.rs (36 lines) | |||
M | rust/hg-core/src/utils/hg_path.rs (5 lines) |
Status | Author | Revision | |
---|---|---|---|
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Abandoned | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin | ||
Closed | SimonSapin |
pub fn new() -> Self { | pub fn new() -> Self { | ||||
Self { | Self { | ||||
parents: None, | parents: None, | ||||
dirty_parents: false, | dirty_parents: false, | ||||
root: ChildNodes::new(), | root: ChildNodes::new(), | ||||
} | } | ||||
} | } | ||||
fn get_node(&self, path: &HgPath) -> Option<&Node> { | |||||
let mut children = &self.root; | |||||
let mut components = path.components(); | |||||
let mut component = | |||||
components.next().expect("expected at least one components"); | |||||
loop { | |||||
let child = children.get(component)?; | |||||
if let Some(next_component) = components.next() { | |||||
component = next_component; | |||||
children = &child.children; | |||||
} else { | |||||
return Some(child); | |||||
} | |||||
} | |||||
} | |||||
fn get_or_insert_node(&mut self, path: &HgPath) -> &mut Node { | fn get_or_insert_node(&mut self, path: &HgPath) -> &mut Node { | ||||
let mut child_nodes = &mut self.root; | let mut child_nodes = &mut self.root; | ||||
let mut inclusive_ancestor_paths = | let mut inclusive_ancestor_paths = | ||||
WithBasename::inclusive_ancestors_of(path); | WithBasename::inclusive_ancestors_of(path); | ||||
let mut ancestor_path = inclusive_ancestor_paths | let mut ancestor_path = inclusive_ancestor_paths | ||||
.next() | .next() | ||||
.expect("expected at least one inclusive ancestor"); | .expect("expected at least one inclusive ancestor"); | ||||
loop { | loop { | ||||
fn copy_map_len(&self) -> usize { | fn copy_map_len(&self) -> usize { | ||||
todo!() | todo!() | ||||
} | } | ||||
fn copy_map_iter(&self) -> CopyMapIter<'_> { | fn copy_map_iter(&self) -> CopyMapIter<'_> { | ||||
todo!() | todo!() | ||||
} | } | ||||
fn copy_map_contains_key(&self, _key: &HgPath) -> bool { | fn copy_map_contains_key(&self, key: &HgPath) -> bool { | ||||
todo!() | if let Some(node) = self.get_node(key) { | ||||
node.copy_source.is_some() | |||||
} else { | |||||
false | |||||
} | |||||
} | } | ||||
fn copy_map_get(&self, _key: &HgPath) -> Option<&HgPathBuf> { | fn copy_map_get(&self, key: &HgPath) -> Option<&HgPathBuf> { | ||||
todo!() | self.get_node(key)?.copy_source.as_ref() | ||||
} | } | ||||
fn copy_map_remove(&mut self, _key: &HgPath) -> Option<HgPathBuf> { | fn copy_map_remove(&mut self, _key: &HgPath) -> Option<HgPathBuf> { | ||||
todo!() | todo!() | ||||
} | } | ||||
fn copy_map_insert( | fn copy_map_insert( | ||||
&mut self, | &mut self, | ||||
_key: HgPathBuf, | _key: HgPathBuf, | ||||
_value: HgPathBuf, | _value: HgPathBuf, | ||||
) -> Option<HgPathBuf> { | ) -> Option<HgPathBuf> { | ||||
todo!() | todo!() | ||||
} | } | ||||
fn len(&self) -> usize { | fn len(&self) -> usize { | ||||
todo!() | todo!() | ||||
} | } | ||||
fn contains_key(&self, _key: &HgPath) -> bool { | fn contains_key(&self, key: &HgPath) -> bool { | ||||
todo!() | self.get(key).is_some() | ||||
} | } | ||||
fn get(&self, _key: &HgPath) -> Option<&DirstateEntry> { | fn get(&self, key: &HgPath) -> Option<&DirstateEntry> { | ||||
todo!() | self.get_node(key)?.entry.as_ref() | ||||
} | } | ||||
fn iter(&self) -> StateMapIter<'_> { | fn iter(&self) -> StateMapIter<'_> { | ||||
todo!() | todo!() | ||||
} | } | ||||
} | } |
pub fn join<T: ?Sized + AsRef<Self>>(&self, other: &T) -> HgPathBuf { | pub fn join<T: ?Sized + AsRef<Self>>(&self, other: &T) -> HgPathBuf { | ||||
let mut inner = self.inner.to_owned(); | let mut inner = self.inner.to_owned(); | ||||
if !inner.is_empty() && inner.last() != Some(&b'/') { | if !inner.is_empty() && inner.last() != Some(&b'/') { | ||||
inner.push(b'/'); | inner.push(b'/'); | ||||
} | } | ||||
inner.extend(other.as_ref().bytes()); | inner.extend(other.as_ref().bytes()); | ||||
HgPathBuf::from_bytes(&inner) | HgPathBuf::from_bytes(&inner) | ||||
} | } | ||||
pub fn components(&self) -> impl Iterator<Item = &HgPath> { | |||||
self.inner.split(|&byte| byte == b'/').map(HgPath::new) | |||||
} | |||||
pub fn parent(&self) -> &Self { | pub fn parent(&self) -> &Self { | ||||
let inner = self.as_bytes(); | let inner = self.as_bytes(); | ||||
HgPath::new(match inner.iter().rposition(|b| *b == b'/') { | HgPath::new(match inner.iter().rposition(|b| *b == b'/') { | ||||
Some(pos) => &inner[..pos], | Some(pos) => &inner[..pos], | ||||
None => &[], | None => &[], | ||||
}) | }) | ||||
} | } | ||||
/// Given a base directory, returns the slice of `self` relative to the | /// Given a base directory, returns the slice of `self` relative to the |