1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-11-14 02:50:12 +01:00

Small automatic ant updating rewrite

* Support two levels of subprojects
* Do lower level libraries first, doing '.' last
* Run 'ant clean' AFTER android update, since a missing build.xml results in ant clean doing nothing
This commit is contained in:
Daniel Martí 2014-02-10 23:03:02 +01:00
parent e5915072c0
commit 0cef32a407

View File

@ -633,11 +633,11 @@ def version_name(original, app_dir, flavour):
return string return string
return original return original
def ant_subprojects(root_dir): def get_library_references(root_dir):
subprojects = [] libraries = []
proppath = os.path.join(root_dir, 'project.properties') proppath = os.path.join(root_dir, 'project.properties')
if not os.path.isfile(proppath): if not os.path.isfile(proppath):
return subprojects return libraries
with open(proppath) as f: with open(proppath) as f:
for line in f.readlines(): for line in f.readlines():
if not line.startswith('android.library.reference.'): if not line.startswith('android.library.reference.'):
@ -647,7 +647,17 @@ def ant_subprojects(root_dir):
if not os.path.isdir(relpath): if not os.path.isdir(relpath):
continue continue
logging.info("Found subproject at %s" % path) logging.info("Found subproject at %s" % path)
subprojects.append(path) libraries.append(path)
return libraries
def ant_subprojects(root_dir):
subprojects = get_library_references(root_dir)
for subpath in subprojects:
subrelpath = os.path.join(root_dir, subpath)
for p in get_library_references(subrelpath):
relp = os.path.normpath(os.path.join(subpath,p))
if relp not in subprojects:
subprojects.insert(0, relp)
return subprojects return subprojects
# Extract some information from the AndroidManifest.xml at the given path. # Extract some information from the AndroidManifest.xml at the given path.
@ -921,7 +931,7 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
parms += ['-t', build['target']] parms += ['-t', build['target']]
update_dirs = None update_dirs = None
if updatemode == 'auto': if updatemode == 'auto':
update_dirs = ['.'] + ant_subprojects(root_dir) update_dirs = ant_subprojects(root_dir) + ['.']
else: else:
update_dirs = [d.strip() for d in updatemode.split(';')] update_dirs = [d.strip() for d in updatemode.split(';')]
# Force build.xml update if necessary # Force build.xml update if necessary
@ -935,8 +945,6 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
for d in update_dirs: for d in update_dirs:
subdir = os.path.join(root_dir, d) subdir = os.path.join(root_dir, d)
# Clean update dirs via ant
p = FDroidPopen(['ant', 'clean'], cwd=subdir)
dparms = parms + ['-p', d] dparms = parms + ['-p', d]
if d == '.': if d == '.':
logging.info("Updating main project") logging.info("Updating main project")
@ -949,6 +957,12 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
if p.returncode != 0 or p.stdout.startswith("Error: "): if p.returncode != 0 or p.stdout.startswith("Error: "):
raise BuildException("Failed to update project at %s" % d, raise BuildException("Failed to update project at %s" % d,
p.stdout) p.stdout)
# Clean update dirs via ant
if d == '.':
logging.info("Cleaning main project")
else:
logging.info("Cleaning subproject %s" % d)
p = FDroidPopen(['ant', 'clean'], cwd=subdir)
# Update the local.properties file # Update the local.properties file
localprops = [ os.path.join(build_dir, 'local.properties') ] localprops = [ os.path.join(build_dir, 'local.properties') ]