Add major_version flag in delta_generator.
Only affects major version number in the payload for now, actual implementation
of major version 2 will follow.
TEST=Call delta_generator manually with --major_version=2 then cros payload
show.
Bug: 23694580
Change-Id: I5baca5a868ec00dc2f6ea63d89e295d43283fd32
diff --git a/delta_performer.cc b/delta_performer.cc
index de877b8..6094c5a 100644
--- a/delta_performer.cc
+++ b/delta_performer.cc
@@ -68,6 +68,8 @@
const unsigned DeltaPerformer::kProgressDownloadWeight = 50;
const unsigned DeltaPerformer::kProgressOperationsWeight = 50;
+const uint64_t kChromeOSMajorPayloadVersion = 1;
+const uint64_t kBrilloMajorPayloadVersion = 2;
const uint32_t kInPlaceMinorPayloadVersion = 1;
const uint32_t kSourceMinorPayloadVersion = 2;
diff --git a/delta_performer.h b/delta_performer.h
index 45cb615..38a4151 100644
--- a/delta_performer.h
+++ b/delta_performer.h
@@ -36,6 +36,12 @@
namespace chromeos_update_engine {
+// The major version used by Chrome OS.
+extern const uint64_t kChromeOSMajorPayloadVersion;
+
+// The major version used by Brillo.
+extern const uint64_t kBrilloMajorPayloadVersion;
+
// The minor version used by the in-place delta generator algorithm.
extern const uint32_t kInPlaceMinorPayloadVersion;
diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
index 0451d9a..f0f399d 100644
--- a/delta_performer_unittest.cc
+++ b/delta_performer_unittest.cc
@@ -543,6 +543,7 @@
payload_config.is_delta = !full_rootfs;
payload_config.hard_chunk_size = chunk_size;
payload_config.rootfs_partition_size = kRootFSPartitionSize;
+ payload_config.major_version = kChromeOSMajorPayloadVersion;
payload_config.minor_version = minor_version;
if (!full_rootfs) {
payload_config.source.rootfs.path = state->a_img;
diff --git a/payload_generator/generate_delta_main.cc b/payload_generator/generate_delta_main.cc
index 1dedd68..0a5e105 100644
--- a/payload_generator/generate_delta_main.cc
+++ b/payload_generator/generate_delta_main.cc
@@ -261,6 +261,8 @@
DEFINE_uint64(rootfs_partition_size,
chromeos_update_engine::kRootFSPartitionSize,
"RootFS partition size for the image once installed");
+ DEFINE_uint64(major_version, 1,
+ "The major version of the payload being generated.");
DEFINE_int32(minor_version, -1,
"The minor version of the payload being generated "
"(-1 means autodetect).");
@@ -405,6 +407,9 @@
CHECK(payload_config.source.kernel.OpenFilesystem());
}
+ payload_config.major_version = FLAGS_major_version;
+ LOG(INFO) << "Using provided major_version=" << FLAGS_major_version;
+
if (FLAGS_minor_version == -1) {
// Autodetect minor_version by looking at the update_engine.conf in the old
// image.
diff --git a/payload_generator/payload_file.cc b/payload_generator/payload_file.cc
index d3cc0ba..66f51dd 100644
--- a/payload_generator/payload_file.cc
+++ b/payload_generator/payload_file.cc
@@ -18,6 +18,7 @@
#include <algorithm>
+#include "update_engine/delta_performer.h"
#include "update_engine/file_writer.h"
#include "update_engine/omaha_hash_calculator.h"
#include "update_engine/payload_constants.h"
@@ -33,8 +34,6 @@
namespace {
-const uint64_t kMajorVersionNumber = 1;
-
static const char* kInstallOperationTypes[] = {
"REPLACE",
"REPLACE_BZ",
@@ -73,6 +72,9 @@
};
bool PayloadFile::Init(const PayloadGenerationConfig& config) {
+ major_version_ = config.major_version;
+ TEST_AND_RETURN_FALSE(major_version_ == kChromeOSMajorPayloadVersion ||
+ major_version_ == kBrilloMajorPayloadVersion);
manifest_.set_minor_version(config.minor_version);
if (!config.source.ImageInfoIsEmpty())
@@ -179,7 +181,7 @@
TEST_AND_RETURN_FALSE(writer.Write(kDeltaMagic, strlen(kDeltaMagic)));
// Write major version number
- TEST_AND_RETURN_FALSE(WriteUint64AsBigEndian(&writer, kMajorVersionNumber));
+ TEST_AND_RETURN_FALSE(WriteUint64AsBigEndian(&writer, major_version_));
// Write protobuf length
TEST_AND_RETURN_FALSE(WriteUint64AsBigEndian(&writer,
diff --git a/payload_generator/payload_file.h b/payload_generator/payload_file.h
index 51c699c..6e0776c 100644
--- a/payload_generator/payload_file.h
+++ b/payload_generator/payload_file.h
@@ -81,6 +81,9 @@
// payload file.
static const std::vector<PartitionName> partition_disk_order_;
+ // The major_version of the requested payload.
+ uint64_t major_version_;
+
DeltaArchiveManifest manifest_;
std::map<PartitionName, std::vector<AnnotatedOperation>> aops_map_;
diff --git a/payload_generator/payload_generation_config.h b/payload_generator/payload_generation_config.h
index 191b674..372e427 100644
--- a/payload_generator/payload_generation_config.h
+++ b/payload_generator/payload_generation_config.h
@@ -117,6 +117,9 @@
// Wheter the requested payload is a delta payload.
bool is_delta = false;
+ // The major_version of the requested payload.
+ uint64_t major_version;
+
// The minor_version of the requested payload.
uint32_t minor_version;