From 77a3489ed2ba0a687624455ea00675aef42e1b2b Mon Sep 17 00:00:00 2001 From: weisd Date: Mon, 10 Nov 2025 23:42:15 +0800 Subject: [PATCH] fix list object err (#831) fix list object err (#831) #827 #815 #635 #752 --- crates/ecstore/src/disk/local.rs | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/crates/ecstore/src/disk/local.rs b/crates/ecstore/src/disk/local.rs index ba96de5f..7c38645e 100644 --- a/crates/ecstore/src/disk/local.rs +++ b/crates/ecstore/src/disk/local.rs @@ -1136,23 +1136,21 @@ impl LocalDisk { let name = path_join_buf(&[current.as_str(), entry.as_str()]); - if !dir_stack.is_empty() { - if let Some(pop) = dir_stack.last().cloned() { - if pop < name { - out.write_obj(&MetaCacheEntry { - name: pop.clone(), - ..Default::default() - }) - .await?; + while let Some(pop) = dir_stack.last().cloned() + && pop < name + { + out.write_obj(&MetaCacheEntry { + name: pop.clone(), + ..Default::default() + }) + .await?; - if opts.recursive { - if let Err(er) = Box::pin(self.scan_dir(pop, prefix.clone(), opts, out, objs_returned)).await { - error!("scan_dir err {:?}", er); - } - } - dir_stack.pop(); + if opts.recursive { + if let Err(er) = Box::pin(self.scan_dir(pop, prefix.clone(), opts, out, objs_returned)).await { + error!("scan_dir err {:?}", er); } } + dir_stack.pop(); } let mut meta = MetaCacheEntry {