Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e1b8059 authored by Tianjie Xu's avatar Tianjie Xu Committed by Gerrit Code Review
Browse files

Merge "Update libsnapshot to handle partial update"

parents 046cc119 0d05b7a8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2277,6 +2277,10 @@ Return SnapshotManager::CreateUpdateSnapshotsInternal(
        auto operations_it = install_operation_map.find(target_partition->name());
        if (operations_it != install_operation_map.end()) {
            cow_creator->operations = operations_it->second;
        } else {
            LOG(INFO) << target_partition->name()
                      << " isn't included in the payload, skipping the cow creation.";
            continue;
        }

        cow_creator->extra_extents.clear();
+19 −0
Original line number Diff line number Diff line
@@ -62,6 +62,8 @@ SnapshotMetadataUpdater::SnapshotMetadataUpdater(MetadataBuilder* builder, uint3
                                               std::string(it->second) + target_suffix_, &p});
        }
    }

    partial_update_ = manifest.partial_update();
}

bool SnapshotMetadataUpdater::ShrinkPartitions() const {
@@ -82,6 +84,18 @@ bool SnapshotMetadataUpdater::ShrinkPartitions() const {
}

bool SnapshotMetadataUpdater::DeletePartitions() const {
    // For partial update, not all dynamic partitions are included in the payload.
    // TODO(xunchang) delete the untouched partitions whose group is in the payload.
    // e.g. Delete vendor in the following scenario
    // On device:
    //   Group A: system, vendor
    // In payload:
    //   Group A: system
    if (partial_update_) {
        LOG(INFO) << "Skip deleting partitions for partial update";
        return true;
    }

    std::vector<std::string> partitions_to_delete;
    // Don't delete partitions in groups where the group name doesn't have target_suffix,
    // e.g. default.
@@ -139,6 +153,11 @@ bool SnapshotMetadataUpdater::ShrinkGroups() const {
}

bool SnapshotMetadataUpdater::DeleteGroups() const {
    if (partial_update_) {
        LOG(INFO) << "Skip deleting groups for partial update";
        return true;
    }

    std::vector<std::string> existing_groups = builder_->ListGroups();
    for (const auto& existing_group_name : existing_groups) {
        // Don't delete groups without target suffix, e.g. default.
+1 −0
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ class SnapshotMetadataUpdater {
    const std::string target_suffix_;
    std::vector<Group> groups_;
    std::vector<Partition> partitions_;
    bool partial_update_{false};
};

}  // namespace snapshot
+1 −0
Original line number Diff line number Diff line
@@ -77,4 +77,5 @@ message DynamicPartitionMetadata {
message DeltaArchiveManifest {
    repeated PartitionUpdate partitions = 13;
    optional DynamicPartitionMetadata dynamic_partition_metadata = 15;
    optional bool partial_update = 16;
}