summaryrefslogtreecommitdiff
path: root/payload_generator/payload_generation_config.cc
diff options
context:
space:
mode:
Diffstat (limited to 'payload_generator/payload_generation_config.cc')
-rw-r--r--payload_generator/payload_generation_config.cc31
1 files changed, 23 insertions, 8 deletions
diff --git a/payload_generator/payload_generation_config.cc b/payload_generator/payload_generation_config.cc
index 71587963..35a95dc0 100644
--- a/payload_generator/payload_generation_config.cc
+++ b/payload_generator/payload_generation_config.cc
@@ -150,25 +150,34 @@ bool ImageConfig::LoadDynamicPartitionMetadata(
for (const auto& group_name : group_names) {
DynamicPartitionGroup* group = metadata->add_groups();
group->set_name(group_name);
- if (!store.GetString(group_name + "_size", &buf)) {
- LOG(ERROR) << "Missing " << group_name + "_size.";
+ if (!store.GetString("super_" + group_name + "_group_size", &buf) &&
+ !store.GetString(group_name + "_size", &buf)) {
+ LOG(ERROR) << "Missing super_" << group_name + "_group_size or "
+ << group_name << "_size.";
return false;
}
uint64_t max_size;
if (!base::StringToUint64(buf, &max_size)) {
- LOG(ERROR) << group_name << "_size=" << buf << " is not an integer.";
+ LOG(ERROR) << "Group size for " << group_name << " = " << buf
+ << " is not an integer.";
return false;
}
group->set_size(max_size);
- if (store.GetString(group_name + "_partition_list", &buf)) {
+ if (store.GetString("super_" + group_name + "_partition_list", &buf) ||
+ store.GetString(group_name + "_partition_list", &buf)) {
auto partition_names = brillo::string_utils::Split(buf, " ");
for (const auto& partition_name : partition_names) {
group->add_partition_names()->assign(partition_name);
}
}
}
+
+ bool snapshot_enabled = false;
+ store.GetBoolean("virtual_ab", &snapshot_enabled);
+ metadata->set_snapshot_enabled(snapshot_enabled);
+
dynamic_partition_metadata = std::move(metadata);
return true;
}
@@ -225,11 +234,12 @@ bool PayloadVersion::Validate() const {
minor == kOpSrcHashMinorPayloadVersion ||
minor == kBrotliBsdiffMinorPayloadVersion ||
minor == kPuffdiffMinorPayloadVersion ||
- minor == kVerityMinorPayloadVersion);
+ minor == kVerityMinorPayloadVersion ||
+ minor == kPartialUpdateMinorPayloadVersion);
return true;
}
-bool PayloadVersion::OperationAllowed(InstallOperation_Type operation) const {
+bool PayloadVersion::OperationAllowed(InstallOperation::Type operation) const {
switch (operation) {
// Full operations:
case InstallOperation::REPLACE:
@@ -260,13 +270,14 @@ bool PayloadVersion::OperationAllowed(InstallOperation_Type operation) const {
return false;
}
-bool PayloadVersion::IsDelta() const {
+bool PayloadVersion::IsDeltaOrPartial() const {
return minor != kFullPayloadMinorVersion;
}
bool PayloadGenerationConfig::Validate() const {
TEST_AND_RETURN_FALSE(version.Validate());
- TEST_AND_RETURN_FALSE(version.IsDelta() == is_delta);
+ TEST_AND_RETURN_FALSE(version.IsDeltaOrPartial() ==
+ (is_delta || is_partial_update));
if (is_delta) {
for (const PartitionConfig& part : source.partitions) {
if (!part.path.empty()) {
@@ -294,6 +305,10 @@ bool PayloadGenerationConfig::Validate() const {
TEST_AND_RETURN_FALSE(part.verity.IsEmpty());
}
+ if (version.minor < kPartialUpdateMinorPayloadVersion) {
+ TEST_AND_RETURN_FALSE(!is_partial_update);
+ }
+
TEST_AND_RETURN_FALSE(hard_chunk_size == -1 ||
hard_chunk_size % block_size == 0);
TEST_AND_RETURN_FALSE(soft_chunk_size % block_size == 0);