chiark / gitweb /
Don't run a global "gradle clean" which configures all projects
authorDaniel Martí <mvdan@mvdan.cc>
Fri, 2 Jan 2015 21:26:22 +0000 (22:26 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Fri, 2 Jan 2015 21:26:22 +0000 (22:26 +0100)
Also properly capitalize words for gradle tasks

fdroidserver/build.py

index 677e4c88fa3caf1d523b576ebf992807344d061c..0a503e4b10ec679970cc7959e3ea04831f7c9960 100644 (file)
@@ -438,6 +438,16 @@ def adapt_gradle(build_dir):
                          + config['build_tools'] + '"@g', path])
 
 
+def capitalize_intact(string):
+    """Like str.capitalize(), but leave the rest of the string intact without
+    switching it to lowercase."""
+    if len(string) == 0:
+        return string
+    if len(string) == 1:
+        return string.upper()
+    return string[0].upper() + string[1:]
+
+
 def build_local(app, thisbuild, vcs, build_dir, output_dir, srclib_dir, extlib_dir, tmp_dir, force, onserver):
     """Do a build locally."""
 
@@ -457,6 +467,7 @@ def build_local(app, thisbuild, vcs, build_dir, output_dir, srclib_dir, extlib_d
     # We need to clean via the build tool in case the binary dirs are
     # different from the default ones
     p = None
+    gradletasks = []
     if thisbuild['type'] == 'maven':
         logging.info("Cleaning Maven project...")
         cmd = [config['mvn3'], 'clean', '-Dandroid.sdk.path=' + config['sdk_path']]
@@ -472,12 +483,27 @@ def build_local(app, thisbuild, vcs, build_dir, output_dir, srclib_dir, extlib_d
     elif thisbuild['type'] == 'gradle':
 
         logging.info("Cleaning Gradle project...")
-        cmd = [config['gradle'], 'clean']
+
+        if thisbuild['preassemble']:
+            gradletasks += thisbuild['preassemble']
+
+        flavours = thisbuild['gradle']
+        if flavours == ['yes']:
+            flavours = []
+
+        flavours_cmd = ''.join(flavours)
+        if flavours_cmd:
+            flavours_cmd = capitalize_intact(flavours_cmd)
+
+        gradletasks += ['assemble' + flavours_cmd + 'Release']
 
         adapt_gradle(build_dir)
         for name, number, libpath in srclibpaths:
             adapt_gradle(libpath)
 
+        cmd = [config['gradle']]
+        cmd += ['clean' + capitalize_intact(task) for task in gradletasks]
+
         p = FDroidPopen(cmd, cwd=root_dir)
 
     elif thisbuild['type'] == 'kivy':
@@ -661,25 +687,14 @@ def build_local(app, thisbuild, vcs, build_dir, output_dir, srclib_dir, extlib_d
 
     elif thisbuild['type'] == 'gradle':
         logging.info("Building Gradle project...")
-        flavours = thisbuild['gradle']
-        if flavours == ['yes']:
-            flavours = []
-
-        commands = [config['gradle']]
-        if thisbuild['preassemble']:
-            commands += thisbuild['preassemble']
-
-        flavours_cmd = ''.join(flavours)
-        if flavours_cmd:
-            flavours_cmd = flavours_cmd[0].upper() + flavours_cmd[1:]
-
-        commands += ['assemble' + flavours_cmd + 'Release']
 
         # Avoid having to use lintOptions.abortOnError false
         if thisbuild['gradlepluginver'] >= LooseVersion('0.7'):
             with open(os.path.join(root_dir, 'build.gradle'), "a") as f:
                 f.write("\nandroid { lintOptions { checkReleaseBuilds false } }\n")
 
+        commands = [config['gradle']] + gradletasks
+
         p = FDroidPopen(commands, cwd=root_dir)
 
     elif thisbuild['type'] == 'ant':