Merge changes I0f3f0333,If447b2cf am: 435a5fc0c2
am: 74538db684
am: 435f3d3f16
am: 8885ef0529
am: 6e35461b69
Original change: https://android-review.googlesource.com/c/platform/bootable/recovery/+/1371051 Change-Id: I62b4a7cc5231baadb3a19f27db562abaa63f1fa5
This commit is contained in:
commit
88963fb8f6
9 changed files with 27 additions and 28 deletions
|
@ -1038,20 +1038,21 @@ bool ZipModeImage::AddSplitImageFromChunkList(const ZipModeImage& tgt_image,
|
|||
split_tgt_image.Initialize(aligned_tgt_chunks, {});
|
||||
split_tgt_image.MergeAdjacentNormalChunks();
|
||||
|
||||
// Construct the dummy source file based on the src_ranges.
|
||||
std::vector<uint8_t> src_content;
|
||||
// Construct the split source file based on the split src ranges.
|
||||
std::vector<uint8_t> split_src_content;
|
||||
for (const auto& r : split_src_ranges) {
|
||||
size_t end = std::min(src_image.file_content_.size(), r.second * BLOCK_SIZE);
|
||||
src_content.insert(src_content.end(), src_image.file_content_.begin() + r.first * BLOCK_SIZE,
|
||||
split_src_content.insert(split_src_content.end(),
|
||||
src_image.file_content_.begin() + r.first * BLOCK_SIZE,
|
||||
src_image.file_content_.begin() + end);
|
||||
}
|
||||
|
||||
// We should not have an empty src in our design; otherwise we will encounter an error in
|
||||
// bsdiff since src_content.data() == nullptr.
|
||||
CHECK(!src_content.empty());
|
||||
// bsdiff since split_src_content.data() == nullptr.
|
||||
CHECK(!split_src_content.empty());
|
||||
|
||||
ZipModeImage split_src_image(true);
|
||||
split_src_image.Initialize(split_src_chunks, src_content);
|
||||
split_src_image.Initialize(split_src_chunks, split_src_content);
|
||||
|
||||
split_tgt_images->push_back(std::move(split_tgt_image));
|
||||
split_src_images->push_back(std::move(split_src_image));
|
||||
|
|
|
@ -211,7 +211,7 @@ class ZipModeImage : public Image {
|
|||
|
||||
bool Initialize(const std::string& filename) override;
|
||||
|
||||
// Initialize a dummy ZipModeImage from an existing ImageChunk vector. For src img pieces, we
|
||||
// Initialize a fake ZipModeImage from an existing ImageChunk vector. For src img pieces, we
|
||||
// reconstruct a new file_content based on the source ranges; but it's not needed for the tgt img
|
||||
// pieces; because for each chunk both the data and their offset within the file are unchanged.
|
||||
void Initialize(const std::vector<ImageChunk>& chunks, const std::vector<uint8_t>& file_content) {
|
||||
|
@ -265,7 +265,7 @@ class ZipModeImage : public Image {
|
|||
const std::vector<ZipModeImage>& split_src_images,
|
||||
std::vector<SortedRangeSet>& split_src_ranges,
|
||||
size_t total_tgt_size);
|
||||
// Construct the dummy split images based on the chunks info and source ranges; and move them into
|
||||
// Construct the fake split images based on the chunks info and source ranges; and move them into
|
||||
// the given vectors. Return true if we add a new split image into |split_tgt_images|, and
|
||||
// false otherwise.
|
||||
static bool AddSplitImageFromChunkList(const ZipModeImage& tgt_image,
|
||||
|
|
|
@ -22,7 +22,7 @@ enum ErrorCode : int {
|
|||
kLowBattery = 20,
|
||||
kZipVerificationFailure,
|
||||
kZipOpenFailure,
|
||||
kBootreasonInBlacklist,
|
||||
kBootreasonInBlocklist,
|
||||
kPackageCompatibilityFailure,
|
||||
kScriptExecutionFailure,
|
||||
kMapFileFailure,
|
||||
|
|
12
recovery.cpp
12
recovery.cpp
|
@ -559,15 +559,15 @@ static void set_retry_bootloader_message(int retry_count, const std::vector<std:
|
|||
}
|
||||
}
|
||||
|
||||
static bool bootreason_in_blacklist() {
|
||||
static bool bootreason_in_blocklist() {
|
||||
std::string bootreason = android::base::GetProperty("ro.boot.bootreason", "");
|
||||
if (!bootreason.empty()) {
|
||||
// More bootreasons can be found in "system/core/bootstat/bootstat.cpp".
|
||||
static const std::vector<std::string> kBootreasonBlacklist{
|
||||
static const std::vector<std::string> kBootreasonBlocklist{
|
||||
"kernel_panic",
|
||||
"Panic",
|
||||
};
|
||||
for (const auto& str : kBootreasonBlacklist) {
|
||||
for (const auto& str : kBootreasonBlocklist) {
|
||||
if (android::base::EqualsIgnoreCase(str, bootreason)) return true;
|
||||
}
|
||||
}
|
||||
|
@ -734,10 +734,10 @@ Device::BuiltinAction start_recovery(Device* device, const std::vector<std::stri
|
|||
// Log the error code to last_install when installation skips due to low battery.
|
||||
log_failure_code(kLowBattery, update_package);
|
||||
status = INSTALL_SKIPPED;
|
||||
} else if (retry_count == 0 && bootreason_in_blacklist()) {
|
||||
} else if (retry_count == 0 && bootreason_in_blocklist()) {
|
||||
// Skip update-on-reboot when bootreason is kernel_panic or similar
|
||||
ui->Print("bootreason is in the blacklist; skip OTA installation\n");
|
||||
log_failure_code(kBootreasonInBlacklist, update_package);
|
||||
ui->Print("bootreason is in the blocklist; skip OTA installation\n");
|
||||
log_failure_code(kBootreasonInBlocklist, update_package);
|
||||
status = INSTALL_SKIPPED;
|
||||
} else {
|
||||
// It's a fresh update. Initialize the retry_count in the BCB to 1; therefore we can later
|
||||
|
|
|
@ -35,7 +35,6 @@
|
|||
|
||||
using android::base::get_unaligned;
|
||||
|
||||
// Sanity check for the given imgdiff patch header.
|
||||
static void verify_patch_header(const std::string& patch, size_t* num_normal, size_t* num_raw,
|
||||
size_t* num_deflate) {
|
||||
const size_t size = patch.size();
|
||||
|
|
|
@ -76,7 +76,7 @@ TEST(InstallTest, read_metadata_from_package_smoke) {
|
|||
|
||||
TEST(InstallTest, read_metadata_from_package_no_entry) {
|
||||
TemporaryFile temp_file;
|
||||
BuildZipArchive({ { "dummy_entry", "" } }, temp_file.release(), kCompressStored);
|
||||
BuildZipArchive({ { "fake_entry", "" } }, temp_file.release(), kCompressStored);
|
||||
|
||||
ZipArchiveHandle zip;
|
||||
ASSERT_EQ(0, OpenArchive(temp_file.path, &zip));
|
||||
|
@ -153,7 +153,7 @@ TEST(InstallTest, SetUpNonAbUpdateCommands) {
|
|||
TEST(InstallTest, SetUpNonAbUpdateCommands_MissingUpdateBinary) {
|
||||
TemporaryFile temp_file;
|
||||
// The archive must have something to be opened correctly.
|
||||
BuildZipArchive({ { "dummy_entry", "" } }, temp_file.release(), kCompressStored);
|
||||
BuildZipArchive({ { "fake_entry", "" } }, temp_file.release(), kCompressStored);
|
||||
|
||||
// Missing update binary.
|
||||
ZipArchiveHandle zip;
|
||||
|
@ -334,7 +334,7 @@ TEST(InstallTest, CheckPackageMetadata_device_type) {
|
|||
metadata = android::base::Join(
|
||||
std::vector<std::string>{
|
||||
"ota-type=BRICK",
|
||||
"pre-device=dummy_device_type",
|
||||
"pre-device=fake_device_type",
|
||||
},
|
||||
"\n");
|
||||
TestCheckPackageMetadata(metadata, OtaType::BRICK, false);
|
||||
|
@ -358,7 +358,7 @@ TEST(InstallTest, CheckPackageMetadata_serial_number_smoke) {
|
|||
std::vector<std::string>{
|
||||
"ota-type=BRICK",
|
||||
"pre-device=" + device,
|
||||
"serialno=dummy_serial",
|
||||
"serialno=fake_serial",
|
||||
},
|
||||
"\n");
|
||||
TestCheckPackageMetadata(metadata, OtaType::BRICK, false);
|
||||
|
@ -383,7 +383,7 @@ TEST(InstallTest, CheckPackageMetadata_multiple_serial_number) {
|
|||
ASSERT_NE("", serialno);
|
||||
|
||||
std::vector<std::string> serial_numbers;
|
||||
// Creates a dummy serial number string.
|
||||
// Creates a fake serial number string.
|
||||
for (char c = 'a'; c <= 'z'; c++) {
|
||||
serial_numbers.emplace_back(serialno.size(), c);
|
||||
}
|
||||
|
@ -431,7 +431,7 @@ TEST(InstallTest, CheckPackageMetadata_ab_build_version) {
|
|||
std::vector<std::string>{
|
||||
"ota-type=AB",
|
||||
"pre-device=" + device,
|
||||
"pre-build-incremental=dummy_build",
|
||||
"pre-build-incremental=fake_build",
|
||||
"post-timestamp=" + std::to_string(std::numeric_limits<int64_t>::max()),
|
||||
},
|
||||
"\n");
|
||||
|
@ -459,7 +459,7 @@ TEST(InstallTest, CheckPackageMetadata_ab_fingerprint) {
|
|||
std::vector<std::string>{
|
||||
"ota-type=AB",
|
||||
"pre-device=" + device,
|
||||
"pre-build=dummy_build_fingerprint",
|
||||
"pre-build=fake_build_fingerprint",
|
||||
"post-timestamp=" + std::to_string(std::numeric_limits<int64_t>::max()),
|
||||
},
|
||||
"\n");
|
||||
|
@ -487,7 +487,7 @@ TEST(InstallTest, CheckPackageMetadata_dynamic_fingerprint) {
|
|||
std::vector<std::string>{
|
||||
"ota-type=AB",
|
||||
"pre-device=" + device,
|
||||
"pre-build=dummy_build_fingerprint",
|
||||
"pre-build=fake_build_fingerprint",
|
||||
"post-timestamp=" + std::to_string(std::numeric_limits<int64_t>::max()),
|
||||
},
|
||||
"\n");
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#include "otautil/sysutil.h"
|
||||
|
||||
TEST(ZipTest, OpenFromMemory) {
|
||||
std::string zip_path = from_testdata_base("ziptest_dummy-update.zip");
|
||||
std::string zip_path = from_testdata_base("ziptest_fake-update.zip");
|
||||
MemMapping map;
|
||||
ASSERT_TRUE(map.MapFile(zip_path));
|
||||
|
||||
|
|
|
@ -128,7 +128,6 @@ bool Command::ParseTargetInfoAndSourceInfo(const std::vector<std::string>& token
|
|||
// No stashes, only source ranges.
|
||||
SourceInfo result(src_hash, src_ranges, {}, {});
|
||||
|
||||
// Sanity check the block count.
|
||||
if (result.blocks() != src_blocks) {
|
||||
*err =
|
||||
android::base::StringPrintf("mismatching block count: %zu (%s) vs %zu", result.blocks(),
|
||||
|
@ -262,7 +261,7 @@ Command Command::Parse(const std::string& line, size_t index, std::string* err)
|
|||
return {};
|
||||
}
|
||||
} else if (op == Type::ABORT) {
|
||||
// No-op, other than sanity checking the input args.
|
||||
// Abort takes no arguments, so there's nothing else to check.
|
||||
if (pos != tokens.size()) {
|
||||
*err = android::base::StringPrintf("invalid number of args: %zu (expected 0)",
|
||||
tokens.size() - pos);
|
||||
|
|
Loading…
Reference in a new issue