Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(558)

Unified Diff: lib/cros_build_lib.py

Issue 6672007: Add logs for update_engine and image_to_live to test artifacts. (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: Fix bug in RunCommand Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « bin/cros_run_vm_update ('k') | lib/cros_build_lib_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/cros_build_lib.py
diff --git a/lib/cros_build_lib.py b/lib/cros_build_lib.py
index 838d75162f593ed655a77860aea1a9ac0beaf600..3f1b8afe4a27a396ded139db5a3648d4a251c0b2 100644
--- a/lib/cros_build_lib.py
+++ b/lib/cros_build_lib.py
@@ -27,7 +27,8 @@ def GetCallerName():
def RunCommand(cmd, print_cmd=True, error_ok=False, error_message=None,
exit_code=False, redirect_stdout=False, redirect_stderr=False,
- cwd=None, input=None, enter_chroot=False, num_retries=0):
+ cwd=None, input=None, enter_chroot=False, num_retries=0,
+ log_to_file=None):
"""Runs a shell command.
Arguments:
@@ -44,6 +45,7 @@ def RunCommand(cmd, print_cmd=True, error_ok=False, error_message=None,
enter_chroot: this command should be run from within the chroot. If set,
cwd must point to the scripts directory.
num_retries: the number of retries to perform before dying
+ log_to_file: Redirects all stderr and stdout to file specified by this path.
Returns:
If exit_code is True, returns the return code of the shell command.
@@ -51,24 +53,36 @@ def RunCommand(cmd, print_cmd=True, error_ok=False, error_message=None,
Raises:
Exception: Raises RunCommandException on error with optional error_message,
+
but only if exit_code, and error_ok are both False.
"""
# Set default for variables.
stdout = None
stderr = None
stdin = None
+ file_handle = None
output = ''
# Modify defaults based on parameters.
- if redirect_stdout: stdout = subprocess.PIPE
- if redirect_stderr: stderr = subprocess.PIPE
+ if log_to_file:
+ file_handle = open(log_to_file, 'w+')
+ stdout = file_handle
+ stderr = file_handle
+ else:
+ if redirect_stdout: stdout = subprocess.PIPE
+ if redirect_stderr: stderr = subprocess.PIPE
+
if input: stdin = subprocess.PIPE
if enter_chroot: cmd = ['./enter_chroot.sh', '--'] + cmd
# Print out the command before running.
+ cmd_string = 'PROGRAM(%s) -> RunCommand: %r in dir %s' % (GetCallerName(),
+ cmd, cwd)
if print_cmd:
- Info('PROGRAM(%s) -> RunCommand: %r in dir %s' %
- (GetCallerName(), cmd, cwd))
+ if not log_to_file:
+ Info(cmd_string)
+ else:
+ Info('%s -- Logging to %s' % (cmd_string, log_to_file))
for retry_count in range(num_retries + 1):
@@ -85,6 +99,8 @@ def RunCommand(cmd, print_cmd=True, error_ok=False, error_message=None,
if proc.returncode == 0:
break
+ if file_handle: file_handle.close()
+
# If they asked for an exit_code, give it to them on success or failure
if exit_code:
return proc.returncode
@@ -256,6 +272,15 @@ def ReinterpretPathForChroot(path):
return new_path
+def PrependChrootPath(path):
+ """Assumes path is a chroot path and prepends chroot to create full path."""
+ chroot_path = os.path.join(FindRepoDir(), '..', 'chroot')
+ if path.startswith('/'):
+ return os.path.realpath(os.path.join(chroot_path, path[1:]))
+ else:
+ return os.path.realpath(os.path.join(chroot_path, path))
+
+
def GetIPAddress(device='eth0'):
"""Returns the IP Address for a given device using ifconfig.
« no previous file with comments | « bin/cros_run_vm_update ('k') | lib/cros_build_lib_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698