gradle file: use flavour specific versionCode/versionName, fall back to parsing line by line
This commit is contained in:
parent
5cfa4d487f
commit
90c7dd29df
|
@ -1336,27 +1336,63 @@ def parse_androidmanifests(paths, app):
|
||||||
vercode = None
|
vercode = None
|
||||||
package = None
|
package = None
|
||||||
|
|
||||||
|
flavour = None
|
||||||
|
if app.builds and 'gradle' in app.builds[-1] and app.builds[-1].gradle:
|
||||||
|
flavour = app.builds[-1].gradle[-1]
|
||||||
|
|
||||||
if has_extension(path, 'gradle'):
|
if has_extension(path, 'gradle'):
|
||||||
with open(path, 'r') as f:
|
with open(path, 'r') as f:
|
||||||
|
inside_flavour_group = 0
|
||||||
|
inside_required_flavour = 0
|
||||||
for line in f:
|
for line in f:
|
||||||
if gradle_comment.match(line):
|
if gradle_comment.match(line):
|
||||||
continue
|
continue
|
||||||
# Grab first occurence of each to avoid running into
|
|
||||||
# alternative flavours and builds.
|
if inside_flavour_group > 0:
|
||||||
if not package:
|
if inside_required_flavour > 0:
|
||||||
matches = psearch_g(line)
|
matches = psearch_g(line)
|
||||||
if matches:
|
if matches:
|
||||||
s = matches.group(2)
|
s = matches.group(2)
|
||||||
if app_matches_packagename(app, s):
|
if app_matches_packagename(app, s):
|
||||||
package = s
|
package = s
|
||||||
if not version:
|
|
||||||
matches = vnsearch_g(line)
|
matches = vnsearch_g(line)
|
||||||
if matches:
|
if matches:
|
||||||
version = matches.group(2)
|
version = matches.group(2)
|
||||||
if not vercode:
|
|
||||||
matches = vcsearch_g(line)
|
matches = vcsearch_g(line)
|
||||||
if matches:
|
if matches:
|
||||||
vercode = matches.group(1)
|
vercode = matches.group(1)
|
||||||
|
|
||||||
|
if '{' in line:
|
||||||
|
inside_required_flavour += 1
|
||||||
|
if '}' in line:
|
||||||
|
inside_required_flavour -= 1
|
||||||
|
else:
|
||||||
|
if flavour and (flavour in line):
|
||||||
|
inside_required_flavour = 1
|
||||||
|
|
||||||
|
if '{' in line:
|
||||||
|
inside_flavour_group += 1
|
||||||
|
if '}' in line:
|
||||||
|
inside_flavour_group -= 1
|
||||||
|
else:
|
||||||
|
if "productFlavors" in line:
|
||||||
|
inside_flavour_group = 1
|
||||||
|
if not package:
|
||||||
|
matches = psearch_g(line)
|
||||||
|
if matches:
|
||||||
|
s = matches.group(2)
|
||||||
|
if app_matches_packagename(app, s):
|
||||||
|
package = s
|
||||||
|
if not version:
|
||||||
|
matches = vnsearch_g(line)
|
||||||
|
if matches:
|
||||||
|
version = matches.group(2)
|
||||||
|
if not vercode:
|
||||||
|
matches = vcsearch_g(line)
|
||||||
|
if matches:
|
||||||
|
vercode = matches.group(1)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
xml = parse_xml(path)
|
xml = parse_xml(path)
|
||||||
|
|
|
@ -612,6 +612,49 @@ class CommonTest(unittest.TestCase):
|
||||||
sig = fdroidserver.common.metadata_find_developer_signature('org.smssecure.smssecure')
|
sig = fdroidserver.common.metadata_find_developer_signature('org.smssecure.smssecure')
|
||||||
self.assertEqual('b30bb971af0d134866e158ec748fcd553df97c150f58b0a963190bbafbeb0868', sig)
|
self.assertEqual('b30bb971af0d134866e158ec748fcd553df97c150f58b0a963190bbafbeb0868', sig)
|
||||||
|
|
||||||
|
def test_parse_androidmanifests(self):
|
||||||
|
source_files_dir = os.path.join(os.path.dirname(__file__), 'source-files')
|
||||||
|
app = fdroidserver.metadata.App()
|
||||||
|
app.id = 'org.fdroid.fdroid'
|
||||||
|
paths = [
|
||||||
|
os.path.join(source_files_dir, 'fdroid', 'fdroidclient', 'AndroidManifest.xml'),
|
||||||
|
os.path.join(source_files_dir, 'fdroid', 'fdroidclient', 'build.gradle'),
|
||||||
|
]
|
||||||
|
for path in paths:
|
||||||
|
self.assertTrue(os.path.isfile(path))
|
||||||
|
self.assertEqual(('0.94-test', '940', 'org.fdroid.fdroid'),
|
||||||
|
fdroidserver.common.parse_androidmanifests(paths, app))
|
||||||
|
|
||||||
|
def test_parse_androidmanifests_with_flavor(self):
|
||||||
|
source_files_dir = os.path.join(os.path.dirname(__file__), 'source-files')
|
||||||
|
|
||||||
|
app = fdroidserver.metadata.App()
|
||||||
|
build = fdroidserver.metadata.Build()
|
||||||
|
build.gradle = ['devVersion']
|
||||||
|
app.builds = [build]
|
||||||
|
app.id = 'org.fdroid.fdroid.dev'
|
||||||
|
paths = [
|
||||||
|
os.path.join(source_files_dir, 'fdroid', 'fdroidclient', 'AndroidManifest.xml'),
|
||||||
|
os.path.join(source_files_dir, 'fdroid', 'fdroidclient', 'build.gradle'),
|
||||||
|
]
|
||||||
|
for path in paths:
|
||||||
|
self.assertTrue(os.path.isfile(path))
|
||||||
|
self.assertEqual(('0.95-dev', '949', 'org.fdroid.fdroid.dev'),
|
||||||
|
fdroidserver.common.parse_androidmanifests(paths, app))
|
||||||
|
|
||||||
|
app = fdroidserver.metadata.App()
|
||||||
|
build = fdroidserver.metadata.Build()
|
||||||
|
build.gradle = ['free']
|
||||||
|
app.builds = [build]
|
||||||
|
app.id = 'eu.siacs.conversations'
|
||||||
|
paths = [
|
||||||
|
os.path.join(source_files_dir, 'eu.siacs.conversations', 'build.gradle'),
|
||||||
|
]
|
||||||
|
for path in paths:
|
||||||
|
self.assertTrue(os.path.isfile(path))
|
||||||
|
self.assertEqual(('1.23.1', '245', 'eu.siacs.conversations'),
|
||||||
|
fdroidserver.common.parse_androidmanifests(paths, app))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = optparse.OptionParser()
|
parser = optparse.OptionParser()
|
||||||
|
|
|
@ -129,6 +129,21 @@ android {
|
||||||
compileSdkVersion 21
|
compileSdkVersion 21
|
||||||
buildToolsVersion '22.0.1'
|
buildToolsVersion '22.0.1'
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
|
||||||
|
flavorDimensions "default"
|
||||||
|
|
||||||
|
productFlavors {
|
||||||
|
devVersion {
|
||||||
|
applicationId "org.fdroid.fdroid.dev"
|
||||||
|
dimension "default"
|
||||||
|
versionCode 949
|
||||||
|
versionName "0.95-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main {
|
main {
|
||||||
manifest.srcFile 'AndroidManifest.xml'
|
manifest.srcFile 'AndroidManifest.xml'
|
||||||
|
|
Loading…
Reference in New Issue