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
