Merge "Make cloud storage lookup faster, fix overwriting pulled jar"
diff --git a/tools/run_on_as_app.py b/tools/run_on_as_app.py
index 8f37f43..56ea215 100755
--- a/tools/run_on_as_app.py
+++ b/tools/run_on_as_app.py
@@ -117,7 +117,7 @@
   return subprocess.check_output(['git', 'clone', git_url]).strip()
 
 def GitPull():
-  return subprocess.check_output(['git', 'pull']).strip()
+  return subprocess.call(['git', 'pull']) == 0
 
 def GitCheckout(file):
   return subprocess.check_output(['git', 'checkout', file]).strip()
@@ -153,19 +153,34 @@
     else:
       return
 
-def BuildAppWithSelectedShrinkers(app, config, options):
+def GetResultsForApp(app, config, options):
   git_repo = config['git_repo']
 
   # Checkout and build in the build directory.
   checkout_dir = os.path.join(WORKING_DIR, app)
 
+  result = {}
+
   if not os.path.exists(checkout_dir):
     with utils.ChangedWorkingDirectory(WORKING_DIR):
       GitClone(git_repo)
   else:
     with utils.ChangedWorkingDirectory(checkout_dir):
-      GitPull()
+      if not GitPull():
+        result['status'] = 'failed'
+        result['error_message'] = 'Unable to pull from remote'
+        return result
 
+  result['status'] = 'success'
+
+  result_per_shrinker = BuildAppWithSelectedShrinkers(
+      app, config, options, checkout_dir)
+  for shrinker, shrinker_result in result_per_shrinker.iteritems():
+    result[shrinker] = shrinker_result
+
+  return result
+
+def BuildAppWithSelectedShrinkers(app, config, options, checkout_dir):
   result_per_shrinker = {}
 
   with utils.ChangedWorkingDirectory(checkout_dir):
@@ -292,6 +307,12 @@
 def LogResults(result_per_shrinker_per_app, options):
   for app, result_per_shrinker in result_per_shrinker_per_app.iteritems():
     print(app + ':')
+
+    if result_per_shrinker.get('status') != 'success':
+      error_message = result_per_shrinker.get('error_message')
+      print('  skipped ({})'.format(error_message))
+      continue
+
     baseline = result_per_shrinker.get('proguard', {}).get('dex_size', -1)
     for shrinker, result in result_per_shrinker.iteritems():
       build_status = result.get('build_status')
@@ -355,12 +376,12 @@
   result_per_shrinker_per_app = {}
 
   if options.app:
-    result_per_shrinker_per_app[options.app] = BuildAppWithSelectedShrinkers(
+    result_per_shrinker_per_app[options.app] = GetResultsForApp(
         options.app, APPS.get(options.app), options)
   else:
     for app, config in APPS.iteritems():
       if not config.get('skip', False):
-        result_per_shrinker_per_app[app] = BuildAppWithSelectedShrinkers(
+        result_per_shrinker_per_app[app] = GetResultsForApp(
             app, config, options)
 
   LogResults(result_per_shrinker_per_app, options)