Skip to content

Commit b1fdb18

Browse files
authored
Updated rcpputils path API (#2579)
Signed-off-by: Alejandro Hernández Cordero <ahcorde@gmail.com>
1 parent 647bd65 commit b1fdb18

File tree

8 files changed

+78
-22
lines changed

8 files changed

+78
-22
lines changed

rclcpp/include/rclcpp/logger.hpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#ifndef RCLCPP__LOGGER_HPP_
1616
#define RCLCPP__LOGGER_HPP_
1717

18+
#include <filesystem>
1819
#include <memory>
1920
#include <string>
2021
#include <utility>
@@ -77,6 +78,14 @@ RCLCPP_PUBLIC
7778
Logger
7879
get_node_logger(const rcl_node_t * node);
7980

81+
// TODO(ahcorde): Remove deprecated class on the next release (in Rolling after Kilted).
82+
#if !defined(_WIN32)
83+
# pragma GCC diagnostic push
84+
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
85+
#else // !defined(_WIN32)
86+
# pragma warning(push)
87+
# pragma warning(disable: 4996)
88+
#endif
8089
/// Get the current logging directory.
8190
/**
8291
* For more details of how the logging directory is determined,
@@ -85,10 +94,30 @@ get_node_logger(const rcl_node_t * node);
8594
* \returns the logging directory being used.
8695
* \throws rclcpp::exceptions::RCLError if an unexpected error occurs.
8796
*/
97+
[[deprecated("use rclcpp::get_log_directory instead of rclcpp::get_logging_directory")]]
8898
RCLCPP_PUBLIC
8999
rcpputils::fs::path
90100
get_logging_directory();
91101

102+
// remove warning suppression
103+
#if !defined(_WIN32)
104+
# pragma GCC diagnostic pop
105+
#else // !defined(_WIN32)
106+
# pragma warning(pop)
107+
#endif
108+
109+
/// Get the current logging directory.
110+
/**
111+
* For more details of how the logging directory is determined,
112+
* see rcl_logging_get_logging_directory().
113+
*
114+
* \returns the logging directory being used.
115+
* \throws rclcpp::exceptions::RCLError if an unexpected error occurs.
116+
*/
117+
RCLCPP_PUBLIC
118+
std::filesystem::path
119+
get_log_directory();
120+
92121
class Logger
93122
{
94123
public:

rclcpp/src/rclcpp/logger.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15+
#include <filesystem>
1516
#include <memory>
1617
#include <string>
1718
#include <utility>
@@ -54,6 +55,14 @@ get_node_logger(const rcl_node_t * node)
5455
return rclcpp::get_logger(logger_name);
5556
}
5657

58+
// TODO(ahcorde): Remove deprecated class on the next release (in Rolling after Kilted).
59+
#if !defined(_WIN32)
60+
# pragma GCC diagnostic push
61+
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
62+
#else // !defined(_WIN32)
63+
# pragma warning(push)
64+
# pragma warning(disable: 4996)
65+
#endif
5766
rcpputils::fs::path
5867
get_logging_directory()
5968
{
@@ -67,6 +76,26 @@ get_logging_directory()
6776
allocator.deallocate(log_dir, allocator.state);
6877
return path;
6978
}
79+
// remove warning suppression
80+
#if !defined(_WIN32)
81+
# pragma GCC diagnostic pop
82+
#else // !defined(_WIN32)
83+
# pragma warning(pop)
84+
#endif
85+
86+
std::filesystem::path
87+
get_log_directory()
88+
{
89+
char * log_dir = NULL;
90+
auto allocator = rcutils_get_default_allocator();
91+
rcl_logging_ret_t ret = rcl_logging_get_logging_directory(allocator, &log_dir);
92+
if (RCL_LOGGING_RET_OK != ret) {
93+
rclcpp::exceptions::throw_from_rcl_error(ret);
94+
}
95+
std::string path{log_dir};
96+
allocator.deallocate(log_dir, allocator.state);
97+
return path;
98+
}
7099

71100
Logger
72101
Logger::get_child(const std::string & suffix)

rclcpp/test/rclcpp/node_interfaces/test_node_parameters.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <gtest/gtest.h>
2222

2323
#include <algorithm>
24+
#include <filesystem>
2425
#include <memory>
2526
#include <string>
2627
#include <vector>
@@ -61,7 +62,7 @@ class TestNodeParameters : public ::testing::Test
6162
std::shared_ptr<rclcpp::Node> node;
6263
rclcpp::node_interfaces::NodeParameters * node_parameters;
6364

64-
rcpputils::fs::path test_resources_path{TEST_RESOURCES_DIRECTORY};
65+
std::filesystem::path test_resources_path{TEST_RESOURCES_DIRECTORY};
6566
};
6667

6768
TEST_F(TestNodeParameters, construct_destruct_rcl_errors) {

rclcpp/test/rclcpp/test_logger.cpp

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include <gtest/gtest.h>
1616

17+
#include <filesystem>
1718
#include <memory>
1819
#include <string>
1920

@@ -210,15 +211,7 @@ TEST(TestLogger, get_logging_directory) {
210211
ASSERT_EQ(true, rcutils_set_env("ROS_LOG_DIR", nullptr));
211212
ASSERT_EQ(true, rcutils_set_env("ROS_HOME", nullptr));
212213

213-
auto path = rclcpp::get_logging_directory();
214-
auto expected_path = rcpputils::fs::path{"/fake_home_dir"} / ".ros" / "log";
215-
216-
// TODO(ivanpauno): Add operator== to rcpputils::fs::path
217-
auto it = path.cbegin();
218-
auto eit = expected_path.cbegin();
219-
for (; it != path.cend() && eit != expected_path.cend(); ++it, ++eit) {
220-
EXPECT_EQ(*eit, *it);
221-
}
222-
EXPECT_EQ(it, path.cend());
223-
EXPECT_EQ(eit, expected_path.cend());
214+
auto path = rclcpp::get_log_directory();
215+
auto expected_path = std::filesystem::path{"/fake_home_dir"} / ".ros" / "log";
216+
EXPECT_EQ(path, expected_path);
224217
}

rclcpp/test/rclcpp/test_node.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <gtest/gtest.h>
1616

1717
#include <chrono>
18+
#include <filesystem>
1819
#include <functional>
1920
#include <limits>
2021
#include <map>
@@ -56,7 +57,7 @@ class TestNode : public ::testing::Test
5657
test_resources_path /= "test_node";
5758
}
5859

59-
rcpputils::fs::path test_resources_path{TEST_RESOURCES_DIRECTORY};
60+
std::filesystem::path test_resources_path{TEST_RESOURCES_DIRECTORY};
6061
};
6162

6263
/*

rclcpp/test/rclcpp/test_parameter_client.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <gmock/gmock.h>
1616

1717
#include <chrono>
18+
#include <filesystem>
1819
#include <functional>
1920
#include <future>
2021
#include <memory>
@@ -935,7 +936,7 @@ TEST_F(TestParameterClient, async_parameter_load_parameters) {
935936
auto asynchronous_client =
936937
std::make_shared<rclcpp::AsyncParametersClient>(load_node, "/namespace/load_node");
937938
// load parameters
938-
rcpputils::fs::path test_resources_path{TEST_RESOURCES_DIRECTORY};
939+
std::filesystem::path test_resources_path{TEST_RESOURCES_DIRECTORY};
939940
const std::string parameters_filepath = (
940941
test_resources_path / "test_node" / "load_parameters.yaml").string();
941942
auto load_future = asynchronous_client->load_parameters(parameters_filepath);
@@ -961,7 +962,7 @@ TEST_F(TestParameterClient, sync_parameter_load_parameters) {
961962
auto synchronous_client =
962963
std::make_shared<rclcpp::SyncParametersClient>(load_node);
963964
// load parameters
964-
rcpputils::fs::path test_resources_path{TEST_RESOURCES_DIRECTORY};
965+
std::filesystem::path test_resources_path{TEST_RESOURCES_DIRECTORY};
965966
const std::string parameters_filepath = (
966967
test_resources_path / "test_node" / "load_parameters.yaml").string();
967968
auto load_future = synchronous_client->load_parameters(parameters_filepath);
@@ -983,7 +984,7 @@ TEST_F(TestParameterClient, async_parameter_load_parameters_complicated_regex) {
983984
auto asynchronous_client =
984985
std::make_shared<rclcpp::AsyncParametersClient>(load_node, "/namespace/load_node");
985986
// load parameters
986-
rcpputils::fs::path test_resources_path{TEST_RESOURCES_DIRECTORY};
987+
std::filesystem::path test_resources_path{TEST_RESOURCES_DIRECTORY};
987988
const std::string parameters_filepath = (
988989
test_resources_path / "test_node" / "load_complicated_parameters.yaml").string();
989990
auto load_future = asynchronous_client->load_parameters(parameters_filepath);
@@ -1013,7 +1014,7 @@ TEST_F(TestParameterClient, async_parameter_load_no_valid_parameter) {
10131014
auto asynchronous_client =
10141015
std::make_shared<rclcpp::AsyncParametersClient>(load_node, "/namespace/load_node");
10151016
// load parameters
1016-
rcpputils::fs::path test_resources_path{TEST_RESOURCES_DIRECTORY};
1017+
std::filesystem::path test_resources_path{TEST_RESOURCES_DIRECTORY};
10171018
const std::string parameters_filepath = (
10181019
test_resources_path / "test_node" / "no_valid_parameters.yaml").string();
10191020
EXPECT_THROW(

rclcpp_components/src/component_manager.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include "rclcpp_components/component_manager.hpp"
1616

17+
#include <filesystem>
1718
#include <functional>
1819
#include <memory>
1920
#include <string>
@@ -95,11 +96,11 @@ ComponentManager::get_component_resources(
9596
throw ComponentManagerException("Invalid resource entry");
9697
}
9798

98-
std::string library_path = parts[1];
99-
if (!rcpputils::fs::path(library_path).is_absolute()) {
100-
library_path = base_path + "/" + library_path;
99+
std::filesystem::path library_path = parts[1];
100+
if (!library_path.is_absolute()) {
101+
library_path = (base_path / library_path);
101102
}
102-
resources.push_back({parts[0], library_path});
103+
resources.push_back({parts[0], library_path.string()});
103104
}
104105
return resources;
105106
}

rclcpp_components/test/test_component_manager.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include <gtest/gtest.h>
1616

17+
#include <filesystem>
1718
#include <memory>
1819

1920
#include "rclcpp_components/component_manager.hpp"
@@ -51,7 +52,7 @@ TEST_F(TestComponentManager, get_component_resources_valid)
5152
EXPECT_EQ("test_rclcpp_components::TestComponentBar", resources[1].first);
5253
EXPECT_EQ("test_rclcpp_components::TestComponentNoNode", resources[2].first);
5354

54-
namespace fs = rcpputils::fs;
55+
namespace fs = std::filesystem;
5556
EXPECT_TRUE(fs::exists(fs::path(resources[0].second)));
5657
EXPECT_TRUE(fs::exists(fs::path(resources[1].second)));
5758
EXPECT_TRUE(fs::exists(fs::path(resources[2].second)));

0 commit comments

Comments
 (0)