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