Added support for Wipe Task
Test: tested wipe on Raven
Bug: 194686221
Change-Id: I582800a279cbe8a3e733a1e75447e5b5142d4120
diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp
index 699d406..15d1874 100644
--- a/fastboot/fastboot.cpp
+++ b/fastboot/fastboot.cpp
@@ -1830,9 +1830,9 @@
return size;
}
-static void fb_perform_format(const std::string& partition, int skip_if_not_supported,
- const std::string& type_override, const std::string& size_override,
- const unsigned fs_options) {
+void fb_perform_format(const std::string& partition, int skip_if_not_supported,
+ const std::string& type_override, const std::string& size_override,
+ const unsigned fs_options) {
std::string partition_type, partition_size;
struct fastboot_buffer buf;
@@ -2026,7 +2026,6 @@
android::base::InitLogging(argv, FastbootLogger, FastbootAborter);
std::unique_ptr<FlashingPlan> fp = std::make_unique<FlashingPlan>();
- unsigned fs_options = 0;
int longindex;
std::string slot_override;
std::string next_active;
@@ -2080,7 +2079,7 @@
} else if (name == "force") {
fp->force_flash = true;
} else if (name == "fs-options") {
- fs_options = ParseFsOption(optarg);
+ fp->fs_options = ParseFsOption(optarg);
} else if (name == "header-version") {
g_boot_img_hdr.header_version = strtoul(optarg, nullptr, 0);
} else if (name == "dtb") {
@@ -2250,7 +2249,7 @@
std::string partition = next_arg(&args);
auto format = [&](const std::string& partition) {
- fb_perform_format(partition, 0, type_override, size_override, fs_options);
+ fb_perform_format(partition, 0, type_override, size_override, fp->fs_options);
};
do_for_partitions(partition, slot_override, format, true);
} else if (command == "signature") {
@@ -2407,19 +2406,15 @@
syntax_error("unknown command %s", command.c_str());
}
}
+
if (fp->wants_wipe) {
if (fp->force_flash) {
CancelSnapshotIfNeeded();
}
std::vector<std::string> partitions = {"userdata", "cache", "metadata"};
for (const auto& partition : partitions) {
- std::string partition_type;
- if (fb->GetVar("partition-type:" + partition, &partition_type) != fastboot::SUCCESS) {
- continue;
- }
- if (partition_type.empty()) continue;
- fb->Erase(partition);
- fb_perform_format(partition, 1, partition_type, "", fs_options);
+ std::unique_ptr<WipeTask> wipe_task = std::make_unique<WipeTask>(fp.get(), partition);
+ wipe_task->Run();
}
}
if (fp->wants_set_active) {
diff --git a/fastboot/fastboot.h b/fastboot/fastboot.h
index 2264ca3..ed33481 100644
--- a/fastboot/fastboot.h
+++ b/fastboot/fastboot.h
@@ -69,6 +69,7 @@
using ImageEntry = std::pair<const Image*, std::string>;
struct FlashingPlan {
+ unsigned fs_options = 0;
// If the image uses the default slot, or the user specified "all", then
// the paired string will be empty. If the image requests a specific slot
// (for example, system_other) it is specified instead.
@@ -109,3 +110,6 @@
bool is_retrofit_device();
bool is_logical(const std::string& partition);
+void fb_perform_format(const std::string& partition, int skip_if_not_supported,
+ const std::string& type_override, const std::string& size_override,
+ const unsigned fs_options);
diff --git a/fastboot/task.cpp b/fastboot/task.cpp
index 6233c90..c70139b 100644
--- a/fastboot/task.cpp
+++ b/fastboot/task.cpp
@@ -143,8 +143,7 @@
return std::make_unique<FlashSuperLayoutTask>(super_name, std::move(helper), std::move(s));
}
-UpdateSuperTask::UpdateSuperTask(FlashingPlan* fp)
- : fp_(fp) {}
+UpdateSuperTask::UpdateSuperTask(FlashingPlan* fp) : fp_(fp) {}
void UpdateSuperTask::Run() {
unique_fd fd = fp_->source->OpenFile("super_empty.img");
@@ -185,4 +184,16 @@
void DeleteTask::Run() {
fp_->fb->DeletePartition(pname_);
-}
\ No newline at end of file
+}
+
+WipeTask::WipeTask(FlashingPlan* fp, const std::string& pname) : fp_(fp), pname_(pname){};
+
+void WipeTask::Run() {
+ std::string partition_type;
+ if (fp_->fb->GetVar("partition-type:" + pname_, &partition_type) != fastboot::SUCCESS) {
+ return;
+ }
+ if (partition_type.empty()) return;
+ fp_->fb->Erase(pname_);
+ fb_perform_format(pname_, 1, partition_type, "", fp_->fs_options);
+}
diff --git a/fastboot/task.h b/fastboot/task.h
index 0af771e..149c34c 100644
--- a/fastboot/task.h
+++ b/fastboot/task.h
@@ -100,3 +100,13 @@
const FlashingPlan* fp_;
const std::string pname_;
};
+
+class WipeTask : public Task {
+ public:
+ WipeTask(FlashingPlan* fp, const std::string& pname);
+ void Run() override;
+
+ private:
+ const FlashingPlan* fp_;
+ const std::string pname_;
+};