Merge changes Ieb949243,I04f07c81

* changes:
  Fixed parameter styling and minor error in tasks
  Added support for Delete Task
diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp
index ad9b424..699d406 100644
--- a/fastboot/fastboot.cpp
+++ b/fastboot/fastboot.cpp
@@ -1633,6 +1633,19 @@
         // extents, and will achieve more optimal allocation.
         std::vector<std::unique_ptr<ResizeTask>> 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<DeleteTask> delete_task =
+                            std::make_unique<DeleteTask>(fp_, partition_name);
+                    delete_task->Run();
+                }
+            }
             resize_tasks.emplace_back(
                     std::make_unique<ResizeTask>(fp_, image->part_name, "0", slot));
         }
@@ -2352,6 +2365,7 @@
             fb->CreatePartition(partition, size);
         } else if (command == FB_CMD_DELETE_PARTITION) {
             std::string partition = next_arg(&args);
+            auto delete_task = std::make_unique<DeleteTask>(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 799b5c5..6233c90 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 @@
     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")) {
@@ -180,3 +180,9 @@
     };
     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 7aa19a3..0af771e 100644
--- a/fastboot/task.h
+++ b/fastboot/task.h
@@ -32,11 +32,10 @@
 
 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 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 @@
     void Run() override;
 
   private:
-    FlashingPlan* fp_;
+    const FlashingPlan* fp_;
 };
 
 class ResizeTask : public Task {
@@ -87,8 +85,18 @@
     void Run() override;
 
   private:
-    FlashingPlan* fp_;
+    const FlashingPlan* fp_;
     const std::string pname_;
     const std::string size_;
     const std::string slot_;
 };
+
+class DeleteTask : public Task {
+  public:
+    DeleteTask(FlashingPlan* _fp, const std::string& _pname);
+    void Run() override;
+
+  private:
+    const FlashingPlan* fp_;
+    const std::string pname_;
+};