mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-11 21:35:27 -04:00
chore: use file_access abstraction in builtin_script
This commit is contained in:
parent
619abd8dc1
commit
46e6fbb721
@ -32,11 +32,12 @@
|
|||||||
namespace dwarfs {
|
namespace dwarfs {
|
||||||
|
|
||||||
class entry_transformer;
|
class entry_transformer;
|
||||||
|
class file_access;
|
||||||
class logger;
|
class logger;
|
||||||
|
|
||||||
class builtin_script : public script {
|
class builtin_script : public script {
|
||||||
public:
|
public:
|
||||||
builtin_script(logger& lgr);
|
builtin_script(logger& lgr, std::shared_ptr<file_access const> fa);
|
||||||
~builtin_script();
|
~builtin_script();
|
||||||
|
|
||||||
void set_root_path(std::filesystem::path const& path) {
|
void set_root_path(std::filesystem::path const& path) {
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <fstream>
|
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
@ -29,6 +28,7 @@
|
|||||||
#include "dwarfs/builtin_script.h"
|
#include "dwarfs/builtin_script.h"
|
||||||
#include "dwarfs/entry_interface.h"
|
#include "dwarfs/entry_interface.h"
|
||||||
#include "dwarfs/entry_transformer.h"
|
#include "dwarfs/entry_transformer.h"
|
||||||
|
#include "dwarfs/file_access.h"
|
||||||
#include "dwarfs/logger.h"
|
#include "dwarfs/logger.h"
|
||||||
#include "dwarfs/util.h"
|
#include "dwarfs/util.h"
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ struct filter_rule {
|
|||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
class builtin_script_ : public builtin_script::impl {
|
class builtin_script_ : public builtin_script::impl {
|
||||||
public:
|
public:
|
||||||
explicit builtin_script_(logger& lgr);
|
builtin_script_(logger& lgr, std::shared_ptr<file_access const> fa);
|
||||||
|
|
||||||
void set_root_path(std::filesystem::path const& path) override;
|
void set_root_path(std::filesystem::path const& path) override;
|
||||||
void add_filter_rule(std::string const& rule) 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::string root_path_;
|
||||||
std::vector<filter_rule> filter_;
|
std::vector<filter_rule> filter_;
|
||||||
std::vector<std::unique_ptr<entry_transformer>> transformer_;
|
std::vector<std::unique_ptr<entry_transformer>> transformer_;
|
||||||
|
std::shared_ptr<file_access const> fa_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
@ -179,8 +180,10 @@ auto builtin_script_<LoggerPolicy>::compile_filter_rule(std::string const& rule)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
builtin_script_<LoggerPolicy>::builtin_script_(logger& lgr)
|
builtin_script_<LoggerPolicy>::builtin_script_(
|
||||||
: log_(lgr) {}
|
logger& lgr, std::shared_ptr<file_access const> fa)
|
||||||
|
: log_{lgr}
|
||||||
|
, fa_{std::move(fa)} {}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
void builtin_script_<LoggerPolicy>::set_root_path(
|
void builtin_script_<LoggerPolicy>::set_root_path(
|
||||||
@ -212,13 +215,8 @@ void builtin_script_<LoggerPolicy>::add_filter_rule(
|
|||||||
fmt::format("recursion detected while opening file: {}", file));
|
fmt::format("recursion detected while opening file: {}", file));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ifstream ifs(file);
|
auto ifs = fa_->open_input(file);
|
||||||
|
add_filter_rules(seen_files, ifs->is());
|
||||||
if (!ifs.is_open()) {
|
|
||||||
throw std::runtime_error(fmt::format("error opening file: {}", file));
|
|
||||||
}
|
|
||||||
|
|
||||||
add_filter_rules(seen_files, ifs);
|
|
||||||
|
|
||||||
seen_files.erase(file);
|
seen_files.erase(file);
|
||||||
} else {
|
} else {
|
||||||
@ -277,9 +275,10 @@ void builtin_script_<LoggerPolicy>::transform(entry_interface& ei) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
builtin_script::builtin_script(logger& lgr)
|
builtin_script::builtin_script(logger& lgr,
|
||||||
|
std::shared_ptr<file_access const> fa)
|
||||||
: impl_(make_unique_logging_object<impl, builtin_script_, logger_policies>(
|
: impl_(make_unique_logging_object<impl, builtin_script_, logger_policies>(
|
||||||
lgr)) {}
|
lgr, std::move(fa))) {}
|
||||||
|
|
||||||
builtin_script::~builtin_script() = default;
|
builtin_script::~builtin_script() = default;
|
||||||
|
|
||||||
|
@ -881,7 +881,7 @@ int mkdwarfs_main(int argc, sys_char** argv, iolayer const& iol) {
|
|||||||
std::shared_ptr<script> script;
|
std::shared_ptr<script> script;
|
||||||
|
|
||||||
if (!filter.empty() or vm.count("chmod")) {
|
if (!filter.empty() or vm.count("chmod")) {
|
||||||
auto bs = std::make_shared<builtin_script>(lgr);
|
auto bs = std::make_shared<builtin_script>(lgr, iol.file);
|
||||||
|
|
||||||
if (!filter.empty()) {
|
if (!filter.empty()) {
|
||||||
bs->set_root_path(path);
|
bs->set_root_path(path);
|
||||||
|
@ -860,10 +860,13 @@ class filter_test
|
|||||||
public:
|
public:
|
||||||
test::test_logger lgr;
|
test::test_logger lgr;
|
||||||
std::shared_ptr<builtin_script> scr;
|
std::shared_ptr<builtin_script> scr;
|
||||||
|
std::shared_ptr<test::test_file_access> tfa;
|
||||||
std::shared_ptr<test::os_access_mock> input;
|
std::shared_ptr<test::os_access_mock> input;
|
||||||
|
|
||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
scr = std::make_shared<builtin_script>(lgr);
|
tfa = std::make_shared<test::test_file_access>();
|
||||||
|
|
||||||
|
scr = std::make_shared<builtin_script>(lgr, tfa);
|
||||||
scr->set_root_path("");
|
scr->set_root_path("");
|
||||||
|
|
||||||
input = std::make_shared<test::os_access_mock>();
|
input = std::make_shared<test::os_access_mock>();
|
||||||
@ -1000,6 +1003,7 @@ class filter_test
|
|||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
scr.reset();
|
scr.reset();
|
||||||
input.reset();
|
input.reset();
|
||||||
|
tfa.reset();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user