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

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

commit 63942a98c54888f191d6feb1ec6c3ab25ff3f2e1
Author: Xuanwo <[email protected]>
AuthorDate: Sat Aug 5 10:44:17 2023 +0800

    Save work
    
    Signed-off-by: Xuanwo <[email protected]>
---
 Cargo.lock                                  |  87 ------------------------
 Cargo.toml                                  |   2 +-
 bin/oay/src/services/s3/service.rs          |   2 +-
 bin/oay/src/services/webdav/webdavfs.rs     |   2 +-
 bin/oli/src/commands/cp.rs                  |   2 +-
 bin/oli/src/commands/ls.rs                  |   4 +-
 bindings/nodejs/src/lib.rs                  |   4 +-
 bindings/object_store/src/lib.rs            |   2 +-
 bindings/python/src/asyncio.rs              |   2 +-
 core/src/layers/complete.rs                 |   2 +-
 core/src/layers/immutable_index.rs          |   8 +--
 core/src/layers/retry.rs                    |   2 +-
 core/src/types/operator/operator.rs         | 101 ++++++++++++++--------------
 core/src/types/operator/operator_futures.rs |   2 +-
 core/tests/behavior/list.rs                 |  16 ++---
 core/tests/behavior/list_only.rs            |   2 +-
 16 files changed, 78 insertions(+), 162 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 505dc8753..f08c347d4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1174,12 +1174,6 @@ dependencies = [
  "syn 2.0.23",
 ]
 
-[[package]]
-name = "cty"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
-
 [[package]]
 name = "darling"
 version = "0.14.4"
@@ -3212,78 +3206,6 @@ dependencies = [
  "tokio",
 ]
 
-[[package]]
-name = "ocaml"
-version = "1.0.0-beta.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "871da589fac01351dda8c8b26a5132b90d8accd5382424cd072902584ffe0c02"
-dependencies = [
- "ocaml-boxroot-sys",
- "ocaml-derive",
- "ocaml-interop",
- "ocaml-sys 0.23.0",
-]
-
-[[package]]
-name = "ocaml-boxroot-sys"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5186393bfbee4ce2bc5bbb82beafb77e85c1d0a557e3cfc8c8a0d63d7845fed5"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "ocaml-build"
-version = "1.0.0-beta.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ae2b0b155a81c2f3f9e71cb1f47e84d705d852e9ea7c10955d8bce1fa2d26aa0"
-dependencies = [
- "proc-macro2",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "ocaml-derive"
-version = "1.0.0-beta.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5cdffd393e5e346c52509608ac6c3be178523931bf9f50c18d23836474521d17"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "ocaml-interop"
-version = "0.8.8"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2e01e08412a7e072a90a225d2ae49a2860aeea853ce673bc63891dbf86aed063"
-dependencies = [
- "ocaml-boxroot-sys",
- "ocaml-sys 0.22.3",
- "static_assertions",
-]
-
-[[package]]
-name = "ocaml-sys"
-version = "0.22.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "73ec6ca7d41458442627435afb8f4671e83fd642e8a560171d671a1f679aa3cf"
-dependencies = [
- "cty",
-]
-
-[[package]]
-name = "ocaml-sys"
-version = "0.23.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "dc814766094de5f0f1c7e027027eb05c603cd7e235cc04ae195185fddecc1285"
-dependencies = [
- "cc",
- "cty",
-]
-
 [[package]]
 name = "oli"
 version = "0.39.0"
@@ -3460,15 +3382,6 @@ dependencies = [
  "opendal",
 ]
 
-[[package]]
-name = "opendal-ocaml"
-version = "0.39.0"
-dependencies = [
- "ocaml",
- "ocaml-build",
- "opendal",
-]
-
 [[package]]
 name = "opendal-python"
 version = "0.39.0"
diff --git a/Cargo.toml b/Cargo.toml
index 2c99a9699..1bb700005 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -33,7 +33,7 @@ members = [
   "bindings/haskell",
   "bindings/lua",
   "bindings/dotnet",
-  "bindings/ocaml",
+#  "bindings/ocaml",
 
   "bin/oli",
   "bin/oay",
diff --git a/bin/oay/src/services/s3/service.rs 
b/bin/oay/src/services/s3/service.rs
index f8bf88280..3fec8625f 100644
--- a/bin/oay/src/services/s3/service.rs
+++ b/bin/oay/src/services/s3/service.rs
@@ -101,7 +101,7 @@ async fn handle_list_objects(
 
     let mut lister = state
         .op
-        .list_with(&params.prefix)
+        .lister_with(&params.prefix)
         .start_after(&params.start_after)
         .await?;
 
diff --git a/bin/oay/src/services/webdav/webdavfs.rs 
b/bin/oay/src/services/webdav/webdavfs.rs
index b9dea58a7..3eda5c539 100644
--- a/bin/oay/src/services/webdav/webdavfs.rs
+++ b/bin/oay/src/services/webdav/webdavfs.rs
@@ -62,7 +62,7 @@ impl DavFileSystem for WebdavFs {
     ) -> dav_server::fs::FsFuture<dav_server::fs::FsStream<Box<dyn 
dav_server::fs::DavDirEntry>>>
     {
         async move {
-            let lister = 
self.op.list(path.as_url_string().as_str()).await.unwrap();
+            let lister = 
self.op.lister(path.as_url_string().as_str()).await.unwrap();
             Ok(DavStream::new(self.op.clone(), lister).boxed())
         }
         .boxed()
diff --git a/bin/oli/src/commands/cp.rs b/bin/oli/src/commands/cp.rs
index 0c4468922..9bb40bad4 100644
--- a/bin/oli/src/commands/cp.rs
+++ b/bin/oli/src/commands/cp.rs
@@ -57,7 +57,7 @@ pub async fn main(args: &ArgMatches) -> Result<()> {
     }
 
     let dst_root = Path::new(&dst_path);
-    let mut ds = src_op.scan(&src_path).await?;
+    let mut ds = src_op.lister_with(&src_path).delimiter("").await?;
     while let Some(de) = ds.try_next().await? {
         let meta = src_op.metadata(&de, Metakey::Mode).await?;
         if meta.mode().is_dir() {
diff --git a/bin/oli/src/commands/ls.rs b/bin/oli/src/commands/ls.rs
index 70747cffd..719b7dcb4 100644
--- a/bin/oli/src/commands/ls.rs
+++ b/bin/oli/src/commands/ls.rs
@@ -41,14 +41,14 @@ pub async fn main(args: &ArgMatches) -> Result<()> {
     let (op, path) = cfg.parse_location(target)?;
 
     if !recursive {
-        let mut ds = op.list(&path).await?;
+        let mut ds = op.lister(&path).await?;
         while let Some(de) = ds.try_next().await? {
             println!("{}", de.name());
         }
         return Ok(());
     }
 
-    let mut ds = op.scan(&path).await?;
+    let mut ds = op.lister_with(&path).delimiter("").await?;
     while let Some(de) = ds.try_next().await? {
         println!("{}", de.path());
     }
diff --git a/bindings/nodejs/src/lib.rs b/bindings/nodejs/src/lib.rs
index 0cebdcad5..5cc773dec 100644
--- a/bindings/nodejs/src/lib.rs
+++ b/bindings/nodejs/src/lib.rs
@@ -408,7 +408,9 @@ impl Operator {
     /// ```
     #[napi]
     pub async fn list(&self, path: String) -> Result<Lister> {
-        Ok(Lister(self.0.list(&path).await.map_err(format_napi_error)?))
+        Ok(Lister(
+            self.0.lister(&path).await.map_err(format_napi_error)?,
+        ))
     }
 
     /// List given path synchronously.
diff --git a/bindings/object_store/src/lib.rs b/bindings/object_store/src/lib.rs
index 421b6a686..8733033e2 100644
--- a/bindings/object_store/src/lib.rs
+++ b/bindings/object_store/src/lib.rs
@@ -170,7 +170,7 @@ impl ObjectStore for OpendalStore {
         let path = prefix.map_or("".into(), |x| format!("{}/", x));
         let mut stream = self
             .inner
-            .list(&path)
+            .lister(&path)
             .await
             .map_err(|err| format_object_store_error(err, &path))?;
 
diff --git a/bindings/python/src/asyncio.rs b/bindings/python/src/asyncio.rs
index 02dad1c18..709b81f83 100644
--- a/bindings/python/src/asyncio.rs
+++ b/bindings/python/src/asyncio.rs
@@ -139,7 +139,7 @@ impl AsyncOperator {
     pub fn list<'p>(&'p self, py: Python<'p>, path: String) -> PyResult<&'p 
PyAny> {
         let this = self.0.clone();
         future_into_py(py, async move {
-            let lister = this.list(&path).await.map_err(format_pyerr)?;
+            let lister = this.lister(&path).await.map_err(format_pyerr)?;
             let pylister: PyObject = Python::with_gil(|py| 
AsyncLister::new(lister).into_py(py));
             Ok(pylister)
         })
diff --git a/core/src/layers/complete.rs b/core/src/layers/complete.rs
index 20a1dd7b2..25048b6c1 100644
--- a/core/src/layers/complete.rs
+++ b/core/src/layers/complete.rs
@@ -1014,7 +1014,7 @@ mod tests {
     capability_test!(rename, |op| {
         op.rename("/path/to/mock_file", "/path/to/mock_file_2")
     });
-    capability_test!(list, |op| { op.list("/path/to/mock_dir/") });
+    capability_test!(list, |op| { op.lister("/path/to/mock_dir/") });
     capability_test!(presign, |op| {
         op.presign_read("/path/to/mock_file", Duration::from_secs(1))
     });
diff --git a/core/src/layers/immutable_index.rs 
b/core/src/layers/immutable_index.rs
index 1c7ed8992..665d6f45d 100644
--- a/core/src/layers/immutable_index.rs
+++ b/core/src/layers/immutable_index.rs
@@ -302,7 +302,7 @@ mod tests {
 
         let mut map = HashMap::new();
         let mut set = HashSet::new();
-        let mut ds = op.list("").await?;
+        let mut ds = op.lister("").await?;
         while let Some(entry) = ds.try_next().await? {
             debug!("got entry: {}", entry.path());
             assert!(
@@ -341,7 +341,7 @@ mod tests {
         .layer(iil)
         .finish();
 
-        let mut ds = op.scan("/").await?;
+        let mut ds = op.lister_with("/").delimiter("").await?;
         let mut set = HashSet::new();
         let mut map = HashMap::new();
         while let Some(entry) = ds.try_next().await? {
@@ -391,7 +391,7 @@ mod tests {
         //  List /
         let mut map = HashMap::new();
         let mut set = HashSet::new();
-        let mut ds = op.list("/").await?;
+        let mut ds = op.lister("/").await?;
         while let Some(entry) = ds.try_next().await? {
             assert!(
                 set.insert(entry.path().to_string()),
@@ -410,7 +410,7 @@ mod tests {
         //  List dataset/stateful/
         let mut map = HashMap::new();
         let mut set = HashSet::new();
-        let mut ds = op.list("dataset/stateful/").await?;
+        let mut ds = op.lister("dataset/stateful/").await?;
         while let Some(entry) = ds.try_next().await? {
             assert!(
                 set.insert(entry.path().to_string()),
diff --git a/core/src/layers/retry.rs b/core/src/layers/retry.rs
index 1408af035..be21adbd1 100644
--- a/core/src/layers/retry.rs
+++ b/core/src/layers/retry.rs
@@ -1356,7 +1356,7 @@ mod tests {
         let expected = vec!["hello", "world", "2023/", "0208/"];
 
         let mut lister = op
-            .list("retryable_error/")
+            .lister("retryable_error/")
             .await
             .expect("service must support list");
         let mut actual = Vec::new();
diff --git a/core/src/types/operator/operator.rs 
b/core/src/types/operator/operator.rs
index c36bf20c5..49bc5e851 100644
--- a/core/src/types/operator/operator.rs
+++ b/core/src/types/operator/operator.rs
@@ -151,7 +151,7 @@ impl Operator {
     /// # }
     /// ```
     pub async fn check(&self) -> Result<()> {
-        let mut ds = self.list("/").await?;
+        let mut ds = self.lister("/").await?;
 
         match ds.next().await {
             Some(Err(e)) if e.kind() != ErrorKind::NotFound => Err(e),
@@ -1266,6 +1266,49 @@ impl Operator {
         Ok(())
     }
 
+    /// List dir in flat way.
+    ///
+    /// Also, this function can be used to list a prefix.
+    ///
+    /// An error will be returned if given path doesn't end with `/`.
+    ///
+    /// # Notes
+    ///
+    /// - `scan` will not return the prefix itself.
+    /// - `scan` is an alias of `list_with(path).delimiter("")`
+    ///
+    /// # Examples
+    ///
+    /// ```no_run
+    /// # use anyhow::Result;
+    /// # use futures::io;
+    /// use futures::TryStreamExt;
+    /// use opendal::EntryMode;
+    /// use opendal::Metakey;
+    /// use opendal::Operator;
+    /// #
+    /// # #[tokio::main]
+    /// # async fn test(op: Operator) -> Result<()> {
+    /// let mut ds = op.scan("/path/to/dir/").await?;
+    /// while let Some(mut de) = ds.try_next().await? {
+    ///     let meta = op.metadata(&de, Metakey::Mode).await?;
+    ///     match meta.mode() {
+    ///         EntryMode::FILE => {
+    ///             println!("Handling file")
+    ///         }
+    ///         EntryMode::DIR => {
+    ///             println!("Handling dir like start a new list via 
meta.path()")
+    ///         }
+    ///         EntryMode::Unknown => continue,
+    ///     }
+    /// }
+    /// # Ok(())
+    /// # }
+    /// ```
+    pub async fn scan(&self, path: &str) -> Result<Lister> {
+        self.lister_with(path).delimiter("").await
+    }
+
     /// List given path.
     ///
     /// This function will create a new handle to list entries.
@@ -1283,7 +1326,7 @@ impl Operator {
     /// use opendal::Operator;
     /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
-    /// let mut ds = op.list("path/to/dir/").await?;
+    /// let mut ds = op.lister("path/to/dir/").await?;
     /// while let Some(mut de) = ds.try_next().await? {
     ///     let meta = op.metadata(&de, Metakey::Mode).await?;
     ///     match meta.mode() {
@@ -1299,8 +1342,8 @@ impl Operator {
     /// # Ok(())
     /// # }
     /// ```
-    pub async fn list(&self, path: &str) -> Result<Lister> {
-        self.list_with(path).await
+    pub async fn lister(&self, path: &str) -> Result<Lister> {
+        self.lister_with(path).await
     }
 
     /// List given path with OpList.
@@ -1323,7 +1366,7 @@ impl Operator {
     /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
     /// let mut ds = op
-    ///     .list_with("path/to/dir/")
+    ///     .lister_with("path/to/dir/")
     ///     .limit(10)
     ///     .start_after("start")
     ///     .await?;
@@ -1356,7 +1399,7 @@ impl Operator {
     /// use opendal::Operator;
     /// # #[tokio::main]
     /// # async fn test(op: Operator) -> Result<()> {
-    /// let mut ds = op.list_with("path/to/dir/").delimiter("").await?;
+    /// let mut ds = op.lister_with("path/to/dir/").delimiter("").await?;
     /// while let Some(mut de) = ds.try_next().await? {
     ///     let meta = op.metadata(&de, Metakey::Mode).await?;
     ///     match meta.mode() {
@@ -1372,7 +1415,7 @@ impl Operator {
     /// # Ok(())
     /// # }
     /// ```
-    pub fn list_with(&self, path: &str) -> FutureList {
+    pub fn lister_with(&self, path: &str) -> FutureList {
         let path = normalize_path(path);
 
         let fut = FutureList(OperatorFuture::new(
@@ -1400,50 +1443,8 @@ impl Operator {
         ));
         fut
     }
-
-    /// List dir in flat way.
-    ///
-    /// Also, this function can be used to list a prefix.
-    ///
-    /// An error will be returned if given path doesn't end with `/`.
-    ///
-    /// # Notes
-    ///
-    /// - `scan` will not return the prefix itself.
-    /// - `scan` is an alias of `list_with(path).delimiter("")`
-    ///
-    /// # Examples
-    ///
-    /// ```no_run
-    /// # use anyhow::Result;
-    /// # use futures::io;
-    /// use futures::TryStreamExt;
-    /// use opendal::EntryMode;
-    /// use opendal::Metakey;
-    /// use opendal::Operator;
-    /// #
-    /// # #[tokio::main]
-    /// # async fn test(op: Operator) -> Result<()> {
-    /// let mut ds = op.scan("/path/to/dir/").await?;
-    /// while let Some(mut de) = ds.try_next().await? {
-    ///     let meta = op.metadata(&de, Metakey::Mode).await?;
-    ///     match meta.mode() {
-    ///         EntryMode::FILE => {
-    ///             println!("Handling file")
-    ///         }
-    ///         EntryMode::DIR => {
-    ///             println!("Handling dir like start a new list via 
meta.path()")
-    ///         }
-    ///         EntryMode::Unknown => continue,
-    ///     }
-    /// }
-    /// # Ok(())
-    /// # }
-    /// ```
-    pub async fn scan(&self, path: &str) -> Result<Lister> {
-        self.list_with(path).delimiter("").await
-    }
 }
+
 /// Operator presign API.
 impl Operator {
     /// Presign an operation for stat(head).
diff --git a/core/src/types/operator/operator_futures.rs 
b/core/src/types/operator/operator_futures.rs
index 8fd52a31e..91440a476 100644
--- a/core/src/types/operator/operator_futures.rs
+++ b/core/src/types/operator/operator_futures.rs
@@ -565,7 +565,7 @@ impl Future for FutureDelete {
     }
 }
 
-/// Future that generated by [`Operator::list_with`].
+/// Future that generated by [`Operator::lister_with`].
 ///
 /// Users can add more options by public functions provided by this struct.
 pub struct FutureList(pub(crate) OperatorFuture<OpList, Lister>);
diff --git a/core/tests/behavior/list.rs b/core/tests/behavior/list.rs
index bf8aa8339..808748ce5 100644
--- a/core/tests/behavior/list.rs
+++ b/core/tests/behavior/list.rs
@@ -66,7 +66,7 @@ pub async fn test_list_dir(op: Operator) -> Result<()> {
 
     op.write(&path, content).await.expect("write must succeed");
 
-    let mut obs = op.list(&format!("{parent}/")).await?;
+    let mut obs = op.lister(&format!("{parent}/")).await?;
     let mut found = false;
     while let Some(de) = obs.try_next().await? {
         let meta = op.stat(de.path()).await?;
@@ -105,7 +105,7 @@ pub async fn test_list_rich_dir(op: Operator) -> Result<()> 
{
         .collect::<Vec<_>>()
         .await;
 
-    let mut objects = op.with_limit(10).list("test_list_rich_dir/").await?;
+    let mut objects = op.with_limit(10).lister("test_list_rich_dir/").await?;
     let mut actual = vec![];
     while let Some(o) = objects.try_next().await? {
         let path = o.path().to_string();
@@ -126,7 +126,7 @@ pub async fn test_list_empty_dir(op: Operator) -> 
Result<()> {
 
     op.create_dir(&dir).await.expect("write must succeed");
 
-    let mut obs = op.list(&dir).await?;
+    let mut obs = op.lister(&dir).await?;
     let mut objects = HashMap::new();
     while let Some(de) = obs.try_next().await? {
         objects.insert(de.path().to_string(), de);
@@ -143,7 +143,7 @@ pub async fn test_list_empty_dir(op: Operator) -> 
Result<()> {
 pub async fn test_list_non_exist_dir(op: Operator) -> Result<()> {
     let dir = format!("{}/", uuid::Uuid::new_v4());
 
-    let mut obs = op.list(&dir).await?;
+    let mut obs = op.lister(&dir).await?;
     let mut objects = HashMap::new();
     while let Some(de) = obs.try_next().await? {
         objects.insert(de.path().to_string(), de);
@@ -160,7 +160,7 @@ pub async fn test_list_sub_dir(op: Operator) -> Result<()> {
 
     op.create_dir(&path).await.expect("creat must succeed");
 
-    let mut obs = op.list("/").await?;
+    let mut obs = op.lister("/").await?;
     let mut found = false;
     while let Some(de) = obs.try_next().await? {
         if de.path() == path {
@@ -192,7 +192,7 @@ pub async fn test_list_nested_dir(op: Operator) -> 
Result<()> {
         .expect("creat must succeed");
     op.create_dir(&dir_path).await.expect("creat must succeed");
 
-    let mut obs = op.list(&dir).await?;
+    let mut obs = op.lister(&dir).await?;
     let mut objects = HashMap::new();
 
     while let Some(de) = obs.try_next().await? {
@@ -235,7 +235,7 @@ pub async fn test_list_nested_dir(op: Operator) -> 
Result<()> {
 pub async fn test_list_dir_with_file_path(op: Operator) -> Result<()> {
     let parent = uuid::Uuid::new_v4().to_string();
 
-    let obs = op.list(&parent).await.map(|_| ());
+    let obs = op.lister(&parent).await.map(|_| ());
     assert!(obs.is_err());
     assert_eq!(obs.unwrap_err().kind(), ErrorKind::NotADirectory);
 
@@ -267,7 +267,7 @@ pub async fn test_list_with_start_after(op: Operator) -> 
Result<()> {
         .collect::<Vec<_>>()
         .await;
 
-    let mut objects = op.list_with(dir).start_after(&given[2]).await?;
+    let mut objects = op.lister_with(dir).start_after(&given[2]).await?;
     let mut actual = vec![];
     while let Some(o) = objects.try_next().await? {
         let path = o.path().to_string();
diff --git a/core/tests/behavior/list_only.rs b/core/tests/behavior/list_only.rs
index 6ddf64cb3..e7778461d 100644
--- a/core/tests/behavior/list_only.rs
+++ b/core/tests/behavior/list_only.rs
@@ -36,7 +36,7 @@ pub fn behavior_list_only_tests(op: &Operator) -> Vec<Trial> {
 pub async fn test_list_only(op: Operator) -> Result<()> {
     let mut entries = HashMap::new();
 
-    let mut ds = op.list("/").await?;
+    let mut ds = op.lister("/").await?;
     while let Some(de) = ds.try_next().await? {
         entries.insert(de.path().to_string(), 
op.stat(de.path()).await?.mode());
     }

Reply via email to