summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--delta_performer_unittest.cc1
-rw-r--r--payload_generator/delta_diff_generator.cc9
-rw-r--r--payload_generator/delta_diff_generator.h2
-rw-r--r--payload_generator/generate_delta_main.cc52
4 files changed, 44 insertions, 20 deletions
diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
index b8aad44c..af257df5 100644
--- a/delta_performer_unittest.cc
+++ b/delta_performer_unittest.cc
@@ -479,6 +479,7 @@ static void GenerateDeltaFile(bool full_kernel,
private_key,
chunk_size,
kRootFSPartitionSize,
+ DeltaPerformer::kSupportedMinorPayloadVersion,
full_rootfs ? nullptr : &old_image_info,
&new_image_info,
&state->metadata_size));
diff --git a/payload_generator/delta_diff_generator.cc b/payload_generator/delta_diff_generator.cc
index fae43d3f..3a5e1eb9 100644
--- a/payload_generator/delta_diff_generator.cc
+++ b/payload_generator/delta_diff_generator.cc
@@ -1574,6 +1574,7 @@ bool DeltaDiffGenerator::GenerateDeltaUpdateFile(
const string& private_key_path,
off_t chunk_size,
size_t rootfs_partition_size,
+ uint64_t minor_version,
const ImageInfo* old_image_info,
const ImageInfo* new_image_info,
uint64_t* metadata_size) {
@@ -1643,6 +1644,10 @@ bool DeltaDiffGenerator::GenerateDeltaUpdateFile(
if (!old_image.empty()) {
// Delta update
+ // Set the minor version for this payload.
+ LOG(INFO) << "Adding Delta Minor Version.";
+ manifest.set_minor_version(minor_version);
+
TEST_AND_RETURN_FALSE(DeltaReadFiles(&graph,
&blocks,
old_root,
@@ -1705,10 +1710,6 @@ bool DeltaDiffGenerator::GenerateDeltaUpdateFile(
&data_file_size,
&final_order,
scratch_vertex));
-
- // Set the minor version for this payload.
- LOG(INFO) << "Adding Delta Minor Version.";
- manifest.set_minor_version(DeltaPerformer::kSupportedMinorPayloadVersion);
} else {
// Full update
off_t new_image_size =
diff --git a/payload_generator/delta_diff_generator.h b/payload_generator/delta_diff_generator.h
index ee5a4090..109004e9 100644
--- a/payload_generator/delta_diff_generator.h
+++ b/payload_generator/delta_diff_generator.h
@@ -67,6 +67,7 @@ class DeltaDiffGenerator {
// If |chunk_size| is not -1, the delta payload is generated based on
// |chunk_size| chunks rather than whole files.
// This method computes scratch space based on |rootfs_partition_size|.
+ // |minor_version| indicates the payload minor version for a delta update.
// Returns true on success. Also writes the size of the metadata into
// |metadata_size|.
static bool GenerateDeltaUpdateFile(const std::string& old_root,
@@ -79,6 +80,7 @@ class DeltaDiffGenerator {
const std::string& private_key_path,
off_t chunk_size,
size_t rootfs_partition_size,
+ uint64_t minor_version,
const ImageInfo* old_image_info,
const ImageInfo* new_image_info,
uint64_t* metadata_size);
diff --git a/payload_generator/generate_delta_main.cc b/payload_generator/generate_delta_main.cc
index bcd8738a..c0dfe186 100644
--- a/payload_generator/generate_delta_main.cc
+++ b/payload_generator/generate_delta_main.cc
@@ -40,6 +40,8 @@ namespace chromeos_update_engine {
namespace {
+const uint64_t kInPlaceMinorPayloadVersion = 1;
+
void ParseSignatureSizes(const string& signature_sizes_flag,
vector<int>* signature_sizes) {
signature_sizes->clear();
@@ -253,6 +255,8 @@ int Main(int argc, char** argv) {
DEFINE_int64(rootfs_partition_size,
chromeos_update_engine::kRootFSPartitionSize,
"RootFS partition size for the image once installed");
+ DEFINE_int64(minor_version, 0,
+ "The minor version of the payload being generated");
DEFINE_string(old_channel, "",
"The channel for the old image. 'dev-channel', 'npo-channel', "
@@ -374,23 +378,39 @@ int Main(int argc, char** argv) {
LOG(INFO) << "Generating full update";
}
- uint64_t metadata_size;
- if (!DeltaDiffGenerator::GenerateDeltaUpdateFile(
- FLAGS_old_dir,
- FLAGS_old_image,
- FLAGS_new_dir,
- FLAGS_new_image,
- FLAGS_old_kernel,
- FLAGS_new_kernel,
- FLAGS_out_file,
- FLAGS_private_key,
- FLAGS_chunk_size,
- FLAGS_rootfs_partition_size,
- is_delta ? &old_image_info : nullptr,
- &new_image_info,
- &metadata_size)) {
- return 1;
+ if (!CommandLine::ForCurrentProcess()->HasSwitch("minor_version")) {
+ if (is_delta) {
+ FLAGS_minor_version = DeltaPerformer::kSupportedMinorPayloadVersion;
+ } else {
+ FLAGS_minor_version = DeltaPerformer::kFullPayloadMinorVersion;
+ }
}
+
+ if (FLAGS_minor_version == kInPlaceMinorPayloadVersion ||
+ static_cast<uint64_t>(FLAGS_minor_version) ==
+ DeltaPerformer::kFullPayloadMinorVersion) {
+ uint64_t metadata_size;
+ if (!DeltaDiffGenerator::GenerateDeltaUpdateFile(
+ FLAGS_old_dir,
+ FLAGS_old_image,
+ FLAGS_new_dir,
+ FLAGS_new_image,
+ FLAGS_old_kernel,
+ FLAGS_new_kernel,
+ FLAGS_out_file,
+ FLAGS_private_key,
+ FLAGS_chunk_size,
+ FLAGS_rootfs_partition_size,
+ FLAGS_minor_version,
+ is_delta ? &old_image_info : nullptr,
+ &new_image_info,
+ &metadata_size)) {
+ return 1;
+ }
+ } else {
+ LOG(FATAL) << "Unsupported minor payload version: " << FLAGS_minor_version;
+ }
+
return 0;
}