From 0987dba63df2d1de4e1c1a112a992083b4716fec Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Fri, 2 Aug 2024 21:44:25 +0200 Subject: [PATCH] refactor: replace script with separate filters and transformers --- CMakeLists.txt | 2 +- include/dwarfs/chmod_entry_transformer.h | 1 - include/dwarfs/{script.h => entry_filter.h} | 18 +- include/dwarfs/internal/inode_manager.h | 1 - ...tin_script.h => rule_based_entry_filter.h} | 38 ++-- include/dwarfs/scanner.h | 18 +- src/dwarfs/chmod_entry_transformer.cpp | 1 + src/dwarfs/internal/inode_manager.cpp | 1 - ...script.cpp => rule_based_entry_filter.cpp} | 128 ++++++------ src/dwarfs/scanner.cpp | 186 +++++++++--------- src/mkdwarfs_main.cpp | 64 +++--- test/dwarfs_benchmark.cpp | 3 +- test/dwarfs_test.cpp | 44 +++-- test/test_helpers.h | 63 ++++-- 14 files changed, 299 insertions(+), 269 deletions(-) rename include/dwarfs/{script.h => entry_filter.h} (77%) rename include/dwarfs/{builtin_script.h => rule_based_entry_filter.h} (54%) rename src/dwarfs/{builtin_script.cpp => rule_based_entry_filter.cpp} (63%) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3a78721..ca126cf4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -647,7 +647,6 @@ list(APPEND LIBDWARFS_READER_SRC ) list(APPEND LIBDWARFS_WRITER_SRC - src/dwarfs/builtin_script.cpp src/dwarfs/categorizer.cpp src/dwarfs/category_parser.cpp src/dwarfs/chmod_entry_transformer.cpp @@ -674,6 +673,7 @@ list(APPEND LIBDWARFS_WRITER_SRC src/dwarfs/internal/scanner_progress.cpp src/dwarfs/internal/similarity.cpp src/dwarfs/internal/similarity_ordering.cpp + src/dwarfs/rule_based_entry_filter.cpp src/dwarfs/scanner.cpp src/dwarfs/segmenter.cpp src/dwarfs/segmenter_factory.cpp diff --git a/include/dwarfs/chmod_entry_transformer.h b/include/dwarfs/chmod_entry_transformer.h index 3abee54f..176e866c 100644 --- a/include/dwarfs/chmod_entry_transformer.h +++ b/include/dwarfs/chmod_entry_transformer.h @@ -21,7 +21,6 @@ #pragma once -#include #include #include diff --git a/include/dwarfs/script.h b/include/dwarfs/entry_filter.h similarity index 77% rename from include/dwarfs/script.h rename to include/dwarfs/entry_filter.h index 17be4b69..ac4a6699 100644 --- a/include/dwarfs/script.h +++ b/include/dwarfs/entry_filter.h @@ -21,22 +21,20 @@ #pragma once -#include -#include - namespace dwarfs { class entry_interface; -class script { +enum class filter_action { + keep, + remove, +}; + +class entry_filter { public: - virtual ~script() = default; + virtual ~entry_filter() = default; - virtual bool has_filter() const = 0; - virtual bool has_transform() const = 0; - - virtual bool filter(entry_interface const& ei) = 0; - virtual void transform(entry_interface& ei) = 0; + virtual filter_action filter(entry_interface const& ei) const = 0; }; } // namespace dwarfs diff --git a/include/dwarfs/internal/inode_manager.h b/include/dwarfs/internal/inode_manager.h index 6564b709..b0244631 100644 --- a/include/dwarfs/internal/inode_manager.h +++ b/include/dwarfs/internal/inode_manager.h @@ -38,7 +38,6 @@ namespace dwarfs { class logger; class os_access; class progress; -class script; struct inode_options; diff --git a/include/dwarfs/builtin_script.h b/include/dwarfs/rule_based_entry_filter.h similarity index 54% rename from include/dwarfs/builtin_script.h rename to include/dwarfs/rule_based_entry_filter.h index 014c0ca9..8a2d94dc 100644 --- a/include/dwarfs/builtin_script.h +++ b/include/dwarfs/rule_based_entry_filter.h @@ -24,53 +24,39 @@ #include #include #include -#include +#include -#include +#include +#include namespace dwarfs { -class entry_transformer; class file_access; class logger; -class builtin_script : public script { +class rule_based_entry_filter : public entry_filter { public: - builtin_script(logger& lgr, std::shared_ptr fa); - ~builtin_script(); + rule_based_entry_filter(logger& lgr, std::shared_ptr fa); + ~rule_based_entry_filter(); void set_root_path(std::filesystem::path const& path) { impl_->set_root_path(path); } - void add_filter_rule(std::string const& rule) { - impl_->add_filter_rule(rule); - } + void add_rule(std::string_view rule) { impl_->add_rule(rule); } - void add_filter_rules(std::istream& is) { impl_->add_filter_rules(is); } + void add_rules(std::istream& is) { impl_->add_rules(is); } - void add_transformer(std::unique_ptr&& xfm) { - impl_->add_transformer(std::move(xfm)); - } - - bool has_filter() const override; - bool has_transform() const override; - - bool filter(entry_interface const& ei) override; - void transform(entry_interface& ei) override; + filter_action filter(entry_interface const& ei) const override; class impl { public: virtual ~impl() = default; virtual void set_root_path(std::filesystem::path const& path) = 0; - virtual void add_filter_rule(std::string const& rule) = 0; - virtual void add_filter_rules(std::istream& is) = 0; - virtual void add_transformer(std::unique_ptr&& xfm) = 0; - virtual bool filter(entry_interface const& ei) = 0; - virtual void transform(entry_interface& ei) = 0; - virtual bool has_filter() const = 0; - virtual bool has_transform() const = 0; + virtual void add_rule(std::string_view rule) = 0; + virtual void add_rules(std::istream& is) = 0; + virtual filter_action filter(entry_interface const& ei) const = 0; }; private: diff --git a/include/dwarfs/scanner.h b/include/dwarfs/scanner.h index f2a01022..1a994beb 100644 --- a/include/dwarfs/scanner.h +++ b/include/dwarfs/scanner.h @@ -31,22 +31,31 @@ namespace dwarfs { struct scanner_options; +class entry_filter; +class entry_transformer; class entry_factory; class file_access; class filesystem_writer; class logger; class os_access; class writer_progress; -class script; class segmenter_factory; class thread_pool; class scanner { public: scanner(logger& lgr, thread_pool& pool, segmenter_factory& sf, - entry_factory& ef, os_access const& os, std::shared_ptr