commit | 20e34273aa7b9a2f094358f11b25ad900a1e29bd | [log] [tgz] |
---|---|---|
author | pigweed-integration-roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com> | Mon Sep 13 21:14:28 2021 +0000 |
committer | CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com> | Mon Sep 13 21:32:18 2021 +0000 |
tree | dbb5da8b8fe8016ef50b98bf7608e3f700d22dc8 | |
parent | e89be5c0598c4c5c3509123ae9e582ec04741f2d [diff] |
[roll third_party/pigweed] pw_protobuf: Add helper for map entry write Expose low level APIs in pw_protobuf for estimating field size and writing length-delimited field key and length prefix. Use them to implement a helper function in pw_software_update for writing proto map<string, bytes> entries. Context: UpdateBundle needs to construct the following Manifest proto message from blob storage: message Manifest { optional SnapshotMetadata snapshot_metadata = 1; map<string, TargetsMetadata> targets_metadata = 2; } For wire format generation, it is essentially equivalent to the following definition with a nested `Entry` message. message Entry { string key = 1; bytes value = 2; } message Manifest { optional bytes snapshot_metadata = 1; repeated Entry targets_metadata = 2; } Although protobuf::StreamEncoder has capability for nested message encoding, it requires a scratch buffer that shall be at least the largest sub-message size. In this case, it will be largest target metadata in the update software bundle, which however, can be fairly large and difficult to estimate. To avoid the issue, the CL takes an approach to construct the message from lower level. Specifically, the CL constructs the delimited field key and length prefix for `Entry` on its own and write to output, then followed by writing a regular string field of `key` and bytes field of `value` via the normal StreamEncoder approach. Original-Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/59681 https://pigweed.googlesource.com/pigweed/pigweed third_party/pigweed Rolled-Commits: 03e1b265752f327..931f4d54ab96caa Roller-URL: https://ci.chromium.org/b/8836171133824955345 Cq-Cl-Tag: roller-builder:pigweed-experimental-roller Cq-Cl-Tag: roller-bid:8836171133824955345 CQ-Do-Not-Cancel-Tryjobs: true Change-Id: I6215c3127dd256a065ce48d7aa7255d1f0153065 Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/experimental/+/60741 Bot-Commit: Pigweed Integration Roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com> Commit-Queue: Pigweed Integration Roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com>
This repository contains experimental pigweed modules.
Clone this repo with --recursive
to get all required submodules.
git clone --recursive https://pigweed.googlesource.com/pigweed/experimental
This will pull the Pigweed source repository into third_party/pigweed
. If you already cloned but forgot to --recursive
run git submodule update --init
to pull all submodules.