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

Unified Diff: native_client_sdk/src/build_tools/update_nacl_manifest.py

Issue 11200002: update_nacl_manifest improvements (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nits Created 8 years, 2 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 | « native_client_sdk/src/build_tools/tests/test_update_nacl_manifest.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: native_client_sdk/src/build_tools/update_nacl_manifest.py
diff --git a/native_client_sdk/src/build_tools/update_nacl_manifest.py b/native_client_sdk/src/build_tools/update_nacl_manifest.py
index 9f2a09a526ea9263fff48da6e278a4d58a990728..b624e23be46537b073d39693e1f6c48fd1658ab8 100755
--- a/native_client_sdk/src/build_tools/update_nacl_manifest.py
+++ b/native_client_sdk/src/build_tools/update_nacl_manifest.py
@@ -167,9 +167,10 @@ class Delegate(object):
class RealDelegate(Delegate):
- def __init__(self, dryrun=False, gsutil=None):
+ def __init__(self, dryrun=False, gsutil=None, verbose=False):
super(RealDelegate, self).__init__()
self.dryrun = dryrun
+ self.verbose = verbose
if gsutil:
self.gsutil = gsutil
else:
@@ -181,7 +182,7 @@ class RealDelegate(Delegate):
sdk_json_string = sdk_stream.read()
manifest = manifest_util.SDKManifest()
- manifest.LoadDataFromString(sdk_json_string)
+ manifest.LoadDataFromString(sdk_json_string, add_missing_info=True)
return manifest
def GetHistory(self):
@@ -212,6 +213,7 @@ class RealDelegate(Delegate):
def GsUtil_cp(self, src, dest, stdin=None):
"""See Delegate.GsUtil_cp"""
if self.dryrun:
+ self.Trace("Skipping upload: %s -> %s" % (src, dest))
return
# -p ensures we keep permissions when copying "in-the-cloud".
@@ -220,6 +222,10 @@ class RealDelegate(Delegate):
def Print(self, *args):
sys.stdout.write(' '.join(map(str, args)) + '\n')
+ def Trace(self, *args):
+ if self.verbose:
+ self.Print(*args)
+
def _RunGsUtil(self, stdin, *args):
"""Run gsutil as a subprocess.
@@ -230,16 +236,20 @@ class RealDelegate(Delegate):
Returns:
The stdout from the process."""
cmd = [self.gsutil] + list(args)
+ self.Trace("Running: %s" % str(cmd))
if stdin:
stdin_pipe = subprocess.PIPE
else:
stdin_pipe = None
- process = subprocess.Popen(cmd, stdin=stdin_pipe, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- stdout, stderr = process.communicate(stdin)
+ try:
+ process = subprocess.Popen(cmd, stdin=stdin_pipe, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ stdout, stderr = process.communicate(stdin)
+ except OSError as e:
+ raise manifest_util.Error("Unable to run '%s': %s" % (cmd[0], str(e)))
- if process.returncode != 0:
+ if process.returncode:
sys.stderr.write(stderr)
raise subprocess.CalledProcessError(process.returncode, ' '.join(cmd))
return stdout
@@ -518,6 +528,19 @@ class Updater(object):
Args:
manifest: The new manifest to upload.
"""
+ if self.delegate.dryrun:
+ name = MANIFEST_BASENAME + ".new"
+ self.delegate.Print("Writing new manifest: %s" % name)
+ with open(name, 'w') as f:
+ f.write(manifest.GetDataAsString())
+ stdout = self.delegate.GsUtil_cat(GS_SDK_MANIFEST)
+
+ online = MANIFEST_BASENAME + ".online"
+ self.delegate.Print("Writing online manifest: %s" % online)
+ with open(online, 'w') as f:
+ f.write(stdout)
+ os.system('diff -u %s %s' % (online, name))
+
timestamp_manifest_path = GS_MANIFEST_BACKUP_DIR + \
GetTimestampManifestName()
self.delegate.GsUtil_cp('-', timestamp_manifest_path,
@@ -597,14 +620,15 @@ class CapturedFile(object):
def main(args):
parser = optparse.OptionParser()
- parser.add_option('--gsutil', help='path to gsutil', dest='gsutil',
- default=None)
- parser.add_option('--mailfrom', help='email address of sender',
- dest='mailfrom', default=None)
- parser.add_option('--mailto', help='send error mails to...', dest='mailto',
- default=[], action='append')
- parser.add_option('--dryrun', help='don\'t upload the manifest.',
- dest='dryrun', action='store_true', default=False)
+ parser.add_option('--gsutil', help='path to gsutil.')
+ parser.add_option('-d', '--debug', help='run in debug mode.',
+ action='store_true')
+ parser.add_option('--mailfrom', help='email address of sender.')
+ parser.add_option('--mailto', help='send error mails to...', action='append')
+ parser.add_option('-n', '--dryrun', help="don't upload the manifest.",
+ action='store_true')
+ parser.add_option('-v', '--verbose', help='print more diagnotic messages.',
+ action='store_true')
options, args = parser.parse_args(args[1:])
if (options.mailfrom is None) != (not options.mailto):
@@ -618,18 +642,25 @@ def main(args):
sys.stderr = CapturedFile(sys.stderr)
try:
- delegate = RealDelegate(dryrun=options.dryrun, gsutil=options.gsutil)
- Run(delegate, ('mac', 'win', 'linux'))
- except Exception:
- if options.mailfrom and options.mailto:
- traceback.print_exc()
- scriptname = os.path.basename(sys.argv[0])
- subject = '[%s] Failed to update manifest' % (scriptname,)
- text = '%s failed.\n\nSTDERR:\n%s\n' % (scriptname, sys.stderr.getvalue())
- SendMail(options.mailfrom, options.mailto, subject, text)
- sys.exit(1)
- else:
+ try:
+ delegate = RealDelegate(options.dryrun, options.gsutil, options.verbose)
+ Run(delegate, ('mac', 'win', 'linux'))
+ except Exception:
+ if options.mailfrom and options.mailto:
+ traceback.print_exc()
+ scriptname = os.path.basename(sys.argv[0])
+ subject = '[%s] Failed to update manifest' % (scriptname,)
+ text = '%s failed.\n\nSTDERR:\n%s\n' % (scriptname,
+ sys.stderr.getvalue())
+ SendMail(options.mailfrom, options.mailto, subject, text)
+ sys.exit(1)
+ else:
+ raise
+ except manifest_util.Error as e:
+ if options.debug:
raise
+ print e
+ sys.exit(1)
if __name__ == '__main__':
« no previous file with comments | « native_client_sdk/src/build_tools/tests/test_update_nacl_manifest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698