Create intermediate directories in FakeFs::create_dir
This commit is contained in:
parent
b48118830f
commit
b3218641cd
1 changed files with 25 additions and 13 deletions
|
@ -541,19 +541,31 @@ impl Fs for FakeFs {
|
||||||
async fn create_dir(&self, path: &Path) -> Result<()> {
|
async fn create_dir(&self, path: &Path) -> Result<()> {
|
||||||
self.simulate_random_delay().await;
|
self.simulate_random_delay().await;
|
||||||
let mut state = self.state.lock().await;
|
let mut state = self.state.lock().await;
|
||||||
|
|
||||||
|
let mut created_dirs = Vec::new();
|
||||||
|
let mut cur_path = PathBuf::new();
|
||||||
|
for component in path.components() {
|
||||||
|
cur_path.push(component);
|
||||||
|
if cur_path == Path::new("/") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
let inode = state.next_inode;
|
let inode = state.next_inode;
|
||||||
state.next_inode += 1;
|
state.next_inode += 1;
|
||||||
state
|
state
|
||||||
.write_path(path, |entry| {
|
.write_path(&cur_path, |entry| {
|
||||||
entry.or_insert(Arc::new(Mutex::new(FakeFsEntry::Dir {
|
entry.or_insert(Arc::new(Mutex::new(FakeFsEntry::Dir {
|
||||||
inode,
|
inode,
|
||||||
mtime: SystemTime::now(),
|
mtime: SystemTime::now(),
|
||||||
entries: Default::default(),
|
entries: Default::default(),
|
||||||
})));
|
})));
|
||||||
|
created_dirs.push(cur_path.clone());
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
state.emit_event(&[path]);
|
}
|
||||||
|
|
||||||
|
state.emit_event(&created_dirs);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue