Refactor for new libsnapshot_cow API.
- Don't use CowWriter directly, use ICowWriter.
- Instantiate based on manifest version.
- Replace Emit* calls with Add*.
- Remove manual initialization.
Bug: 280529365
Test: update_engine_unittests
ota applies
Change-Id: I9c9ac5e45c260b2dca8c41c4718f9667adf90c54
diff --git a/aosp/cow_converter.cc b/aosp/cow_converter.cc
index b9ec00a..80d161f 100644
--- a/aosp/cow_converter.cc
+++ b/aosp/cow_converter.cc
@@ -35,7 +35,6 @@
#include "update_engine/payload_generator/cow_size_estimator.h"
#include "update_engine/update_metadata.pb.h"
-using android::snapshot::CowWriter;
DEFINE_string(partitions,
"",
"Comma separated list of partitions to extract, leave empty for "
@@ -43,9 +42,10 @@
namespace chromeos_update_engine {
-bool ProcessPartition(const chromeos_update_engine::PartitionUpdate& partition,
- const char* image_dir,
- size_t block_size) {
+bool ProcessPartition(
+ const chromeos_update_engine::DeltaArchiveManifest& manifest,
+ const chromeos_update_engine::PartitionUpdate& partition,
+ const char* image_dir) {
base::FilePath img_dir{image_dir};
auto target_img = img_dir.Append(partition.partition_name() + ".img");
auto output_cow = img_dir.Append(partition.partition_name() + ".cow");
@@ -61,18 +61,23 @@
return false;
}
- android::snapshot::CowWriter cow_writer{
- {.block_size = static_cast<uint32_t>(block_size), .compression = "gz"}};
- TEST_AND_RETURN_FALSE(cow_writer.Initialize(output_fd));
+ const auto& dap = manifest.dynamic_partition_metadata();
+
+ android::snapshot::CowOptions options{
+ .block_size = static_cast<uint32_t>(manifest.block_size()),
+ .compression = dap.vabc_compression_param()};
+ auto cow_writer = android::snapshot::CreateCowWriter(
+ dap.cow_version(), options, std::move(output_fd));
+ TEST_AND_RETURN_FALSE(cow_writer);
TEST_AND_RETURN_FALSE(CowDryRun(nullptr,
target_img_fd,
partition.operations(),
partition.merge_operations(),
- block_size,
- &cow_writer,
+ manifest.block_size(),
+ cow_writer.get(),
partition.new_partition_info().size(),
false));
- TEST_AND_RETURN_FALSE(cow_writer.Finalize());
+ TEST_AND_RETURN_FALSE(cow_writer->Finalize());
return true;
}
@@ -148,7 +153,7 @@
continue;
}
LOG(INFO) << partition.partition_name();
- if (!ProcessPartition(partition, images_dir, manifest.block_size())) {
+ if (!ProcessPartition(manifest, partition, images_dir)) {
return 6;
}
base::FilePath img_dir{images_dir};