From cf68a7effe3afbcd6e52a8ed5ead96eb6b2ebf9e Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 27 Sep 2025 08:15:12 -0500 Subject: [PATCH] [unit test] Complete FUSE unit tests #22 --- .../src/providers/s3/s3_provider.cpp | 65 +++++-------------- 1 file changed, 18 insertions(+), 47 deletions(-) diff --git a/repertory/librepertory/src/providers/s3/s3_provider.cpp b/repertory/librepertory/src/providers/s3/s3_provider.cpp index 3a35f4a7..da8caace 100644 --- a/repertory/librepertory/src/providers/s3/s3_provider.cpp +++ b/repertory/librepertory/src/providers/s3/s3_provider.cpp @@ -470,13 +470,9 @@ auto s3_provider::get_directory_items_impl(const std::string &api_path, auto grab_more{true}; std::string token{}; - std::unordered_set seen_prefixes; - std::unordered_set seen_keys; - auto api_path_prefix = utils::path::create_api_path(prefix); - while (grab_more) { - long response_code{}; std::string response_data{}; + long response_code{}; if (not get_object_list(response_data, response_code, "/", prefix, token)) { return api_error::comm_error; } @@ -508,56 +504,31 @@ auto s3_provider::get_directory_items_impl(const std::string &api_path, .as_string(); } - for (const auto &node : - doc.select_nodes("/ListBucketResult/CommonPrefixes/Prefix")) { - std::string cur_prefix = node.node().text().as_string(); - if (cur_prefix.empty()) { - continue; - } - - if (not prefix.empty() && not cur_prefix.starts_with(prefix)) { - continue; - } - - if (not seen_prefixes.insert(cur_prefix).second) { - continue; - } - - auto child_object_name = - utils::path::create_api_path(utils::path::combine("/", {cur_prefix})); - auto res = add_directory_item(child_object_name, true, node.node()); + auto node_list{ + doc.select_nodes("/ListBucketResult/CommonPrefixes/Prefix"), + }; + for (const auto &node : node_list) { + auto child_object_name{ + utils::path::create_api_path( + utils::path::combine("/", {node.node().text().as_string()})), + }; + auto res{add_directory_item(child_object_name, true, node.node())}; if (res != api_error::success) { return res; } } - for (const auto &node : doc.select_nodes("/ListBucketResult/Contents")) { - std::string cur_key = node.node().child("Key").text().as_string(); - if (cur_key.empty()) { + node_list = doc.select_nodes("/ListBucketResult/Contents"); + for (const auto &node : node_list) { + auto child_object_name{ + utils::path::create_api_path( + node.node().select_node("Key").node().text().as_string()), + }; + if (child_object_name == utils::path::create_api_path(prefix)) { continue; } - if (not prefix.empty() && // and - (cur_key == prefix || // or - not cur_key.starts_with(prefix) || // or - utils::path::create_api_path(cur_key) == api_path_prefix)) { - continue; - } - - if (cur_key.back() == '/') { - continue; - } - - if (seen_prefixes.contains(cur_key + "/")) { - continue; - } - - if (not seen_keys.insert(cur_key).second) { - continue; - } - - auto child_object_name = utils::path::create_api_path(cur_key); - auto res = add_directory_item(child_object_name, false, node.node()); + auto res{add_directory_item(child_object_name, false, node.node())}; if (res != api_error::success) { return res; }