From 427d0d0aa038ec8142777924ebd82d3ad3c6baeb Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 9 Nov 2017 22:54:29 +0100 Subject: [PATCH 1/2] add 'debug' to applicationId and versionName for debug builds --- app/build.gradle | 8 +++ .../fdroid/fdroid/data/ProviderUriTests.java | 60 +++++++++++-------- 2 files changed, 44 insertions(+), 24 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 33c6dfc88..5dffd2304 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -229,6 +229,14 @@ android { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } + buildTypes { + debug { + applicationIdSuffix ".debug" + resValue "string", "applicationId", defaultConfig.applicationId + applicationIdSuffix + versionNameSuffix "-debug" + } + } + testOptions { unitTests { // prevent tests from dying on android.util.Log calls diff --git a/app/src/test/java/org/fdroid/fdroid/data/ProviderUriTests.java b/app/src/test/java/org/fdroid/fdroid/data/ProviderUriTests.java index 05cb646d4..44e29ff30 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/ProviderUriTests.java +++ b/app/src/test/java/org/fdroid/fdroid/data/ProviderUriTests.java @@ -25,6 +25,11 @@ import static org.fdroid.fdroid.Assert.assertValidUri; @SuppressWarnings("LineLength") public class ProviderUriTests { + private static final String CONTENT_URI_BASE = "content://" + FDroidProvider.AUTHORITY; + private static final String APK_PROVIDER_URI_BASE = CONTENT_URI_BASE + ".ApkProvider"; + private static final String APP_PROVIDER_URI_BASE = CONTENT_URI_BASE + ".AppProvider"; + private static final String TEMP_APP_PROVIDER_URI_BASE = CONTENT_URI_BASE + ".TempAppProvider"; + private ShadowContentResolver resolver; @Before @@ -47,7 +52,7 @@ public class ProviderUriTests { @Test public void validInstalledAppProviderUris() { TestUtils.registerContentProvider(InstalledAppProvider.getAuthority(), InstalledAppProvider.class); - String[] projection = new String[] {InstalledAppTable.Cols._ID}; + String[] projection = new String[]{InstalledAppTable.Cols._ID}; assertValidUri(resolver, InstalledAppProvider.getContentUri(), projection); assertValidUri(resolver, InstalledAppProvider.getAppUri("org.example.app"), projection); assertValidUri(resolver, InstalledAppProvider.getSearchUri("blah"), projection); @@ -66,7 +71,7 @@ public class ProviderUriTests { @Test public void validRepoProviderUris() { TestUtils.registerContentProvider(RepoProvider.getAuthority(), RepoProvider.class); - String[] projection = new String[] {Schema.RepoTable.Cols._ID}; + String[] projection = new String[]{Schema.RepoTable.Cols._ID}; assertValidUri(resolver, RepoProvider.getContentUri(), projection); assertValidUri(resolver, RepoProvider.getContentUri(10000L), projection); assertValidUri(resolver, RepoProvider.allExceptSwapUri(), projection); @@ -82,25 +87,26 @@ public class ProviderUriTests { @Test public void validAppProviderUris() { TestUtils.registerContentProvider(AppProvider.getAuthority(), AppProvider.class); - String[] projection = new String[] {Schema.AppMetadataTable.Cols._ID}; - assertValidUri(resolver, AppProvider.getContentUri(), "content://org.fdroid.fdroid.data.AppProvider", projection); - assertValidUri(resolver, AppProvider.getSearchUri("'searching!'", null), "content://org.fdroid.fdroid.data.AppProvider/search/'searching!'", projection); - assertValidUri(resolver, AppProvider.getSearchUri("'searching!'", "Games"), "content://org.fdroid.fdroid.data.AppProvider/search/'searching!'/Games", projection); - assertValidUri(resolver, AppProvider.getSearchUri("/", null), "content://org.fdroid.fdroid.data.AppProvider/search/%2F", projection); - assertValidUri(resolver, AppProvider.getSearchUri("/", "Games"), "content://org.fdroid.fdroid.data.AppProvider/search/%2F/Games", projection); - assertValidUri(resolver, AppProvider.getSearchUri("", null), "content://org.fdroid.fdroid.data.AppProvider", projection); - assertValidUri(resolver, AppProvider.getCategoryUri("Games"), "content://org.fdroid.fdroid.data.AppProvider/category/Games", projection); - assertValidUri(resolver, AppProvider.getSearchUri("", "Games"), "content://org.fdroid.fdroid.data.AppProvider/category/Games", projection); - assertValidUri(resolver, AppProvider.getSearchUri((String) null, null), "content://org.fdroid.fdroid.data.AppProvider", projection); - assertValidUri(resolver, AppProvider.getSearchUri((String) null, "Games"), "content://org.fdroid.fdroid.data.AppProvider/category/Games", projection); - assertValidUri(resolver, AppProvider.getInstalledUri(), "content://org.fdroid.fdroid.data.AppProvider/installed", projection); - assertValidUri(resolver, AppProvider.getCanUpdateUri(), "content://org.fdroid.fdroid.data.AppProvider/canUpdate", projection); + String[] projection = new String[]{Schema.AppMetadataTable.Cols._ID}; + assertValidUri(resolver, AppProvider.getContentUri(), APP_PROVIDER_URI_BASE, projection); + assertValidUri(resolver, AppProvider.getSearchUri("'searching!'", null), APP_PROVIDER_URI_BASE + "/search/'searching!'", projection); + assertValidUri(resolver, AppProvider.getSearchUri("'searching!'", "Games"), APP_PROVIDER_URI_BASE + "/search/'searching!'/Games", projection); + assertValidUri(resolver, AppProvider.getSearchUri("/", null), APP_PROVIDER_URI_BASE + "/search/%2F", projection); + assertValidUri(resolver, AppProvider.getSearchUri("/", "Games"), APP_PROVIDER_URI_BASE + "/search/%2F/Games", projection); + assertValidUri(resolver, AppProvider.getSearchUri("", null), APP_PROVIDER_URI_BASE, projection); + assertValidUri(resolver, AppProvider.getSearchUri("", "Games"), APP_PROVIDER_URI_BASE + "/category/Games", projection); + assertValidUri(resolver, AppProvider.getCategoryUri("Games"), APP_PROVIDER_URI_BASE + "/category/Games", projection); + assertValidUri(resolver, AppProvider.getSearchUri((String) null, null), APP_PROVIDER_URI_BASE, projection); + assertValidUri(resolver, AppProvider.getSearchUri((String) null, "Games"), APP_PROVIDER_URI_BASE + "/category/Games", projection); + assertValidUri(resolver, AppProvider.getInstalledUri(), APP_PROVIDER_URI_BASE + "/installed", projection); + assertValidUri(resolver, AppProvider.getCanUpdateUri(), APP_PROVIDER_URI_BASE + "/canUpdate", projection); App app = new App(); app.repoId = 1; app.packageName = "org.fdroid.fdroid"; - assertValidUri(resolver, AppProvider.getSpecificAppUri(app.packageName, app.repoId), "content://org.fdroid.fdroid.data.AppProvider/app/1/org.fdroid.fdroid", projection); + assertValidUri(resolver, AppProvider.getSpecificAppUri(app.packageName, app.repoId), + APP_PROVIDER_URI_BASE + "/app/1/org.fdroid.fdroid", projection); } @Test @@ -116,8 +122,9 @@ public class ProviderUriTests { packageNames.add("org.fdroid.fdroid"); packageNames.add("com.example.com"); - assertValidUri(resolver, TempAppProvider.getAppsUri(packageNames, 1), "content://org.fdroid.fdroid.data.TempAppProvider/apps/1/org.fdroid.fdroid%2Ccom.example.com", projection); - assertValidUri(resolver, TempAppProvider.getContentUri(), "content://org.fdroid.fdroid.data.TempAppProvider", projection); + assertValidUri(resolver, TempAppProvider.getAppsUri(packageNames, 1), + TEMP_APP_PROVIDER_URI_BASE + "/apps/1/org.fdroid.fdroid%2Ccom.example.com", projection); + assertValidUri(resolver, TempAppProvider.getContentUri(), TEMP_APP_PROVIDER_URI_BASE, projection); } @Test @@ -130,17 +137,22 @@ public class ProviderUriTests { @Test public void validApkProviderUris() { TestUtils.registerContentProvider(ApkProvider.getAuthority(), ApkProvider.class); - String[] projection = new String[] {Schema.ApkTable.Cols._ID}; + String[] projection = new String[]{Schema.ApkTable.Cols._ID}; List apks = new ArrayList<>(10); for (int i = 0; i < 10; i++) { apks.add(new MockApk("com.example." + i, i)); } - assertValidUri(resolver, ApkProvider.getContentUri(), "content://org.fdroid.fdroid.data.ApkProvider", projection); - assertValidUri(resolver, ApkProvider.getAppUri("org.fdroid.fdroid"), "content://org.fdroid.fdroid.data.ApkProvider/app/org.fdroid.fdroid", projection); - assertValidUri(resolver, ApkProvider.getApkFromAnyRepoUri(new MockApk("org.fdroid.fdroid", 100)), "content://org.fdroid.fdroid.data.ApkProvider/apk-any-repo/100/org.fdroid.fdroid", projection); - assertValidUri(resolver, ApkProvider.getApkFromAnyRepoUri("org.fdroid.fdroid", 100, null), "content://org.fdroid.fdroid.data.ApkProvider/apk-any-repo/100/org.fdroid.fdroid", projection); - assertValidUri(resolver, ApkProvider.getRepoUri(1000), "content://org.fdroid.fdroid.data.ApkProvider/repo/1000", projection); + assertValidUri(resolver, ApkProvider.getContentUri(), + APK_PROVIDER_URI_BASE, projection); + assertValidUri(resolver, ApkProvider.getAppUri("org.fdroid.fdroid"), + APK_PROVIDER_URI_BASE + "/app/org.fdroid.fdroid", projection); + assertValidUri(resolver, ApkProvider.getApkFromAnyRepoUri(new MockApk("org.fdroid.fdroid", 100)), + APK_PROVIDER_URI_BASE + "/apk-any-repo/100/org.fdroid.fdroid", projection); + assertValidUri(resolver, ApkProvider.getApkFromAnyRepoUri("org.fdroid.fdroid", 100, null), + APK_PROVIDER_URI_BASE + "/apk-any-repo/100/org.fdroid.fdroid", projection); + assertValidUri(resolver, ApkProvider.getRepoUri(1000), + APK_PROVIDER_URI_BASE + "/repo/1000", projection); } } From d4d97076317656a441986568e158d5b2de25552e Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 9 Nov 2017 22:56:14 +0100 Subject: [PATCH 2/2] on debug builds, set versionCode using DB_VERSION + commit count This provides an automatic way to generate updates from each new debug build, it is build from the developer's machine or via the nightly repo. --- app/build.gradle | 26 ++++++++++++++++++++++++++ config/nightly-repo/deploy | 4 ---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5dffd2304..81c8ef64b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -237,6 +237,32 @@ android { } } + /* set the debug versionCode based on DB verson and how many commits in the repo */ + applicationVariants.all { variant -> + if (variant.buildType.isDebuggable()) { + // default to a timestamp, in case anything fails later + variant.mergedFlavor.versionCode = new Date().getTime() / 1000 + try { + def stdout = new ByteArrayOutputStream() + exec { + commandLine 'git', 'rev-list', '--first-parent', '--count', 'HEAD' + standardOutput = stdout + } + def commitCount = Integer.parseInt(stdout.toString().trim()) + stdout = new ByteArrayOutputStream() + exec { + commandLine 'sed', '-n', 's,.*DB_VERSION *= *\\([0-9][0-9]*\\).*,\\1,p', 'src/main/java/org/fdroid/fdroid/data/DBHelper.java' + standardOutput = stdout + } + def dbVersion = Integer.parseInt(stdout.toString().trim()) + println 'Setting debug versionCode: ' + sprintf("%d%05d", [dbVersion, commitCount]) + variant.mergedFlavor.versionCode = Integer.parseInt(sprintf("%d%05d", [dbVersion, commitCount])) + } + catch (ignored) { + } + } + } + testOptions { unitTests { // prevent tests from dying on android.util.Log calls diff --git a/config/nightly-repo/deploy b/config/nightly-repo/deploy index b6520fcfd..71778fb37 100755 --- a/config/nightly-repo/deploy +++ b/config/nightly-repo/deploy @@ -9,10 +9,6 @@ apt-get update apt-get install -y --no-install-recommends -t stretch-backports \ fdroidserver openssh-client rsync python3-qrcode -db=`sed -n 's,.*DB_VERSION *= *\([0-9][0-9]*\).*,\1,p' app/src/main/java/org/fdroid/fdroid/data/DBHelper.java` -count=`git rev-list --first-parent --count HEAD` -sed -i "s,versionCode *[0-9][0-9]*.*,versionCode `printf '%d%05d' $db $count`," app/build.gradle - repo_git_base=${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}-nightly repo_base=https://gitlab.com/${repo_git_base} repo_url=${repo_base}/raw/master/fdroid/repo