From aa70f4c74859f1dc47b8ebd800e4a0485421e83b Mon Sep 17 00:00:00 2001 From: Daniel Zheng Date: Tue, 7 Mar 2023 18:59:51 +0000 Subject: [PATCH 1/2] Added support for Delete Task Test: tested delete-logical-partition {partition} and flashall on Raven Change-Id: I04f07c8132159deda42434b9178e8c98d5ab768b Bug: 194686221 --- fastboot/fastboot.cpp | 14 ++++++++++++++ fastboot/task.cpp | 6 ++++++ fastboot/task.h | 10 ++++++++++ 3 files changed, 30 insertions(+) diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp index ad9b4246d..699d40642 100644 --- a/fastboot/fastboot.cpp +++ b/fastboot/fastboot.cpp @@ -1633,6 +1633,19 @@ void FlashAllTool::Flash() { // extents, and will achieve more optimal allocation. std::vector> resize_tasks; for (const auto& [image, slot] : os_images_) { + // Retrofit devices have two super partitions, named super_a and super_b. + // On these devices, secondary slots must be flashed as physical + // partitions (otherwise they would not mount on first boot). To enforce + // this, we delete any logical partitions for the "other" slot. + if (is_retrofit_device()) { + std::string partition_name = image->part_name + "_"s + slot; + if (image->IsSecondary() && is_logical(partition_name)) { + fp_->fb->DeletePartition(partition_name); + std::unique_ptr delete_task = + std::make_unique(fp_, partition_name); + delete_task->Run(); + } + } resize_tasks.emplace_back( std::make_unique(fp_, image->part_name, "0", slot)); } @@ -2352,6 +2365,7 @@ int FastBootTool::Main(int argc, char* argv[]) { fb->CreatePartition(partition, size); } else if (command == FB_CMD_DELETE_PARTITION) { std::string partition = next_arg(&args); + auto delete_task = std::make_unique(fp.get(), partition); fb->DeletePartition(partition); } else if (command == FB_CMD_RESIZE_PARTITION) { std::string partition = next_arg(&args); diff --git a/fastboot/task.cpp b/fastboot/task.cpp index 799b5c536..e55cda570 100644 --- a/fastboot/task.cpp +++ b/fastboot/task.cpp @@ -180,3 +180,9 @@ void ResizeTask::Run() { }; do_for_partitions(pname_, slot_, resize_partition, false); } + +DeleteTask::DeleteTask(FlashingPlan* fp, const std::string& pname) : fp_(fp), pname_(pname){}; + +void DeleteTask::Run() { + fp_->fb->DeletePartition(pname_); +} \ No newline at end of file diff --git a/fastboot/task.h b/fastboot/task.h index 7aa19a3ad..b90fcd1e8 100644 --- a/fastboot/task.h +++ b/fastboot/task.h @@ -92,3 +92,13 @@ class ResizeTask : public Task { const std::string size_; const std::string slot_; }; + +class DeleteTask : public Task { + public: + DeleteTask(FlashingPlan* _fp, const std::string& _pname); + void Run() override; + + private: + FlashingPlan* fp_; + const std::string pname_; +}; From 43987c948bf0b698fa24abc7377227efaa47cf4e Mon Sep 17 00:00:00 2001 From: Daniel Zheng Date: Tue, 7 Mar 2023 18:20:53 +0000 Subject: [PATCH 2/2] Fixed parameter styling and minor error in tasks Test: tested compilation Change-Id: Ieb949243da1284dec3bad2caa895a59465858adc --- fastboot/task.cpp | 10 +++++----- fastboot/task.h | 18 ++++++++---------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/fastboot/task.cpp b/fastboot/task.cpp index e55cda570..6233c900f 100644 --- a/fastboot/task.cpp +++ b/fastboot/task.cpp @@ -21,8 +21,8 @@ using namespace std::string_literals; -FlashTask::FlashTask(const std::string& _slot, const std::string& _pname) - : pname_(_pname), fname_(find_item(_pname)), slot_(_slot) { +FlashTask::FlashTask(const std::string& slot, const std::string& pname) + : pname_(pname), fname_(find_item(pname)), slot_(slot) { if (fname_.empty()) die("cannot determine image filename for '%s'", pname_.c_str()); } FlashTask::FlashTask(const std::string& _slot, const std::string& _pname, const std::string& _fname) @@ -44,9 +44,9 @@ void FlashTask::Run() { do_for_partitions(pname_, slot_, flash, true); } -RebootTask::RebootTask(FlashingPlan* _fp) : fp_(_fp){}; -RebootTask::RebootTask(FlashingPlan* _fp, const std::string& _reboot_target) - : reboot_target_(_reboot_target), fp_(_fp){}; +RebootTask::RebootTask(FlashingPlan* fp) : fp_(fp){}; +RebootTask::RebootTask(FlashingPlan* fp, const std::string& reboot_target) + : reboot_target_(reboot_target), fp_(fp){}; void RebootTask::Run() { if ((reboot_target_ == "userspace" || reboot_target_ == "fastboot")) { diff --git a/fastboot/task.h b/fastboot/task.h index b90fcd1e8..0af771e97 100644 --- a/fastboot/task.h +++ b/fastboot/task.h @@ -32,11 +32,10 @@ class Task { class FlashTask : public Task { public: - FlashTask(const std::string& _slot, const std::string& _pname); - FlashTask(const std::string& _slot, const std::string& _pname, const std::string& _fname); + FlashTask(const std::string& slot, const std::string& pname); + FlashTask(const std::string& slot, const std::string& pname, const std::string& fname); void Run() override; - ~FlashTask() {} private: const std::string pname_; @@ -46,14 +45,13 @@ class FlashTask : public Task { class RebootTask : public Task { public: - RebootTask(FlashingPlan* _fp); - RebootTask(FlashingPlan* _fp, const std::string& _reboot_target); + RebootTask(FlashingPlan* fp); + RebootTask(FlashingPlan* fp, const std::string& reboot_target); void Run() override; - ~RebootTask() {} private: const std::string reboot_target_ = ""; - FlashingPlan* fp_; + const FlashingPlan* fp_; }; class FlashSuperLayoutTask : public Task { @@ -77,7 +75,7 @@ class UpdateSuperTask : public Task { void Run() override; private: - FlashingPlan* fp_; + const FlashingPlan* fp_; }; class ResizeTask : public Task { @@ -87,7 +85,7 @@ class ResizeTask : public Task { void Run() override; private: - FlashingPlan* fp_; + const FlashingPlan* fp_; const std::string pname_; const std::string size_; const std::string slot_; @@ -99,6 +97,6 @@ class DeleteTask : public Task { void Run() override; private: - FlashingPlan* fp_; + const FlashingPlan* fp_; const std::string pname_; };