diff --git a/docs/fdroid.texi b/docs/fdroid.texi index 86d16c7a..7e514354 100644 --- a/docs/fdroid.texi +++ b/docs/fdroid.texi @@ -805,20 +805,19 @@ thus using it in any other case is not wise. @item update=xxx By default, 'android update project' is used to generate or update the -build.xml file. Specifying update=no bypasses that. +project and all its referenced projects. Specifying update=no bypasses that. Specifiying update=force forces rebuilding of the build.xml file at the same time - this is frequently needed with r14 of the Android platform tools. Be aware of any customisations in build.xml when using update=force. +Default value is '@code{auto}', which uses the paths used in the +project.properties file to find out what project paths to update. + Otherwise, value can be a semicolon-separated list of directories in which to run 'android update project' relative to the main application directory (which may include '@code{subdir}' parameter). -Default value is '@code{.}', and passing non-default value may be -useful for multi-component projects. Note that @code{--subprojects} -switch is automatically passed to 'android update project', so using -explicit list may be needed only for peculiar source layouts. @item encoding=xxxx Adds a java.encoding property to local.properties with the given diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 3f752380..1e908391 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -455,8 +455,12 @@ def main(): common.write_metadata(metafile, app) if options.commit and logmsg: print "Commiting update for " + metafile - if subprocess.call(["git", "commit", "-m", - logmsg, "--", metafile]) != 0: + gitcmd = ["git", "commit", "-m", + logmsg] + if 'auto_author' in config: + gitcmd.extend(['--author', config['auto_author']]) + gitcmd.extend(["--", metafile]) + if subprocess.call(gitcmd) != 0: print "Git commit failed" sys.exit(1) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 174878d1..5845ecc5 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -1379,15 +1379,31 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, sdk_path, (app['id'], build['version']), p.stdout, p.stderr) # Generate (or update) the ant build file, build.xml... - updatemode = build.get('update', '.') - if (updatemode != 'no' and - 'maven' not in build and 'gradle' not in build): + updatemode = build.get('update', 'auto') + if (updatemode != 'no' + and build.get('maven', 'no') == 'no' + and build.get('gradle', 'no') == 'no'): parms = [os.path.join(sdk_path, 'tools', 'android'), - 'update', 'project', '-p', '.'] + 'update', 'project'] if 'target' in build: parms.append('-t') parms.append(build['target']) - update_dirs = [d.strip() for d in updatemode.split(';')] + update_dirs = None + if updatemode == 'auto': + update_dirs = ['.'] + with open(os.path.join(root_dir, 'project.properties')) as f: + for line in f.readlines(): + if not line.startswith('android.library.reference.'): + continue + path = line.split('=')[1].strip() + relpath = os.path.join(root_dir, path) + if not os.path.isdir(relpath): + continue + if options.verbose: + print "Found subproject %s..." % path + update_dirs.append(path) + else: + update_dirs = [d.strip() for d in updatemode.split(';')] # Force build.xml update if necessary... if updatemode == 'force' or 'target' in build: if updatemode == 'force': @@ -1398,24 +1414,26 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, sdk_path, os.remove(buildxml) for d in update_dirs: - cwd = os.path.join(root_dir, d) # Remove gen and bin dirs in libraries # rid of them... for baddir in [ 'gen', 'bin', 'obj', # ant 'libs/armeabi-v7a', 'libs/armeabi', # jni 'libs/mips', 'libs/x86']: - badpath = os.path.join(cwd, baddir) + badpath = os.path.join(root_dir, d, baddir) if os.path.exists(badpath): print "Removing '%s'" % badpath shutil.rmtree(badpath) + dparms = parms + ['-p', d] if options.verbose: - print "Update of '%s': exec '%s' in '%s'"%\ - (d," ".join(parms),cwd) - p = FDroidPopen(parms, cwd=cwd) + if d == '.': + print "Updating main project..." + else: + print "Updating subproject %s..." % d + p = FDroidPopen(dparms, cwd=root_dir) # check to see whether an error was returned without a proper exit code (this is the case for the 'no target set or target invalid' error) if p.returncode != 0 or (p.stderr != "" and p.stderr.startswith("Error: ")): - raise BuildException("Failed to update project at %s" % cwd, + raise BuildException("Failed to update project at %s" % d, p.stdout, p.stderr) # If the app has ant set up to sign the release, we need to switch