Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • mercurial/mercurial-devel
1 result
Show changes
Commits on Source (3)
Showing
with 66 additions and 59 deletions
[workspace] [workspace]
members = ["hg-core", "hg-cpython", "rhg"] members = ["hg-core", "hg-cpython", "rhg"]
exclude = ["chg", "hgcli"] exclude = ["chg", "hgcli"]
resolver = "2"
...@@ -107,7 +107,7 @@ ...@@ -107,7 +107,7 @@
) { ) {
self.sections self.sections
.entry(section) .entry(section)
.or_insert_with(HashMap::new) .or_default()
.insert(item, ConfigValue { bytes: value, line }); .insert(item, ConfigValue { bytes: value, line });
} }
...@@ -178,7 +178,7 @@ ...@@ -178,7 +178,7 @@
.expect("Path::parent fail on a file we’ve read"); .expect("Path::parent fail on a file we’ve read");
// `Path::join` with an absolute argument correctly ignores the // `Path::join` with an absolute argument correctly ignores the
// base path // base path
let filename = dir.join(&get_path_from_bytes(&filename_bytes)); let filename = dir.join(get_path_from_bytes(&filename_bytes));
match std::fs::read(&filename) { match std::fs::read(&filename) {
Ok(data) => { Ok(data) => {
layers.push(current_layer); layers.push(current_layer);
......
...@@ -758,7 +758,7 @@ ...@@ -758,7 +758,7 @@
let tmpdir = tempfile::tempdir().unwrap(); let tmpdir = tempfile::tempdir().unwrap();
let tmpdir_path = tmpdir.path(); let tmpdir_path = tmpdir.path();
let mut included_file = let mut included_file =
File::create(&tmpdir_path.join("included.rc")).unwrap(); File::create(tmpdir_path.join("included.rc")).unwrap();
included_file.write_all(b"[section]\nitem=value1").unwrap(); included_file.write_all(b"[section]\nitem=value1").unwrap();
let base_config_path = tmpdir_path.join("base.rc"); let base_config_path = tmpdir_path.join("base.rc");
......
...@@ -205,8 +205,7 @@ ...@@ -205,8 +205,7 @@
graph: &impl Graph, graph: &impl Graph,
revs: &[BaseRevision], revs: &[BaseRevision],
) -> Result<Vec<Revision>, GraphError> { ) -> Result<Vec<Revision>, GraphError> {
let iter_revs: Vec<_> = let iter_revs: Vec<_> = revs.iter().cloned().map(Revision).collect();
revs.into_iter().cloned().map(Revision).collect();
let heads = heads(graph, iter_revs.iter())?; let heads = heads(graph, iter_revs.iter())?;
let mut as_vec: Vec<Revision> = heads.iter().cloned().collect(); let mut as_vec: Vec<Revision> = heads.iter().cloned().collect();
as_vec.sort_unstable(); as_vec.sort_unstable();
......
...@@ -178,7 +178,7 @@ ...@@ -178,7 +178,7 @@
ChildNodes::InMemory(nodes) => Ok(nodes), ChildNodes::InMemory(nodes) => Ok(nodes),
ChildNodes::OnDisk(nodes) => { ChildNodes::OnDisk(nodes) => {
*unreachable_bytes += *unreachable_bytes +=
std::mem::size_of_val::<[on_disk::Node]>(nodes) as u32; std::mem::size_of_val::<[on_disk::Node]>(*nodes) as u32;
let nodes = nodes let nodes = nodes
.iter() .iter()
.map(|node| { .map(|node| {
...@@ -764,7 +764,7 @@ ...@@ -764,7 +764,7 @@
) -> Result<bool, DirstateV2ParseError> { ) -> Result<bool, DirstateV2ParseError> {
let was_tracked = old_entry_opt.map_or(false, |e| e.tracked()); let was_tracked = old_entry_opt.map_or(false, |e| e.tracked());
let had_entry = old_entry_opt.is_some(); let had_entry = old_entry_opt.is_some();
let tracked_count_increment = if was_tracked { 0 } else { 1 }; let tracked_count_increment = u32::from(!was_tracked);
let mut new = false; let mut new = false;
let node = self.get_or_insert_node(filename, |ancestor| { let node = self.get_or_insert_node(filename, |ancestor| {
......
...@@ -414,6 +414,8 @@ ...@@ -414,6 +414,8 @@
} }
fn synthesize_unix_mode(&self) -> u32 { fn synthesize_unix_mode(&self) -> u32 {
// Some platforms' libc don't have the same type (MacOS uses i32 here)
#[allow(clippy::unnecessary_cast)]
let file_type = if self.flags().contains(Flags::MODE_IS_SYMLINK) { let file_type = if self.flags().contains(Flags::MODE_IS_SYMLINK) {
libc::S_IFLNK as u32 libc::S_IFLNK as u32
} else { } else {
...@@ -529,6 +531,8 @@ ...@@ -529,6 +531,8 @@
flags.set(Flags::WDIR_TRACKED, wc_tracked); flags.set(Flags::WDIR_TRACKED, wc_tracked);
flags.set(Flags::P1_TRACKED, p1_tracked); flags.set(Flags::P1_TRACKED, p1_tracked);
flags.set(Flags::P2_INFO, p2_info); flags.set(Flags::P2_INFO, p2_info);
// Some platforms' libc don't have the same type (MacOS uses i32 here)
#[allow(clippy::unnecessary_cast)]
let size = if let Some((m, s)) = mode_size_opt { let size = if let Some((m, s)) = mode_size_opt {
let exec_perm = m & (libc::S_IXUSR as u32) != 0; let exec_perm = m & (libc::S_IXUSR as u32) != 0;
let is_symlink = m & (libc::S_IFMT as u32) == libc::S_IFLNK as u32; let is_symlink = m & (libc::S_IFMT as u32) == libc::S_IFLNK as u32;
......
...@@ -249,7 +249,7 @@ ...@@ -249,7 +249,7 @@
} }
} }
fn force<'b>(&self, ignore_fn: &IgnoreFnType<'b>) -> bool { fn force(&self, ignore_fn: &IgnoreFnType<'_>) -> bool {
match self.parent { match self.parent {
None => false, None => false,
Some(parent) => { Some(parent) => {
......
...@@ -332,7 +332,7 @@ ...@@ -332,7 +332,7 @@
FastHashMap::default(); FastHashMap::default();
for &rev in self.undecided.as_ref().unwrap() { for &rev in self.undecided.as_ref().unwrap() {
for p in ParentsIterator::graph_parents(&self.graph, rev)? { for p in ParentsIterator::graph_parents(&self.graph, rev)? {
children.entry(p).or_insert_with(Vec::new).push(rev); children.entry(p).or_default().push(rev);
} }
} }
self.children_cache = Some(children); self.children_cache = Some(children);
...@@ -695,7 +695,7 @@ ...@@ -695,7 +695,7 @@
#[test] #[test]
fn test_bidirectional_sample() -> Result<(), GraphError> { fn test_bidirectional_sample() -> Result<(), GraphError> {
let mut disco = full_disco(); let mut disco = full_disco();
disco.undecided = Some((0..=13).into_iter().map(Revision).collect()); disco.undecided = Some((0..=13).map(Revision).collect());
let (sample_set, size) = disco.bidirectional_sample(7)?; let (sample_set, size) = disco.bidirectional_sample(7)?;
assert_eq!(size, 7); assert_eq!(size, 7);
......
...@@ -629,8 +629,7 @@ ...@@ -629,8 +629,7 @@
normalize_path_bytes(&get_bytes_from_path(source)); normalize_path_bytes(&get_bytes_from_path(source));
let source_root = get_path_from_bytes(&normalized_source); let source_root = get_path_from_bytes(&normalized_source);
let source_root = let source_root = source_root.parent().unwrap_or(source_root);
source_root.parent().unwrap_or_else(|| source_root.deref());
let path = source_root.join(get_path_from_bytes(pattern)); let path = source_root.join(get_path_from_bytes(pattern));
let new_root = path.parent().unwrap_or_else(|| path.deref()); let new_root = path.parent().unwrap_or_else(|| path.deref());
...@@ -682,11 +681,10 @@ ...@@ -682,11 +681,10 @@
assert_eq!(escape_pattern(untouched), untouched.to_vec()); assert_eq!(escape_pattern(untouched), untouched.to_vec());
// All escape codes // All escape codes
assert_eq!( assert_eq!(
escape_pattern(br#"()[]{}?*+-|^$\\.&~#\t\n\r\v\f"#), escape_pattern(br"()[]{}?*+-|^$\\.&~#\t\n\r\v\f"),
br#"\(\)\[\]\{\}\?\*\+\-\|\^\$\\\\\.\&\~\#\\t\\n\\r\\v\\f"# br"\(\)\[\]\{\}\?\*\+\-\|\^\$\\\\\.\&\~\#\\t\\n\\r\\v\\f".to_vec()
.to_vec()
); );
} }
#[test] #[test]
fn glob_test() { fn glob_test() {
...@@ -688,16 +686,16 @@ ...@@ -688,16 +686,16 @@
); );
} }
#[test] #[test]
fn glob_test() { fn glob_test() {
assert_eq!(glob_to_re(br#"?"#), br#"."#); assert_eq!(glob_to_re(br"?"), br".");
assert_eq!(glob_to_re(br#"*"#), br#"[^/]*"#); assert_eq!(glob_to_re(br"*"), br"[^/]*");
assert_eq!(glob_to_re(br#"**"#), br#".*"#); assert_eq!(glob_to_re(br"**"), br".*");
assert_eq!(glob_to_re(br#"**/a"#), br#"(?:.*/)?a"#); assert_eq!(glob_to_re(br"**/a"), br"(?:.*/)?a");
assert_eq!(glob_to_re(br#"a/**/b"#), br#"a/(?:.*/)?b"#); assert_eq!(glob_to_re(br"a/**/b"), br"a/(?:.*/)?b");
assert_eq!(glob_to_re(br#"[a*?!^][^b][!c]"#), br#"[a*?!^][\^b][^c]"#); assert_eq!(glob_to_re(br"[a*?!^][^b][!c]"), br"[a*?!^][\^b][^c]");
assert_eq!(glob_to_re(br#"{a,b}"#), br#"(?:a|b)"#); assert_eq!(glob_to_re(br"{a,b}"), br"(?:a|b)");
assert_eq!(glob_to_re(br#".\*\?"#), br#"\.\*\?"#); assert_eq!(glob_to_re(br".\*\?"), br"\.\*\?");
} }
#[test] #[test]
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
use crate::filepatterns::normalize_path_bytes; use crate::filepatterns::normalize_path_bytes;
use std::collections::HashSet; use std::collections::HashSet;
use std::fmt::{Display, Error, Formatter}; use std::fmt::{Display, Error, Formatter};
use std::ops::Deref;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::{borrow::ToOwned, collections::BTreeSet}; use std::{borrow::ToOwned, collections::BTreeSet};
...@@ -183,7 +182,7 @@ ...@@ -183,7 +182,7 @@
pub fn new(files: Vec<HgPathBuf>) -> Result<Self, HgPathError> { pub fn new(files: Vec<HgPathBuf>) -> Result<Self, HgPathError> {
let dirs = DirsMultiset::from_manifest(&files)?; let dirs = DirsMultiset::from_manifest(&files)?;
Ok(Self { Ok(Self {
files: HashSet::from_iter(files.into_iter()), files: HashSet::from_iter(files),
dirs, dirs,
sorted_visitchildrenset_candidates: OnceCell::new(), sorted_visitchildrenset_candidates: OnceCell::new(),
}) })
...@@ -316,7 +315,7 @@ ...@@ -316,7 +315,7 @@
pub fn new(ignore_patterns: Vec<IgnorePattern>) -> PatternResult<Self> { pub fn new(ignore_patterns: Vec<IgnorePattern>) -> PatternResult<Self> {
let (files, _) = roots_and_dirs(&ignore_patterns); let (files, _) = roots_and_dirs(&ignore_patterns);
let dirs = DirsMultiset::from_manifest(&files)?; let dirs = DirsMultiset::from_manifest(&files)?;
let files: HashSet<HgPathBuf> = HashSet::from_iter(files.into_iter()); let files: HashSet<HgPathBuf> = HashSet::from_iter(files);
let prefix = ignore_patterns.iter().all(|k| { let prefix = ignore_patterns.iter().all(|k| {
matches!(k.syntax, PatternSyntax::Path | PatternSyntax::RelPath) matches!(k.syntax, PatternSyntax::Path | PatternSyntax::RelPath)
...@@ -773,6 +772,6 @@ ...@@ -773,6 +772,6 @@
/// Returns the regex pattern and a function that matches an `HgPath` against /// Returns the regex pattern and a function that matches an `HgPath` against
/// said regex formed by the given ignore patterns. /// said regex formed by the given ignore patterns.
fn build_regex_match<'a, 'b>( fn build_regex_match<'a>(
ignore_patterns: &'a [IgnorePattern], ignore_patterns: &[IgnorePattern],
glob_suffix: &[u8], glob_suffix: &[u8],
...@@ -778,5 +777,5 @@ ...@@ -778,5 +777,5 @@
glob_suffix: &[u8], glob_suffix: &[u8],
) -> PatternResult<(Vec<u8>, IgnoreFnType<'b>)> { ) -> PatternResult<(Vec<u8>, IgnoreFnType<'a>)> {
let mut regexps = vec![]; let mut regexps = vec![];
let mut exact_set = HashSet::new(); let mut exact_set = HashSet::new();
...@@ -958,7 +957,7 @@ ...@@ -958,7 +957,7 @@
} else { } else {
b"." b"."
}; };
dirs.contains(dir.deref()) dirs.contains(dir)
}; };
match_funcs.push(Box::new(match_func)); match_funcs.push(Box::new(match_func));
......
...@@ -686,7 +686,7 @@ ...@@ -686,7 +686,7 @@
} }
file.write_all(&data)?; file.write_all(&data)?;
file.flush()?; file.flush()?;
file.seek(SeekFrom::Current(0)) file.stream_position()
})() })()
.when_writing_file(&data_filename)?; .when_writing_file(&data_filename)?;
......
...@@ -248,8 +248,8 @@ ...@@ -248,8 +248,8 @@
) -> Result<Self, HgError> { ) -> Result<Self, HgError> {
let index_path = index_path.as_ref(); let index_path = index_path.as_ref();
let index = { let index = {
match store_vfs.mmap_open_opt(&index_path)? { match store_vfs.mmap_open_opt(index_path)? {
None => Index::new(Box::new(vec![])), None => Index::new(Box::<Vec<_>>::default()),
Some(index_mmap) => { Some(index_mmap) => {
let index = Index::new(Box::new(index_mmap))?; let index = Index::new(Box::new(index_mmap))?;
Ok(index) Ok(index)
......
...@@ -348,7 +348,7 @@ ...@@ -348,7 +348,7 @@
assert_eq!(Node::from_hex(SAMPLE_NODE_HEX).unwrap(), SAMPLE_NODE); assert_eq!(Node::from_hex(SAMPLE_NODE_HEX).unwrap(), SAMPLE_NODE);
assert!(Node::from_hex(not_hex).is_err()); assert!(Node::from_hex(not_hex).is_err());
assert!(Node::from_hex(too_short).is_err()); assert!(Node::from_hex(too_short).is_err());
assert!(Node::from_hex(&too_long).is_err()); assert!(Node::from_hex(too_long).is_err());
} }
#[test] #[test]
......
...@@ -656,7 +656,7 @@ ...@@ -656,7 +656,7 @@
impl fmt::Debug for NodeTree { impl fmt::Debug for NodeTree {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let readonly: &[Block] = &*self.readonly; let readonly: &[Block] = &self.readonly;
write!( write!(
f, f,
"readonly: {:?}, growable: {:?}, root: {:?}", "readonly: {:?}, growable: {:?}, root: {:?}",
...@@ -668,7 +668,7 @@ ...@@ -668,7 +668,7 @@
impl Default for NodeTree { impl Default for NodeTree {
/// Create a fully mutable empty NodeTree /// Create a fully mutable empty NodeTree
fn default() -> Self { fn default() -> Self {
NodeTree::new(Box::new(Vec::new())) NodeTree::new(Box::<Vec<_>>::default())
} }
} }
...@@ -775,7 +775,7 @@ ...@@ -775,7 +775,7 @@
/// strings for test data, and brings actual hash size independency. /// strings for test data, and brings actual hash size independency.
#[cfg(test)] #[cfg(test)]
fn pad_node(hex: &str) -> Node { fn pad_node(hex: &str) -> Node {
Node::from_hex(&hex_pad_right(hex)).unwrap() Node::from_hex(hex_pad_right(hex)).unwrap()
} }
/// Pad hexadecimal Node prefix with zeros on the right, then insert /// Pad hexadecimal Node prefix with zeros on the right, then insert
...@@ -824,7 +824,7 @@ ...@@ -824,7 +824,7 @@
nt.find_node(&idx, idx.get(&1.into()).unwrap())?, nt.find_node(&idx, idx.get(&1.into()).unwrap())?,
Some(R!(1)) Some(R!(1))
); );
let unknown = Node::from_hex(&hex_pad_right("3d")).unwrap(); let unknown = Node::from_hex(hex_pad_right("3d")).unwrap();
assert_eq!(nt.find_node(&idx, &unknown)?, None); assert_eq!(nt.find_node(&idx, &unknown)?, None);
Ok(()) Ok(())
} }
...@@ -900,7 +900,7 @@ ...@@ -900,7 +900,7 @@
hex: &str, hex: &str,
) -> Result<(), NodeMapError> { ) -> Result<(), NodeMapError> {
let node = pad_node(hex); let node = pad_node(hex);
return self.insert_node(rev, node); self.insert_node(rev, node)
} }
fn find_hex( fn find_hex(
...@@ -931,6 +931,12 @@ ...@@ -931,6 +931,12 @@
} }
} }
impl Default for TestNtIndex {
fn default() -> Self {
Self::new()
}
}
#[test] #[test]
fn test_insert_full_mutable() -> Result<(), NodeMapError> { fn test_insert_full_mutable() -> Result<(), NodeMapError> {
let mut idx = TestNtIndex::new(); let mut idx = TestNtIndex::new();
...@@ -1003,7 +1009,7 @@ ...@@ -1003,7 +1009,7 @@
let mut node1_hex = hex_pad_right("444444"); let mut node1_hex = hex_pad_right("444444");
node1_hex.pop(); node1_hex.pop();
node1_hex.push('5'); node1_hex.push('5');
let node0 = Node::from_hex(&node0_hex).unwrap(); let node0 = Node::from_hex(node0_hex).unwrap();
let node1 = Node::from_hex(&node1_hex).unwrap(); let node1 = Node::from_hex(&node1_hex).unwrap();
idx.insert(0.into(), node0); idx.insert(0.into(), node0);
......
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
// TODO: use `vfs.read()` here when the `persistent-nodemap.mmap` // TODO: use `vfs.read()` here when the `persistent-nodemap.mmap`
// config is false? // config is false?
if let Some(mmap) = if let Some(mmap) =
store_vfs.mmap_open(&data_path).io_not_found_as_none()? store_vfs.mmap_open(data_path).io_not_found_as_none()?
{ {
if mmap.len() >= data_length { if mmap.len() >= data_length {
Ok(Some((docket, mmap))) Ok(Some((docket, mmap)))
......
...@@ -192,7 +192,7 @@ ...@@ -192,7 +192,7 @@
let name = name.as_ref(); let name = name.as_ref();
let name = if !name.is_absolute() { let name = if !name.is_absolute() {
root.join(&cwd).join(&name) root.join(cwd).join(name)
} else { } else {
name.to_owned() name.to_owned()
}; };
...@@ -196,9 +196,9 @@ ...@@ -196,9 +196,9 @@
} else { } else {
name.to_owned() name.to_owned()
}; };
let auditor = PathAuditor::new(&root); let auditor = PathAuditor::new(root);
if name != root && name.starts_with(&root) { if name != root && name.starts_with(root) {
let name = name.strip_prefix(&root).unwrap(); let name = name.strip_prefix(root).unwrap();
auditor.audit_path(path_to_hg_path_buf(name)?)?; auditor.audit_path(path_to_hg_path_buf(name)?)?;
Ok(name.to_owned()) Ok(name.to_owned())
} else if name == root { } else if name == root {
...@@ -210,7 +210,7 @@ ...@@ -210,7 +210,7 @@
let mut name = name.deref(); let mut name = name.deref();
let original_name = name.to_owned(); let original_name = name.to_owned();
loop { loop {
let same = is_same_file(&name, &root).unwrap_or(false); let same = is_same_file(name, root).unwrap_or(false);
if same { if same {
if name == original_name { if name == original_name {
// `name` was actually the same as root (maybe a symlink) // `name` was actually the same as root (maybe a symlink)
...@@ -218,8 +218,8 @@ ...@@ -218,8 +218,8 @@
} }
// `name` is a symlink to root, so `original_name` is under // `name` is a symlink to root, so `original_name` is under
// root // root
let rel_path = original_name.strip_prefix(&name).unwrap(); let rel_path = original_name.strip_prefix(name).unwrap();
auditor.audit_path(path_to_hg_path_buf(&rel_path)?)?; auditor.audit_path(path_to_hg_path_buf(rel_path)?)?;
return Ok(rel_path.to_owned()); return Ok(rel_path.to_owned());
} }
name = match name.parent() { name = match name.parent() {
...@@ -429,7 +429,7 @@ ...@@ -429,7 +429,7 @@
}) })
); );
assert_eq!( assert_eq!(
canonical_path(&root, Path::new(""), &under_repo_symlink), canonical_path(&root, Path::new(""), under_repo_symlink),
Ok(PathBuf::from("d")) Ok(PathBuf::from("d"))
); );
} }
......
...@@ -117,7 +117,7 @@ ...@@ -117,7 +117,7 @@
if self.audited_dirs.read().unwrap().contains(prefix) { if self.audited_dirs.read().unwrap().contains(prefix) {
continue; continue;
} }
self.check_filesystem(&prefix, &path)?; self.check_filesystem(prefix, path)?;
self.audited_dirs.write().unwrap().insert(prefix.to_owned()); self.audited_dirs.write().unwrap().insert(prefix.to_owned());
} }
...@@ -203,7 +203,7 @@ ...@@ -203,7 +203,7 @@
}) })
); );
create_dir(&base_dir_path.join("realdir")).unwrap(); create_dir(base_dir_path.join("realdir")).unwrap();
File::create(&base_dir_path.join("realdir/realfile")).unwrap(); File::create(base_dir_path.join("realdir/realfile")).unwrap();
// TODO make portable // TODO make portable
std::os::unix::fs::symlink( std::os::unix::fs::symlink(
...@@ -208,7 +208,7 @@ ...@@ -208,7 +208,7 @@
// TODO make portable // TODO make portable
std::os::unix::fs::symlink( std::os::unix::fs::symlink(
&base_dir_path.join("realdir"), base_dir_path.join("realdir"),
&base_dir_path.join("symlink"), base_dir_path.join("symlink"),
) )
.unwrap(); .unwrap();
let path = HgPath::new(b"symlink/realfile"); let path = HgPath::new(b"symlink/realfile");
......
...@@ -273,7 +273,7 @@ ...@@ -273,7 +273,7 @@
py_warnings.append( py_warnings.append(
py, py,
( (
PyBytes::new(py, &get_bytes_from_path(&file)), PyBytes::new(py, &get_bytes_from_path(file)),
PyBytes::new(py, syn), PyBytes::new(py, syn),
) )
.to_py_object(py) .to_py_object(py)
...@@ -282,7 +282,7 @@ ...@@ -282,7 +282,7 @@
} }
PatternFileWarning::NoSuchFile(file) => py_warnings.append( PatternFileWarning::NoSuchFile(file) => py_warnings.append(
py, py,
PyBytes::new(py, &get_bytes_from_path(&file)).into_object(), PyBytes::new(py, &get_bytes_from_path(file)).into_object(),
), ),
} }
} }
......
...@@ -348,7 +348,7 @@ ...@@ -348,7 +348,7 @@
py: Python<'a>, py: Python<'a>,
) -> PyResult<&'a RefCell<Option<NodeTree>>> { ) -> PyResult<&'a RefCell<Option<NodeTree>>> {
if self.nt(py).borrow().is_none() { if self.nt(py).borrow().is_none() {
let readonly = Box::new(Vec::new()); let readonly = Box::<Vec<_>>::default();
let mut nt = NodeTree::load_bytes(readonly, 0); let mut nt = NodeTree::load_bytes(readonly, 0);
self.fill_nodemap(py, &mut nt)?; self.fill_nodemap(py, &mut nt)?;
self.nt(py).borrow_mut().replace(nt); self.nt(py).borrow_mut().replace(nt);
...@@ -382,7 +382,7 @@ ...@@ -382,7 +382,7 @@
// If there's anything readonly, we need to build the data again from // If there's anything readonly, we need to build the data again from
// scratch // scratch
let bytes = if readonly.len() > 0 { let bytes = if readonly.len() > 0 {
let mut nt = NodeTree::load_bytes(Box::new(vec![]), 0); let mut nt = NodeTree::load_bytes(Box::<Vec<_>>::default(), 0);
self.fill_nodemap(py, &mut nt)?; self.fill_nodemap(py, &mut nt)?;
let (readonly, bytes) = nt.into_readonly_and_added_bytes(); let (readonly, bytes) = nt.into_readonly_and_added_bytes();
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
return Err(CommandError::unsupported(message)); return Err(CommandError::unsupported(message));
} }
let normalized = cwd.join(&file); let normalized = cwd.join(file);
// TODO: actually normalize `..` path segments etc? // TODO: actually normalize `..` path segments etc?
let dotted = normalized.components().any(|c| c.as_os_str() == ".."); let dotted = normalized.components().any(|c| c.as_os_str() == "..");
if file.as_bytes() == b"." || dotted { if file.as_bytes() == b"." || dotted {
......