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

Unified Diff: dart/tools/build.py

Issue 13470019: Parse output from xcodebuild to make it easier to spot problems with non-incremental builds. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/tools/build.py
diff --git a/dart/tools/build.py b/dart/tools/build.py
index d2bf1bc240330a21f5e0168983eda19f07c5f24a..df6d55fbf784f7d2b4b67fbc30b59f5811b96d24 100755
--- a/dart/tools/build.py
+++ b/dart/tools/build.py
@@ -224,6 +224,39 @@ def CurrentDirectoryBaseName():
return os.path.relpath(os.curdir, start=os.pardir)
+def ParseXcodebuild(args):
+ """
+ Run xcodebuild and returns the process object.
+ Output is parsed to filter out build actions that had no output.
+ """
kustermann 2013/04/02 21:13:15 A small comment explaining the 'output format' of
ahe 2013/04/05 15:03:43 Done.
+
+ def is_empty_chunk(chunk):
+ empty_chunk = ['Check dependencies', '', '']
+ return not chunk or (len(chunk) == 4 and chunk[1:] == empty_chunk)
+
+ process = subprocess.Popen(args,
+ bufsize=0,
kustermann 2013/04/02 21:13:15 I think 'bufsize=0' is the default -- you could re
ahe 2013/04/05 15:03:43 Yes. In addition it turns out that "for line in p
+ stdin=None,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+ section = None
+ chunk = []
+ for line in process.stdout:
+ line = line.rstrip()
+ if line.startswith('=== BUILD ') or line.startswith('** BUILD '):
+ if not is_empty_chunk(chunk):
+ print '\n'.join(chunk)
+ section = line
+ chunk = []
+ if not section:
+ print line
+ else:
+ chunk.append(line)
+ if not is_empty_chunk(chunk):
+ print '\n'.join(chunk)
+ return process
+
+
def Main():
utils.ConfigureJava()
# Parse the options.
@@ -241,6 +274,7 @@ def Main():
else:
target = args[0]
+ parse_xcodebuild = False
kustermann 2013/04/02 21:13:15 The intention is not to parse the output of xcodeb
ahe 2013/04/05 15:03:43 Done.
# Remember path
old_path = os.environ['PATH']
# Build the targets for each requested configuration.
@@ -249,6 +283,7 @@ def Main():
for arch in options.arch:
build_config = utils.GetBuildConf(mode, arch)
if HOST_OS == 'macos':
+ parse_xcodebuild = True
project_file = 'dart.xcodeproj'
if os.path.exists('dart-%s.gyp' % CurrentDirectoryBaseName()):
project_file = 'dart-%s.xcodeproj' % CurrentDirectoryBaseName()
@@ -316,7 +351,11 @@ def Main():
print k + " = " + v
print ' '.join(args)
- process = subprocess.Popen(args)
+ process = None
+ if parse_xcodebuild:
+ process = ParseXcodebuild(args)
+ else:
+ process = subprocess.Popen(args, stdin=None)
kustermann 2013/04/02 21:13:15 You could do something like this: if filter_xcode
ahe 2013/04/05 15:03:43 Done.
process.wait()
if process.returncode != 0:
print "BUILD FAILED"
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698