diff options
| author | 2020-10-26 20:13:17 +0000 | |
|---|---|---|
| committer | 2020-10-26 20:13:17 +0000 | |
| commit | c1b51c398b1bc30b79fd83eb3c7f904e7afdd36e (patch) | |
| tree | 30ee1dc2c385fa2c545efa8396c6a0e1e254cfa8 /services | |
| parent | 236d8d9b24f08fd9f7adc0a07d6f349fc7923d98 (diff) | |
| parent | 8dddad53d52010a0847f6c8669b6d065a4e4efdd (diff) | |
Merge changes I5dcaabaa,I998cf688 am: 8dddad53d5
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1433440
Change-Id: I3c22682e68f2d9a1eefbfdf6c673ede87c3aa89d
Diffstat (limited to 'services')
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerShellCommand.java | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 320fa12ba84f..b571a9c5ce13 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -456,9 +456,20 @@ class PackageManagerShellCommand extends ShellCommand { return 1; } - private int runRollbackApp() { + private int runRollbackApp() throws RemoteException { final PrintWriter pw = getOutPrintWriter(); + String opt; + long stagedReadyTimeoutMs = DEFAULT_STAGED_READY_TIMEOUT_MS; + while ((opt = getNextOption()) != null) { + switch (opt) { + case "--staged-ready-timeout": + stagedReadyTimeoutMs = Long.parseLong(getNextArgRequired()); + break; + default: + throw new IllegalArgumentException("Unknown option: " + opt); + } + } final String packageName = getNextArgRequired(); if (packageName == null) { pw.println("Error: package name not specified"); @@ -466,11 +477,10 @@ class PackageManagerShellCommand extends ShellCommand { } final LocalIntentReceiver receiver = new LocalIntentReceiver(); + RollbackInfo rollback = null; try { IRollbackManager rm = IRollbackManager.Stub.asInterface( ServiceManager.getService(Context.ROLLBACK_SERVICE)); - - RollbackInfo rollback = null; for (RollbackInfo r : (List<RollbackInfo>) rm.getAvailableRollbacks().getList()) { for (PackageRollbackInfo info : r.getPackages()) { if (packageName.equals(info.getPackageName())) { @@ -495,14 +505,21 @@ class PackageManagerShellCommand extends ShellCommand { final Intent result = receiver.getResult(); final int status = result.getIntExtra(RollbackManager.EXTRA_STATUS, RollbackManager.STATUS_FAILURE); - if (status == RollbackManager.STATUS_SUCCESS) { - pw.println("Success"); - return 0; - } else { + + if (status != RollbackManager.STATUS_SUCCESS) { pw.println("Failure [" + result.getStringExtra(RollbackManager.EXTRA_STATUS_MESSAGE) + "]"); return 1; } + + if (rollback.isStaged() && stagedReadyTimeoutMs > 0) { + final int committedSessionId = rollback.getCommittedSessionId(); + return doWaitForStagedSessionReady(committedSessionId, stagedReadyTimeoutMs, pw); + } + + pw.println("Success"); + return 0; + } private void setParamsSize(InstallParams params, List<String> inPaths) { @@ -1306,7 +1323,7 @@ class PackageManagerShellCommand extends ShellCommand { abandonSession = false; if (params.sessionParams.isStaged && params.stagedReadyTimeoutMs > 0) { - return doWaitForStagedSessionRead(sessionId, params.stagedReadyTimeoutMs, pw); + return doWaitForStagedSessionReady(sessionId, params.stagedReadyTimeoutMs, pw); } pw.println("Success"); @@ -1321,7 +1338,7 @@ class PackageManagerShellCommand extends ShellCommand { } } - private int doWaitForStagedSessionRead(int sessionId, long timeoutMs, PrintWriter pw) + private int doWaitForStagedSessionReady(int sessionId, long timeoutMs, PrintWriter pw) throws RemoteException { Preconditions.checkArgument(timeoutMs > 0); PackageInstaller.SessionInfo si = mInterface.getPackageInstaller() @@ -1390,7 +1407,7 @@ class PackageManagerShellCommand extends ShellCommand { final PackageInstaller.SessionInfo si = mInterface.getPackageInstaller() .getSessionInfo(sessionId); if (si != null && si.isStaged() && stagedReadyTimeoutMs > 0) { - return doWaitForStagedSessionRead(sessionId, stagedReadyTimeoutMs, pw); + return doWaitForStagedSessionReady(sessionId, stagedReadyTimeoutMs, pw); } pw.println("Success"); return 0; |