| // Copyright 2020 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ureadahead-diff/ureadahead_diff.h" |
| |
| #include <base/logging.h> |
| #include <brillo/flag_helper.h> |
| |
| namespace { |
| |
| constexpr char help[] = |
| "Calculate difference of two ureadahead packs. Output is written into " |
| "three packs.\nCommon contains the same read operations from two source " |
| "packs. Difference packs\ncontain unique read operations for the " |
| "corresponding source pack."; |
| } |
| |
| int main(int argc, char* argv[]) { |
| DEFINE_string(source1, "", "First source pack to process"); |
| DEFINE_string(source2, "", "Second source pack to process"); |
| DEFINE_string(common, "", "Common pack output name"); |
| DEFINE_string(difference1, "", "Output difference for the first pack"); |
| DEFINE_string(difference2, "", "Output difference for the second pack"); |
| |
| brillo::FlagHelper::Init(argc, argv, help); |
| |
| if (FLAGS_source1.empty() || FLAGS_source2.empty() || FLAGS_common.empty() || |
| FLAGS_difference1.empty() || FLAGS_difference2.empty()) { |
| LOG(ERROR) << "Not all arguments are provided"; |
| return 1; |
| } |
| |
| ureadahead_diff::Pack pack1; |
| ureadahead_diff::Pack pack2; |
| |
| if (!pack1.Read(FLAGS_source1)) { |
| LOG(ERROR) << "Failed to read " << FLAGS_source1; |
| return 2; |
| } |
| |
| if (!pack2.Read(FLAGS_source2)) { |
| LOG(ERROR) << "Failed to read " << FLAGS_source2; |
| return 3; |
| } |
| |
| ureadahead_diff::Pack common; |
| ureadahead_diff::Pack::CalculateDifference(&pack1, &pack2, &common); |
| |
| if (!common.Write(FLAGS_common)) { |
| LOG(ERROR) << "Failed to write " << FLAGS_common; |
| return 4; |
| } |
| |
| if (!pack1.Write(FLAGS_difference1)) { |
| LOG(ERROR) << "Failed to write " << FLAGS_difference1; |
| return 5; |
| } |
| |
| if (!pack2.Write(FLAGS_difference2)) { |
| LOG(ERROR) << "Failed to write " << FLAGS_difference2; |
| return 6; |
| } |
| |
| return 0; |
| } |