refactor: move rewrite_filesystem to its own library

This commit is contained in:
Marcus Holland-Moritz 2024-08-04 18:39:10 +02:00
parent c1fbaf7789
commit 9f60f91b60
5 changed files with 30 additions and 17 deletions

View File

@ -665,7 +665,6 @@ list(APPEND
src/dwarfs/writer/fragment_category.cpp
src/dwarfs/writer/fragment_order_parser.cpp
src/dwarfs/writer/inode_fragments.cpp
src/dwarfs/writer/rewrite_filesystem.cpp
src/dwarfs/writer/rule_based_entry_filter.cpp
src/dwarfs/writer/scanner.cpp
src/dwarfs/writer/segmenter.cpp
@ -689,6 +688,10 @@ list(APPEND
src/dwarfs/writer/internal/similarity_ordering.cpp
)
list(APPEND LIBDWARFS_REWRITE_SRC
src/dwarfs/utility/rewrite_filesystem.cpp
)
list(APPEND LIBDWARFS_EXTRACTOR_SRC
src/dwarfs/filesystem_extractor.cpp
)
@ -781,12 +784,14 @@ add_library(dwarfs_common ${LIBDWARFS_COMMON_SRC} ${LIBDWARFS_COMPRESSION_SRC})
add_library(dwarfs_reader ${LIBDWARFS_READER_SRC})
add_library(dwarfs_writer ${LIBDWARFS_WRITER_SRC} ${LIBDWARFS_CATEGORIZER_SRC})
add_library(dwarfs_extractor ${LIBDWARFS_EXTRACTOR_SRC})
add_library(dwarfs_rewrite ${LIBDWARFS_REWRITE_SRC})
add_library(dwarfs_tool OBJECT ${LIBDWARFS_TOOL_SRC})
target_link_libraries(dwarfs_common PRIVATE dwarfs_folly_lite PkgConfig::LIBCRYPTO xxHash::xxhash phmap range-v3::range-v3)
target_link_libraries(dwarfs_reader PUBLIC dwarfs_common PRIVATE range-v3::range-v3)
target_link_libraries(dwarfs_writer PUBLIC dwarfs_common PRIVATE phmap range-v3::range-v3)
target_link_libraries(dwarfs_extractor PUBLIC dwarfs_reader)
target_link_libraries(dwarfs_rewrite PUBLIC dwarfs_reader dwarfs_writer)
target_link_libraries(dwarfs_tool PUBLIC dwarfs_common)
if(DWARFS_GIT_BUILD)
@ -1227,7 +1232,7 @@ foreach(tgt ${MAIN_TARGETS} ${BINARY_TARGETS} ${TEST_TARGETS})
target_link_libraries(${tgt} PRIVATE dwarfs_tool)
endforeach()
target_link_libraries(mkdwarfs_main PRIVATE dwarfs_reader dwarfs_writer)
target_link_libraries(mkdwarfs_main PRIVATE dwarfs_reader dwarfs_writer dwarfs_rewrite)
target_link_libraries(dwarfsck_main PRIVATE dwarfs_reader)
target_link_libraries(dwarfsextract_main PRIVATE dwarfs_extractor)
@ -1255,7 +1260,7 @@ if(TARGET segmenter_benchmark)
endif()
foreach(tgt ${TEST_TARGETS})
target_link_libraries(${tgt} PRIVATE dwarfs_writer dwarfs_extractor)
target_link_libraries(${tgt} PRIVATE dwarfs_writer dwarfs_rewrite dwarfs_extractor)
endforeach()
if(STATIC_BUILD_DO_NOT_USE)
@ -1396,6 +1401,7 @@ if(NOT STATIC_BUILD_DO_NOT_USE)
dwarfs_reader
dwarfs_writer
dwarfs_extractor
dwarfs_rewrite
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)

View File

@ -39,10 +39,15 @@ namespace writer {
class category_resolver;
class filesystem_writer;
} // namespace writer
namespace utility {
void rewrite_filesystem(logger& lgr, dwarfs::reader::filesystem_v2 const& fs,
filesystem_writer& writer,
category_resolver const& cat_resolver,
dwarfs::writer::filesystem_writer& writer,
dwarfs::writer::category_resolver const& cat_resolver,
rewrite_options const& opts);
} // namespace writer
} // namespace utility
} // namespace dwarfs

View File

@ -29,12 +29,15 @@
#include <dwarfs/writer/internal/block_data.h>
#include <dwarfs/writer/internal/filesystem_writer_detail.h>
namespace dwarfs::writer {
namespace dwarfs::utility {
void rewrite_filesystem(logger& lgr, dwarfs::reader::filesystem_v2 const& fs,
filesystem_writer& fs_writer,
category_resolver const& cat_resolver,
dwarfs::writer::filesystem_writer& fs_writer,
dwarfs::writer::category_resolver const& cat_resolver,
rewrite_options const& opts) {
using dwarfs::writer::fragment_category;
using dwarfs::writer::internal::block_data;
LOG_PROXY(debug_logger_policy, lgr);
auto parser = fs.get_parser();
@ -178,8 +181,7 @@ void rewrite_filesystem(logger& lgr, dwarfs::reader::filesystem_v2 const& fs,
<< "), compressing using '"
<< writer.get_compressor(s->type()).describe() << "'";
writer.write_history(
std::make_shared<internal::block_data>(hist.serialize()));
writer.write_history(std::make_shared<block_data>(hist.serialize()));
} else {
LOG_VERBOSE << "removing " << get_section_name(s->type());
}
@ -199,4 +201,4 @@ void rewrite_filesystem(logger& lgr, dwarfs::reader::filesystem_v2 const& fs,
writer.flush();
}
} // namespace dwarfs::writer
} // namespace dwarfs::utility

View File

@ -74,6 +74,7 @@
#include <dwarfs/tool/program_options_helpers.h>
#include <dwarfs/tool/tool.h>
#include <dwarfs/util.h>
#include <dwarfs/utility/rewrite_filesystem.h>
#include <dwarfs/writer/categorizer.h>
#include <dwarfs/writer/category_parser.h>
#include <dwarfs/writer/chmod_entry_transformer.h>
@ -83,7 +84,6 @@
#include <dwarfs/writer/filesystem_writer.h>
#include <dwarfs/writer/filter_debug.h>
#include <dwarfs/writer/fragment_order_parser.h>
#include <dwarfs/writer/rewrite_filesystem.h>
#include <dwarfs/writer/rule_based_entry_filter.h>
#include <dwarfs/writer/scanner.h>
#include <dwarfs/writer/segmenter_factory.h>
@ -1335,8 +1335,8 @@ int mkdwarfs_main(int argc, sys_char** argv, iolayer const& iol) {
try {
if (recompress) {
writer::rewrite_filesystem(lgr, *input_filesystem, *fsw, *cat_resolver,
rw_opts);
utility::rewrite_filesystem(lgr, *input_filesystem, *fsw, *cat_resolver,
rw_opts);
} else {
writer::segmenter_factory sf(lgr, prog, options.inode.categorizer_mgr,
sf_config);

View File

@ -44,10 +44,10 @@
#include <dwarfs/options.h>
#include <dwarfs/reader/filesystem_v2.h>
#include <dwarfs/thread_pool.h>
#include <dwarfs/utility/rewrite_filesystem.h>
#include <dwarfs/vfs_stat.h>
#include <dwarfs/writer/filesystem_block_category_resolver.h>
#include <dwarfs/writer/filesystem_writer.h>
#include <dwarfs/writer/rewrite_filesystem.h>
#include <dwarfs/writer/writer_progress.h>
#include "mmap_mock.h"
@ -1127,7 +1127,7 @@ TEST_P(rewrite, filesystem_rewrite) {
reader::filesystem_v2 fs(lgr, os, mm, fsopts);
writer::filesystem_block_category_resolver resolver(
fs.get_all_block_categories());
writer::rewrite_filesystem(lgr, fs, fsw, resolver, opts);
utility::rewrite_filesystem(lgr, fs, fsw, resolver, opts);
};
{