From f35146e48edca6755e98749a2cb5cc00272d308b Mon Sep 17 00:00:00 2001 From: Samuel Huang Date: Thu, 21 Jun 2018 15:50:22 +0000 Subject: [Zucchini] Refactor Zucchini-gen in zucchini_io layer. This CL moves Zucchini-gen invocation code from zucchini_commands.cc (in target zucchini) to zucchini_integration.cc (in target zucchini_io) to clean up layering in Zucchini API, i.e.: - zucchini_lib: Operates on buffers only. - zucchini_io: Adds files interface, uses memory-mapped I/O. - zucchini: Stand-alone executable that parses command-line arguments. Other changes: - Rename zucchini_lib functions (zuchcini.h), to dedup names and emphasize that these functions operate on buffers: - GenerateEnsemble() -> GenerateBuffer(), - GenerateEnsembleWithImposedMatches() -> GenerateBufferImposed(), - GenerateRaw() -> GenerateBufferRaw(), - Apply() -> ApplyBuffer(). These renames only affect Zucchini and various tests. - Variable renames and parameter reordering in zucchini_integration.cc. - Remove '-dd' param in help text of Zucchini-detect (was never ported from Trunk, and has been recently deleted there as well). - Replace all base::File&& with base::File. - Miscellaneous cleanup for header include. - Update README.md. Change-Id: I835b80d4d3d7b291fa822a7a89dab225bf9171e9 Reviewed-on: https://chromium-review.googlesource.com/1105625 Reviewed-by: Samuel Huang Reviewed-by: Greg Thompson Commit-Queue: Samuel Huang Cr-Commit-Position: refs/heads/master@{#569274} NOKEYCHECK=True GitOrigin-RevId: 9f0f325d6e2595deb8d50c77e0464946f3bf1ec1 --- zucchini_commands.cc | 66 ++++------------------------------------------------ 1 file changed, 5 insertions(+), 61 deletions(-) (limited to 'zucchini_commands.cc') diff --git a/zucchini_commands.cc b/zucchini_commands.cc index 62dd20d..1abe08f 100644 --- a/zucchini_commands.cc +++ b/zucchini_commands.cc @@ -38,67 +38,11 @@ constexpr char kSwitchRaw[] = "raw"; zucchini::status::Code MainGen(MainParams params) { CHECK_EQ(3U, params.file_paths.size()); - - // TODO(huangs): Move implementation to zucchini_integration.cc. - using base::File; - File old_file(params.file_paths[0], File::FLAG_OPEN | File::FLAG_READ); - zucchini::MappedFileReader old_image(std::move(old_file)); - if (old_image.HasError()) { - LOG(ERROR) << "Error with file " << params.file_paths[0].value() << ": " - << old_image.error(); - return zucchini::status::kStatusFileReadError; - } - File new_file(params.file_paths[1], File::FLAG_OPEN | File::FLAG_READ); - zucchini::MappedFileReader new_image(std::move(new_file)); - if (new_image.HasError()) { - LOG(ERROR) << "Error with file " << params.file_paths[1].value() << ": " - << new_image.error(); - return zucchini::status::kStatusFileReadError; - } - zucchini::EnsemblePatchWriter patch_writer(old_image.region(), - new_image.region()); - - zucchini::status::Code result = zucchini::status::kStatusSuccess; - if (params.command_line.HasSwitch(kSwitchRaw)) { - result = GenerateRaw(old_image.region(), new_image.region(), &patch_writer); - } else { - // May be empty. - std::string imposed_matches = - params.command_line.GetSwitchValueASCII(kSwitchImpose); - result = GenerateEnsembleWithImposedMatches( - old_image.region(), new_image.region(), std::move(imposed_matches), - &patch_writer); - } - - if (result != zucchini::status::kStatusSuccess) { - params.out << "Fatal error encountered when generating patch." << std::endl; - return result; - } - - // By default, delete patch on destruction, to avoid having lingering files in - // case of a failure. On Windows deletion can be done by the OS. - File patch_file(params.file_paths[2], File::FLAG_CREATE_ALWAYS | - File::FLAG_READ | File::FLAG_WRITE | - File::FLAG_SHARE_DELETE | - File::FLAG_CAN_DELETE_ON_CLOSE); - zucchini::MappedFileWriter patch(params.file_paths[2], std::move(patch_file), - patch_writer.SerializedSize()); - if (patch.HasError()) { - LOG(ERROR) << "Error with file " << params.file_paths[2].value() << ": " - << patch.error(); - return zucchini::status::kStatusFileWriteError; - } - - if (params.command_line.HasSwitch(kSwitchKeep)) - patch.Keep(); - - if (!patch_writer.SerializeInto(patch.region())) - return zucchini::status::kStatusPatchWriteError; - - // Successfully created patch. Explicitly request file to be kept. - if (!patch.Keep()) - return zucchini::status::kStatusFileWriteError; - return zucchini::status::kStatusSuccess; + return zucchini::Generate( + params.file_paths[0], params.file_paths[1], params.file_paths[2], + params.command_line.HasSwitch(kSwitchKeep), + params.command_line.HasSwitch(kSwitchRaw), + params.command_line.GetSwitchValueASCII(kSwitchImpose)); } zucchini::status::Code MainApply(MainParams params) { -- cgit v1.2.3