From d8d96ecdaebbccc003a5de6a7b90661d4de016ab Mon Sep 17 00:00:00 2001 From: Alex Deymo Date: Fri, 10 Jun 2016 16:38:31 -0700 Subject: [PATCH] Redirect subprocess stderr to stdout in verbose mode. This patch uses subprocess.communicate instead of subprocess.wait to prevent deadlock if any of the child processes outputs too much data, and redirects the subprocess output to stdout when running in verbose mode. With this patch `ota_from_target_files -v` prints the delta_generator output in stdout, and no output if '-v' is not passed. Bug: None TEST=ota_from_target_files -v ... Change-Id: Id66e4f3360a6f91d61a3ce96d53afbccdaa19da5 --- tools/releasetools/ota_from_target_files.py | 31 +++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py index 582412a1c..546c2511b 100755 --- a/tools/releasetools/ota_from_target_files.py +++ b/tools/releasetools/ota_from_target_files.py @@ -1153,6 +1153,9 @@ def WriteABOTAPackageWithBrilloScript(target_file, output_file, source_file=None): """Generate an Android OTA package that has A/B update payload.""" + # The place where the output from the subprocess should go. + log_file = sys.stdout if OPTIONS.verbose else subprocess.PIPE + # Setup signing keys. if OPTIONS.package_key is None: OPTIONS.package_key = OPTIONS.info_dict.get( @@ -1165,8 +1168,8 @@ def WriteABOTAPackageWithBrilloScript(target_file, output_file, "-inform", "DER", "-nocrypt"] rsa_key = common.MakeTempFile(prefix="key-", suffix=".key") cmd.extend(["-out", rsa_key]) - p1 = common.Run(cmd, stdout=subprocess.PIPE) - p1.wait() + p1 = common.Run(cmd, stdout=log_file, stderr=subprocess.STDOUT) + p1.communicate() assert p1.returncode == 0, "openssl pkcs8 failed" # Stage the output zip package for signing. @@ -1204,8 +1207,8 @@ def WriteABOTAPackageWithBrilloScript(target_file, output_file, "--target_image", target_file] if source_file is not None: cmd.extend(["--source_image", source_file]) - p1 = common.Run(cmd, stdout=subprocess.PIPE) - p1.wait() + p1 = common.Run(cmd, stdout=log_file, stderr=subprocess.STDOUT) + p1.communicate() assert p1.returncode == 0, "brillo_update_payload generate failed" # 2. Generate hashes of the payload and metadata files. @@ -1216,8 +1219,8 @@ def WriteABOTAPackageWithBrilloScript(target_file, output_file, "--signature_size", "256", "--metadata_hash_file", metadata_sig_file, "--payload_hash_file", payload_sig_file] - p1 = common.Run(cmd, stdout=subprocess.PIPE) - p1.wait() + p1 = common.Run(cmd, stdout=log_file, stderr=subprocess.STDOUT) + p1.communicate() assert p1.returncode == 0, "brillo_update_payload hash failed" # 3. Sign the hashes and insert them back into the payload file. @@ -1231,8 +1234,8 @@ def WriteABOTAPackageWithBrilloScript(target_file, output_file, "-pkeyopt", "digest:sha256", "-in", payload_sig_file, "-out", signed_payload_sig_file] - p1 = common.Run(cmd, stdout=subprocess.PIPE) - p1.wait() + p1 = common.Run(cmd, stdout=log_file, stderr=subprocess.STDOUT) + p1.communicate() assert p1.returncode == 0, "openssl sign payload failed" # 3b. Sign the metadata hash. @@ -1241,8 +1244,8 @@ def WriteABOTAPackageWithBrilloScript(target_file, output_file, "-pkeyopt", "digest:sha256", "-in", metadata_sig_file, "-out", signed_metadata_sig_file] - p1 = common.Run(cmd, stdout=subprocess.PIPE) - p1.wait() + p1 = common.Run(cmd, stdout=log_file, stderr=subprocess.STDOUT) + p1.communicate() assert p1.returncode == 0, "openssl sign metadata failed" # 3c. Insert the signatures back into the payload file. @@ -1254,8 +1257,8 @@ def WriteABOTAPackageWithBrilloScript(target_file, output_file, "--signature_size", "256", "--metadata_signature_file", signed_metadata_sig_file, "--payload_signature_file", signed_payload_sig_file] - p1 = common.Run(cmd, stdout=subprocess.PIPE) - p1.wait() + p1 = common.Run(cmd, stdout=log_file, stderr=subprocess.STDOUT) + p1.communicate() assert p1.returncode == 0, "brillo_update_payload sign failed" # 4. Dump the signed payload properties. @@ -1264,8 +1267,8 @@ def WriteABOTAPackageWithBrilloScript(target_file, output_file, cmd = ["brillo_update_payload", "properties", "--payload", signed_payload_file, "--properties_file", properties_file] - p1 = common.Run(cmd, stdout=subprocess.PIPE) - p1.wait() + p1 = common.Run(cmd, stdout=log_file, stderr=subprocess.STDOUT) + p1.communicate() assert p1.returncode == 0, "brillo_update_payload properties failed" # Add the signed payload file and properties into the zip.