diff options
author | Samuel Huang <huangs@chromium.org> | 2018-06-21 15:50:22 +0000 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2021-07-25 19:59:48 -0700 |
commit | f35146e48edca6755e98749a2cb5cc00272d308b (patch) | |
tree | 62e88698cbb4f79fea0f7b10326961b0f665e0a8 /zucchini_commands.cc | |
parent | 87dabe1110568bd11cd9044b1c5c49ab598bc2ad (diff) | |
download | zucchini-f35146e48edca6755e98749a2cb5cc00272d308b.tar.gz |
[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 <huangs@chromium.org>
Reviewed-by: Greg Thompson <grt@chromium.org>
Commit-Queue: Samuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#569274}
NOKEYCHECK=True
GitOrigin-RevId: 9f0f325d6e2595deb8d50c77e0464946f3bf1ec1
Diffstat (limited to 'zucchini_commands.cc')
-rw-r--r-- | zucchini_commands.cc | 66 |
1 files changed, 5 insertions, 61 deletions
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) { |