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

Commit 35769292 authored by Adam Metcalf's avatar Adam Metcalf
Browse files

Add RollbackDataPolicy to pm install --enable-rollback command.

Test: acloud and viewing /data/rollback/XXX/rollback.json
Bug: 313527259
Change-Id: Ib332da3fce724f8a58bb5af8a4247d1734d6632f
parent 2853caae
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -3694,7 +3694,19 @@ class PackageManagerShellCommand extends ShellCommand {
                        // remember to set it themselves.
                        params.installerPackageName = "com.android.shell";
                    }
                    sessionParams.installFlags |= PackageManager.INSTALL_ENABLE_ROLLBACK;
                    int rollbackStrategy = PackageManager.ROLLBACK_DATA_POLICY_RESTORE;
                    try {
                        rollbackStrategy = Integer.parseInt(peekNextArg());
                        if (rollbackStrategy < PackageManager.ROLLBACK_DATA_POLICY_RESTORE
                                || rollbackStrategy > PackageManager.ROLLBACK_DATA_POLICY_RETAIN) {
                            throw new IllegalArgumentException(
                                    rollbackStrategy + " is not a valid rollback data policy.");
                        }
                        getNextArg(); // pop the argument
                    } catch (NumberFormatException e) {
                        // not followed by a number assume ROLLBACK_DATA_POLICY_RESTORE.
                    }
                    sessionParams.setEnableRollback(true, rollbackStrategy);
                    break;
                case "--staged-ready-timeout":
                    params.stagedReadyTimeoutMs = Long.parseLong(getNextArgRequired());
@@ -3729,6 +3741,11 @@ class PackageManagerShellCommand extends ShellCommand {
        } else if (staged) {
            sessionParams.setStaged();
        }
        if ((sessionParams.installFlags & PackageManager.INSTALL_APEX) != 0
                && (sessionParams.installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) != 0
                && sessionParams.rollbackDataPolicy == PackageManager.ROLLBACK_DATA_POLICY_WIPE) {
            throw new IllegalArgumentException("Data policy 'wipe' is not supported for apex.");
        }
        return params;
    }

@@ -4807,7 +4824,7 @@ class PackageManagerShellCommand extends ShellCommand {
        pw.println("       [--install-reason 0/1/2/3/4] [--originating-uri URI]");
        pw.println("       [--referrer URI] [--abi ABI_NAME] [--force-sdk]");
        pw.println("       [--preload] [--instant] [--full] [--dont-kill]");
        pw.println("       [--enable-rollback]");
        pw.println("       [--enable-rollback [0/1/2]]");
        pw.println("       [--force-uuid internal|UUID] [--pkg PACKAGE] [-S BYTES]");
        pw.println("       [--apex] [--non-staged] [--force-non-staged]");
        pw.println("       [--staged-ready-timeout TIMEOUT] [--ignore-dexopt-profile]");
@@ -4831,6 +4848,8 @@ class PackageManagerShellCommand extends ShellCommand {
        pw.println("      --abi: override the default ABI of the platform");
        pw.println("      --instant: cause the app to be installed as an ephemeral install app");
        pw.println("      --full: cause the app to be installed as a non-ephemeral full app");
        pw.println("      --enable-rollback: enable rollbacks for the upgrade.");
        pw.println("          0=restore (default), 1=wipe, 2=retain");
        pw.println("      --install-location: force the install location:");
        pw.println("          0=auto, 1=internal only, 2=prefer external");
        pw.println("      --install-reason: indicates why the app is being installed:");
+14 −4
Original line number Diff line number Diff line
@@ -187,13 +187,22 @@ executed.

### Installing an App with Rollback Enabled

The `adb install` command accepts the `--enable-rollback` flag to install an app
The `adb install` command accepts the `--enable-rollback [0/1/2]` flag to install an app
with rollback enabled. For example:

```
$ adb install --enable-rollback FooV2.apk
```

The default rollback data policy is `ROLLBACK_DATA_POLICY_RESTORE` (0). To use
a different `RollbackDataPolicy`, like `ROLLBACK_DATA_POLICY_RETAIN` (1) or
`ROLLBACK_DATA_POLICY_WIPE` (2), provide the int value after
`--enable-rollback`. For example:

```
$ adb install --enable-rollback 1 FooV2.apk
```

### Triggering Rollback Manually

If rollback is available for an application, the pm command can be used to
@@ -217,7 +226,7 @@ $ adb shell dumpsys rollback
  -state: committed
  -timestamp: 2019-04-23T14:57:35.944Z
  -packages:
    com.android.tests.rollback.testapp.B 2 -> 1
    com.android.tests.rollback.testapp.B 2 -> 1 [0]
  -causePackages:
  -committedSessionId: 1845805640
649899517:
@@ -225,7 +234,7 @@ $ adb shell dumpsys rollback
  -timestamp: 2019-04-23T12:55:21.342Z
  -stagedSessionId: 343374391
  -packages:
    com.android.tests.rollback.testapex 2 -> 1
    com.android.tests.rollback.testapex 2 -> 1 [0]
  -causePackages:
  -committedSessionId: 2096717281
```
@@ -233,7 +242,8 @@ $ adb shell dumpsys rollback
The example above shows two recently committed rollbacks. The update of
com.android.tests.rollback.testapp.B from version 1 to version 2 was rolled
back, and the update of com.android.tests.rollback.testapex from version 1 to
version 2 was rolled back.
version 2 was rolled back. For each package the value inside '[' and ']'
indicates the `RollbackDataPolicy` for the rollback back.

The state is 'available' or 'committed'. The timestamp gives the time when the
rollback was first made available. If a stagedSessionId is present, then the
+2 −1
Original line number Diff line number Diff line
@@ -961,7 +961,8 @@ class Rollback {
        for (PackageRollbackInfo pkg : info.getPackages()) {
            ipw.println(pkg.getPackageName()
                    + " " + pkg.getVersionRolledBackFrom().getLongVersionCode()
                    + " -> " + pkg.getVersionRolledBackTo().getLongVersionCode());
                    + " -> " + pkg.getVersionRolledBackTo().getLongVersionCode()
                    + " [" + pkg.getRollbackDataPolicy() + "]");
        }
        ipw.decreaseIndent();
        if (isCommitted()) {