diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 4ab4aaf1..2857ac06 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -511,6 +511,20 @@ def publishednameinfo(filename): return result +apk_release_filename = re.compile('(?P[a-z0-9_\.]+)_(?P[0-9]+)\.apk') +apk_release_filename_with_sigfp = re.compile('(?P[a-z0-9_\.]+)_(?P[0-9]+)_(?P[0-9a-f]{7})\.apk') + + +def apk_parse_release_filename(apkname): + m = apk_release_filename_with_sigfp.match(apkname) + if m: + return m.group('appid'), m.group('vercode'), m.group('sigfp') + m = apk_release_filename.match(apkname) + if m: + return m.group('appid'), m.group('vercode'), None + return None, None, None + + def get_release_filename(app, build): if build.output: return "%s_%s.%s" % (app.id, build.versionCode, get_file_extension(build.output)) diff --git a/tests/common.TestCase b/tests/common.TestCase index 9badf369..64264b17 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -418,6 +418,22 @@ class CommonTest(unittest.TestCase): with self.assertRaises(FDroidException): fdroidserver.common.get_apk_id_aapt('nope') + def test_apk_release_name(self): + appid, vercode, sigfp = fdroidserver.common.apk_parse_release_filename('com.serwylo.lexica_905.apk') + self.assertEqual(appid, 'com.serwylo.lexica') + self.assertEqual(vercode, '905') + self.assertEqual(sigfp, None) + + appid, vercode, sigfp = fdroidserver.common.apk_parse_release_filename('com.serwylo.lexica_905_c82e0f6.apk') + self.assertEqual(appid, 'com.serwylo.lexica') + self.assertEqual(vercode, '905') + self.assertEqual(sigfp, 'c82e0f6') + + appid, vercode, sigfp = fdroidserver.common.apk_parse_release_filename('beverly_hills-90210.apk') + self.assertEqual(appid, None) + self.assertEqual(vercode, None) + self.assertEqual(sigfp, None) + if __name__ == "__main__": parser = optparse.OptionParser()