This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch fix-stat
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git

commit 44f9447c52544d4e40ae5726e531a91265cfe9ba
Author: Xuanwo <[email protected]>
AuthorDate: Wed Nov 22 19:33:58 2023 +0800

    FIx test
    
    Signed-off-by: Xuanwo <[email protected]>
---
 core/src/services/azfile/backend.rs | 26 +++++++-------------------
 core/src/services/sftp/backend.rs   | 11 +++++++++--
 core/src/services/sftp/utils.rs     |  1 +
 3 files changed, 17 insertions(+), 21 deletions(-)

diff --git a/core/src/services/azfile/backend.rs 
b/core/src/services/azfile/backend.rs
index e28e1acd6..4dde3168e 100644
--- a/core/src/services/azfile/backend.rs
+++ b/core/src/services/azfile/backend.rs
@@ -341,26 +341,14 @@ impl Accessor for AzfileBackend {
             return Ok(RpStat::new(Metadata::new(EntryMode::DIR)));
         }
 
-        if path.ends_with('/') {
-            let resp = self.core.azfile_get_path_properties(path).await?;
-            let status = resp.status();
-            match status {
-                StatusCode::OK => {
-                    let meta = parse_into_metadata(path, resp.headers())?;
-                    Ok(RpStat::new(meta))
-                }
-                _ => Err(parse_error(resp).await?),
-            }
-        } else {
-            let resp = self.core.azfile_get_file_properties(path).await?;
-            let status = resp.status();
-            match status {
-                StatusCode::OK => {
-                    let meta = parse_into_metadata(path, resp.headers())?;
-                    Ok(RpStat::new(meta))
-                }
-                _ => Err(parse_error(resp).await?),
+        let resp = self.core.azfile_get_file_properties(path).await?;
+        let status = resp.status();
+        match status {
+            StatusCode::OK => {
+                let meta = parse_into_metadata(path, resp.headers())?;
+                Ok(RpStat::new(meta))
             }
+            _ => Err(parse_error(resp).await?),
         }
     }
 
diff --git a/core/src/services/sftp/backend.rs 
b/core/src/services/sftp/backend.rs
index 69630025c..178644f68 100644
--- a/core/src/services/sftp/backend.rs
+++ b/core/src/services/sftp/backend.rs
@@ -384,9 +384,16 @@ impl Accessor for SftpBackend {
         let mut fs = client.fs();
         fs.set_cwd(&self.root);
 
-        let meta = fs.metadata(path).await?;
+        let meta: Metadata = fs.metadata(path).await?.into();
 
-        Ok(RpStat::new(meta.into()))
+        if path.ends_with('/') && meta.is_file() {
+            return Err(Error::new(
+                ErrorKind::NotFound,
+                "given path is not a directory",
+            ));
+        }
+
+        Ok(RpStat::new(meta))
     }
 
     async fn delete(&self, path: &str, _: OpDelete) -> Result<RpDelete> {
diff --git a/core/src/services/sftp/utils.rs b/core/src/services/sftp/utils.rs
index 5e627b89a..f30c84233 100644
--- a/core/src/services/sftp/utils.rs
+++ b/core/src/services/sftp/utils.rs
@@ -20,6 +20,7 @@ use openssh_sftp_client::metadata::MetaData as SftpMeta;
 use crate::EntryMode;
 use crate::Metadata;
 
+/// REMOVE ME: we should not implement `From<SftpMeta> for Metadata`.
 impl From<SftpMeta> for Metadata {
     fn from(meta: SftpMeta) -> Self {
         let mode = meta

Reply via email to