From 46e6fbb721a60c65891ec79201664973ebdec549 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Sat, 30 Dec 2023 16:45:18 +0100 Subject: [PATCH] chore: use file_access abstraction in builtin_script --- include/dwarfs/builtin_script.h | 3 ++- src/dwarfs/builtin_script.cpp | 25 ++++++++++++------------- src/mkdwarfs_main.cpp | 2 +- test/dwarfs_test.cpp | 6 +++++- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/include/dwarfs/builtin_script.h b/include/dwarfs/builtin_script.h index 73742e56..580e3f67 100644 --- a/include/dwarfs/builtin_script.h +++ b/include/dwarfs/builtin_script.h @@ -32,11 +32,12 @@ namespace dwarfs { class entry_transformer; +class file_access; class logger; class builtin_script : public script { public: - builtin_script(logger& lgr); + builtin_script(logger& lgr, std::shared_ptr fa); ~builtin_script(); void set_root_path(std::filesystem::path const& path) { diff --git a/src/dwarfs/builtin_script.cpp b/src/dwarfs/builtin_script.cpp index c246f096..f0e00fd8 100644 --- a/src/dwarfs/builtin_script.cpp +++ b/src/dwarfs/builtin_script.cpp @@ -20,7 +20,6 @@ */ #include -#include #include #include @@ -29,6 +28,7 @@ #include "dwarfs/builtin_script.h" #include "dwarfs/entry_interface.h" #include "dwarfs/entry_transformer.h" +#include "dwarfs/file_access.h" #include "dwarfs/logger.h" #include "dwarfs/util.h" @@ -56,7 +56,7 @@ struct filter_rule { template class builtin_script_ : public builtin_script::impl { public: - explicit builtin_script_(logger& lgr); + builtin_script_(logger& lgr, std::shared_ptr fa); void set_root_path(std::filesystem::path const& path) override; void add_filter_rule(std::string const& rule) override; @@ -85,6 +85,7 @@ class builtin_script_ : public builtin_script::impl { std::string root_path_; std::vector filter_; std::vector> transformer_; + std::shared_ptr fa_; }; template @@ -179,8 +180,10 @@ auto builtin_script_::compile_filter_rule(std::string const& rule) } template -builtin_script_::builtin_script_(logger& lgr) - : log_(lgr) {} +builtin_script_::builtin_script_( + logger& lgr, std::shared_ptr fa) + : log_{lgr} + , fa_{std::move(fa)} {} template void builtin_script_::set_root_path( @@ -212,13 +215,8 @@ void builtin_script_::add_filter_rule( fmt::format("recursion detected while opening file: {}", file)); } - std::ifstream ifs(file); - - if (!ifs.is_open()) { - throw std::runtime_error(fmt::format("error opening file: {}", file)); - } - - add_filter_rules(seen_files, ifs); + auto ifs = fa_->open_input(file); + add_filter_rules(seen_files, ifs->is()); seen_files.erase(file); } else { @@ -277,9 +275,10 @@ void builtin_script_::transform(entry_interface& ei) { } } -builtin_script::builtin_script(logger& lgr) +builtin_script::builtin_script(logger& lgr, + std::shared_ptr fa) : impl_(make_unique_logging_object( - lgr)) {} + lgr, std::move(fa))) {} builtin_script::~builtin_script() = default; diff --git a/src/mkdwarfs_main.cpp b/src/mkdwarfs_main.cpp index cc13d91d..2ecf4b4a 100644 --- a/src/mkdwarfs_main.cpp +++ b/src/mkdwarfs_main.cpp @@ -881,7 +881,7 @@ int mkdwarfs_main(int argc, sys_char** argv, iolayer const& iol) { std::shared_ptr