aboutsummaryrefslogtreecommitdiff
path: root/zucchini_commands.cc
diff options
context:
space:
mode:
authorSamuel Huang <huangs@chromium.org>2018-06-21 15:50:22 +0000
committerCopybara-Service <copybara-worker@google.com>2021-07-25 19:59:48 -0700
commitf35146e48edca6755e98749a2cb5cc00272d308b (patch)
tree62e88698cbb4f79fea0f7b10326961b0f665e0a8 /zucchini_commands.cc
parent87dabe1110568bd11cd9044b1c5c49ab598bc2ad (diff)
downloadzucchini-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.cc66
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) {