Loading fastboot/fastboot.cpp +18 −10 Original line number Original line Diff line number Diff line Loading @@ -1560,10 +1560,10 @@ static void CancelSnapshotIfNeeded() { } } } } std::string GetPartitionName(const ImageEntry& entry) { std::string GetPartitionName(const ImageEntry& entry, std::string& current_slot) { auto slot = entry.second; auto slot = entry.second; if (slot.empty()) { if (slot.empty()) { slot = get_current_slot(); slot = current_slot; } } if (slot.empty()) { if (slot.empty()) { return entry.first->part_name; return entry.first->part_name; Loading @@ -1582,7 +1582,7 @@ class FlashAllTool { private: private: void CheckRequirements(); void CheckRequirements(); void DetermineSecondarySlot(); void DetermineSlot(); void CollectImages(); void CollectImages(); void FlashImages(const std::vector<std::pair<const Image*, std::string>>& images); void FlashImages(const std::vector<std::pair<const Image*, std::string>>& images); void FlashImage(const Image& image, const std::string& slot, fastboot_buffer* buf); void FlashImage(const Image& image, const std::string& slot, fastboot_buffer* buf); Loading @@ -1600,13 +1600,15 @@ void FlashAllTool::Flash() { // Change the slot first, so we boot into the correct recovery image when // Change the slot first, so we boot into the correct recovery image when // using fastbootd. // using fastbootd. if (fp_->slot_override == "all") { if (fp_->slot == "all") { set_active("a"); set_active("a"); } else { } else { set_active(fp_->slot_override); set_active(fp_->slot); } } DetermineSecondarySlot(); DetermineSlot(); CollectImages(); CancelSnapshotIfNeeded(); CancelSnapshotIfNeeded(); // First flash boot partitions. We allow this to happen either in userspace // First flash boot partitions. We allow this to happen either in userspace Loading Loading @@ -1651,12 +1653,18 @@ void FlashAllTool::CheckRequirements() { ::CheckRequirements({contents.data(), contents.size()}, fp_->force_flash); ::CheckRequirements({contents.data(), contents.size()}, fp_->force_flash); } } void FlashAllTool::DetermineSecondarySlot() { void FlashAllTool::DetermineSlot() { if (fp_->slot.empty()) { fp_->current_slot = get_current_slot(); } else { fp_->current_slot = fp_->slot; } if (fp_->skip_secondary) { if (fp_->skip_secondary) { return; return; } } if (fp_->slot_override != "" && fp_->slot_override != "all") { if (fp_->slot != "" && fp_->slot != "all") { fp_->secondary_slot = get_other_slot(fp_->slot_override); fp_->secondary_slot = get_other_slot(fp_->slot); } else { } else { fp_->secondary_slot = get_other_slot(); fp_->secondary_slot = get_other_slot(); } } Loading @@ -1670,7 +1678,7 @@ void FlashAllTool::DetermineSecondarySlot() { void FlashAllTool::CollectImages() { void FlashAllTool::CollectImages() { for (size_t i = 0; i < images.size(); ++i) { for (size_t i = 0; i < images.size(); ++i) { std::string slot = fp_->slot_override; std::string slot = fp_->slot; if (images[i].IsSecondary()) { if (images[i].IsSecondary()) { if (fp_->skip_secondary) { if (fp_->skip_secondary) { continue; continue; Loading fastboot/fastboot.h +3 −2 Original line number Original line Diff line number Diff line Loading @@ -80,7 +80,8 @@ struct FlashingPlan { bool skip_secondary = false; bool skip_secondary = false; bool force_flash = false; bool force_flash = false; std::string slot_override; std::string slot; std::string current_slot; std::string secondary_slot; std::string secondary_slot; fastboot::FastBootDriver* fb; fastboot::FastBootDriver* fb; }; }; Loading @@ -102,7 +103,7 @@ struct NetworkSerial { Result<NetworkSerial, FastbootError> ParseNetworkSerial(const std::string& serial); Result<NetworkSerial, FastbootError> ParseNetworkSerial(const std::string& serial); bool supports_AB(); bool supports_AB(); std::string GetPartitionName(const ImageEntry& entry); std::string GetPartitionName(const ImageEntry& entry, std::string& current_slot_); void flash_partition_files(const std::string& partition, const std::vector<SparsePtr>& files); void flash_partition_files(const std::string& partition, const std::vector<SparsePtr>& files); int64_t get_sparse_limit(int64_t size); int64_t get_sparse_limit(int64_t size); std::vector<SparsePtr> resparse_file(sparse_file* s, int64_t max_size); std::vector<SparsePtr> resparse_file(sparse_file* s, int64_t max_size); Loading fastboot/task.cpp +3 −3 Original line number Original line Diff line number Diff line Loading @@ -95,7 +95,7 @@ std::unique_ptr<FlashSuperLayoutTask> FlashSuperLayoutTask::Initialize( LOG(VERBOSE) << "Cannot optimize flashing super on non-AB device"; LOG(VERBOSE) << "Cannot optimize flashing super on non-AB device"; return nullptr; return nullptr; } } if (fp->slot_override == "all") { if (fp->slot == "all") { LOG(VERBOSE) << "Cannot optimize flashing super for all slots"; LOG(VERBOSE) << "Cannot optimize flashing super for all slots"; return nullptr; return nullptr; } } Loading Loading @@ -132,7 +132,7 @@ std::unique_ptr<FlashSuperLayoutTask> FlashSuperLayoutTask::Initialize( } } for (const auto& entry : os_images) { for (const auto& entry : os_images) { auto partition = GetPartitionName(entry); auto partition = GetPartitionName(entry, fp->current_slot); auto image = entry.first; auto image = entry.first; if (!helper->AddPartition(partition, image->img_name, image->optional_if_no_image)) { if (!helper->AddPartition(partition, image->img_name, image->optional_if_no_image)) { Loading @@ -145,7 +145,7 @@ std::unique_ptr<FlashSuperLayoutTask> FlashSuperLayoutTask::Initialize( // Remove images that we already flashed, just in case we have non-dynamic OS images. // Remove images that we already flashed, just in case we have non-dynamic OS images. auto remove_if_callback = [&](const ImageEntry& entry) -> bool { auto remove_if_callback = [&](const ImageEntry& entry) -> bool { return helper->WillFlash(GetPartitionName(entry)); return helper->WillFlash(GetPartitionName(entry, fp->current_slot)); }; }; os_images.erase(std::remove_if(os_images.begin(), os_images.end(), remove_if_callback), os_images.erase(std::remove_if(os_images.begin(), os_images.end(), remove_if_callback), os_images.end()); os_images.end()); Loading Loading
fastboot/fastboot.cpp +18 −10 Original line number Original line Diff line number Diff line Loading @@ -1560,10 +1560,10 @@ static void CancelSnapshotIfNeeded() { } } } } std::string GetPartitionName(const ImageEntry& entry) { std::string GetPartitionName(const ImageEntry& entry, std::string& current_slot) { auto slot = entry.second; auto slot = entry.second; if (slot.empty()) { if (slot.empty()) { slot = get_current_slot(); slot = current_slot; } } if (slot.empty()) { if (slot.empty()) { return entry.first->part_name; return entry.first->part_name; Loading @@ -1582,7 +1582,7 @@ class FlashAllTool { private: private: void CheckRequirements(); void CheckRequirements(); void DetermineSecondarySlot(); void DetermineSlot(); void CollectImages(); void CollectImages(); void FlashImages(const std::vector<std::pair<const Image*, std::string>>& images); void FlashImages(const std::vector<std::pair<const Image*, std::string>>& images); void FlashImage(const Image& image, const std::string& slot, fastboot_buffer* buf); void FlashImage(const Image& image, const std::string& slot, fastboot_buffer* buf); Loading @@ -1600,13 +1600,15 @@ void FlashAllTool::Flash() { // Change the slot first, so we boot into the correct recovery image when // Change the slot first, so we boot into the correct recovery image when // using fastbootd. // using fastbootd. if (fp_->slot_override == "all") { if (fp_->slot == "all") { set_active("a"); set_active("a"); } else { } else { set_active(fp_->slot_override); set_active(fp_->slot); } } DetermineSecondarySlot(); DetermineSlot(); CollectImages(); CancelSnapshotIfNeeded(); CancelSnapshotIfNeeded(); // First flash boot partitions. We allow this to happen either in userspace // First flash boot partitions. We allow this to happen either in userspace Loading Loading @@ -1651,12 +1653,18 @@ void FlashAllTool::CheckRequirements() { ::CheckRequirements({contents.data(), contents.size()}, fp_->force_flash); ::CheckRequirements({contents.data(), contents.size()}, fp_->force_flash); } } void FlashAllTool::DetermineSecondarySlot() { void FlashAllTool::DetermineSlot() { if (fp_->slot.empty()) { fp_->current_slot = get_current_slot(); } else { fp_->current_slot = fp_->slot; } if (fp_->skip_secondary) { if (fp_->skip_secondary) { return; return; } } if (fp_->slot_override != "" && fp_->slot_override != "all") { if (fp_->slot != "" && fp_->slot != "all") { fp_->secondary_slot = get_other_slot(fp_->slot_override); fp_->secondary_slot = get_other_slot(fp_->slot); } else { } else { fp_->secondary_slot = get_other_slot(); fp_->secondary_slot = get_other_slot(); } } Loading @@ -1670,7 +1678,7 @@ void FlashAllTool::DetermineSecondarySlot() { void FlashAllTool::CollectImages() { void FlashAllTool::CollectImages() { for (size_t i = 0; i < images.size(); ++i) { for (size_t i = 0; i < images.size(); ++i) { std::string slot = fp_->slot_override; std::string slot = fp_->slot; if (images[i].IsSecondary()) { if (images[i].IsSecondary()) { if (fp_->skip_secondary) { if (fp_->skip_secondary) { continue; continue; Loading
fastboot/fastboot.h +3 −2 Original line number Original line Diff line number Diff line Loading @@ -80,7 +80,8 @@ struct FlashingPlan { bool skip_secondary = false; bool skip_secondary = false; bool force_flash = false; bool force_flash = false; std::string slot_override; std::string slot; std::string current_slot; std::string secondary_slot; std::string secondary_slot; fastboot::FastBootDriver* fb; fastboot::FastBootDriver* fb; }; }; Loading @@ -102,7 +103,7 @@ struct NetworkSerial { Result<NetworkSerial, FastbootError> ParseNetworkSerial(const std::string& serial); Result<NetworkSerial, FastbootError> ParseNetworkSerial(const std::string& serial); bool supports_AB(); bool supports_AB(); std::string GetPartitionName(const ImageEntry& entry); std::string GetPartitionName(const ImageEntry& entry, std::string& current_slot_); void flash_partition_files(const std::string& partition, const std::vector<SparsePtr>& files); void flash_partition_files(const std::string& partition, const std::vector<SparsePtr>& files); int64_t get_sparse_limit(int64_t size); int64_t get_sparse_limit(int64_t size); std::vector<SparsePtr> resparse_file(sparse_file* s, int64_t max_size); std::vector<SparsePtr> resparse_file(sparse_file* s, int64_t max_size); Loading
fastboot/task.cpp +3 −3 Original line number Original line Diff line number Diff line Loading @@ -95,7 +95,7 @@ std::unique_ptr<FlashSuperLayoutTask> FlashSuperLayoutTask::Initialize( LOG(VERBOSE) << "Cannot optimize flashing super on non-AB device"; LOG(VERBOSE) << "Cannot optimize flashing super on non-AB device"; return nullptr; return nullptr; } } if (fp->slot_override == "all") { if (fp->slot == "all") { LOG(VERBOSE) << "Cannot optimize flashing super for all slots"; LOG(VERBOSE) << "Cannot optimize flashing super for all slots"; return nullptr; return nullptr; } } Loading Loading @@ -132,7 +132,7 @@ std::unique_ptr<FlashSuperLayoutTask> FlashSuperLayoutTask::Initialize( } } for (const auto& entry : os_images) { for (const auto& entry : os_images) { auto partition = GetPartitionName(entry); auto partition = GetPartitionName(entry, fp->current_slot); auto image = entry.first; auto image = entry.first; if (!helper->AddPartition(partition, image->img_name, image->optional_if_no_image)) { if (!helper->AddPartition(partition, image->img_name, image->optional_if_no_image)) { Loading @@ -145,7 +145,7 @@ std::unique_ptr<FlashSuperLayoutTask> FlashSuperLayoutTask::Initialize( // Remove images that we already flashed, just in case we have non-dynamic OS images. // Remove images that we already flashed, just in case we have non-dynamic OS images. auto remove_if_callback = [&](const ImageEntry& entry) -> bool { auto remove_if_callback = [&](const ImageEntry& entry) -> bool { return helper->WillFlash(GetPartitionName(entry)); return helper->WillFlash(GetPartitionName(entry, fp->current_slot)); }; }; os_images.erase(std::remove_if(os_images.begin(), os_images.end(), remove_if_callback), os_images.erase(std::remove_if(os_images.begin(), os_images.end(), remove_if_callback), os_images.end()); os_images.end()); Loading