Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c48b65c6 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "libsnapshot: cancel ok if unverified and old slot"

parents fc920dcb 26a2e6eb
Loading
Loading
Loading
Loading
+20 −4
Original line number Diff line number Diff line
@@ -136,12 +136,28 @@ bool SnapshotManager::CancelUpdate() {

    UpdateState state = ReadUpdateState(file.get());
    if (state == UpdateState::None) return true;
    if (state != UpdateState::Initiated) {
        LOG(ERROR) << "Cannot cancel update after it has completed or started merging";
        return false;

    if (state == UpdateState::Initiated) {
        LOG(INFO) << "Update has been initiated, now canceling";
        return RemoveAllUpdateState(file.get());
    }

    if (state == UpdateState::Unverified) {
        // We completed an update, but it can still be canceled if we haven't booted into it.
        auto boot_file = GetSnapshotBootIndicatorPath();
        std::string contents;
        if (!android::base::ReadFileToString(boot_file, &contents)) {
            PLOG(WARNING) << "Cannot read " << boot_file << ", proceed to canceling the update:";
            return RemoveAllUpdateState(file.get());
        }
        if (device_->GetSlotSuffix() == contents) {
            LOG(INFO) << "Canceling a previously completed update";
            return RemoveAllUpdateState(file.get());
        }
    }
    LOG(ERROR) << "Cannot cancel update after it has completed or started merging";
    return false;
}

bool SnapshotManager::RemoveAllUpdateState(LockedFile* lock) {
    if (!RemoveAllSnapshots(lock)) {