From 4c366403fa1a81c22039ba5d78309baef1d90442 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 24 Apr 2024 14:35:28 -0300 Subject: [PATCH 1/2] [db] Maintain legacy repo priority ordering when migrating --- .../fdroid/database/MultiRepoMigrationTest.kt | 38 +++++++++---------- .../java/org/fdroid/database/Migrations.kt | 4 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/libs/database/src/dbTest/java/org/fdroid/database/MultiRepoMigrationTest.kt b/libs/database/src/dbTest/java/org/fdroid/database/MultiRepoMigrationTest.kt index b252299b4..c799b9e5f 100644 --- a/libs/database/src/dbTest/java/org/fdroid/database/MultiRepoMigrationTest.kt +++ b/libs/database/src/dbTest/java/org/fdroid/database/MultiRepoMigrationTest.kt @@ -106,13 +106,13 @@ internal class MultiRepoMigrationTest { db.getRepositoryDao().getRepositories().sortedByDescending { it.weight }.also { repos -> assertEquals(reposToMigrate.size, repos.size) assertEquals(reposToMigrate.size, repos.map { it.weight }.toSet().size) - assertEquals(fdroidRepo.address, repos[0].address) + assertEquals(guardianRepo.address, repos[0].address) assertEquals(1_000_000_000, repos[0].weight) - assertEquals(fdroidArchiveRepo.address, repos[1].address) + assertEquals(guardianArchiveRepo.address, repos[1].address) assertEquals(999_999_999, repos[1].weight) - assertEquals(guardianRepo.address, repos[2].address) + assertEquals(fdroidRepo.address, repos[2].address) assertEquals(999_999_998, repos[2].weight) - assertEquals(guardianArchiveRepo.address, repos[3].address) + assertEquals(fdroidArchiveRepo.address, repos[3].address) assertEquals(999_999_997, repos[3].weight) } } @@ -148,18 +148,18 @@ internal class MultiRepoMigrationTest { db.getRepositoryDao().getRepositories().sortedByDescending { it.weight }.also { repos -> assertEquals(reposToMigrate.size, repos.size) assertEquals(reposToMigrate.size, repos.map { it.weight }.toSet().size) - assertEquals(fdroidRepo.address, repos[0].address) + assertEquals("https://example.com/fdroid/repo", repos[0].address) assertEquals(1_000_000_000, repos[0].weight) - assertEquals(fdroidArchiveRepo.address, repos[1].address) - assertEquals(999_999_999, repos[1].weight) + assertEquals("https://example.org/fdroid/repo", repos[1].address) + assertEquals(999_999_998, repos[1].weight) // space for archive above assertEquals(guardianRepo.address, repos[2].address) - assertEquals(999_999_998, repos[2].weight) + assertEquals(999_999_996, repos[2].weight) assertEquals(guardianArchiveRepo.address, repos[3].address) - assertEquals(999_999_997, repos[3].weight) - assertEquals("https://example.org/fdroid/repo", repos[4].address) - assertEquals(999_999_996, repos[4].weight) - assertEquals("https://example.com/fdroid/repo", repos[5].address) - assertEquals(999_999_994, repos[5].weight) // space for archive above + assertEquals(999_999_995, repos[3].weight) + assertEquals(fdroidRepo.address, repos[4].address) + assertEquals(999_999_994, repos[4].weight) + assertEquals(fdroidArchiveRepo.address, repos[5].address) + assertEquals(999_999_993, repos[5].weight) } } } @@ -183,12 +183,12 @@ internal class MultiRepoMigrationTest { db.getRepositoryDao().getRepositories().sortedByDescending { it.weight }.also { repos -> assertEquals(reposToMigrate.size, repos.size) assertEquals(reposToMigrate.size, repos.map { it.weight }.toSet().size) - assertEquals("https://example.org/fdroid/repo", repos[0].address) - assertEquals(1_000_000_000, repos[0].weight) - assertEquals(guardianRepo.address, repos[1].address) - assertEquals(999_999_998, repos[1].weight) // space for archive above - assertEquals(fdroidArchiveRepo.address, repos[2].address) - assertEquals(999_999_996, repos[2].weight) // space for archive above + assertEquals(guardianRepo.address, repos[0].address) + assertEquals(1_000_000_000, repos[0].weight) // space for archive below + assertEquals("https://example.org/fdroid/repo", repos[1].address) + assertEquals(999_999_998, repos[1].weight) + assertEquals(fdroidArchiveRepo.address, repos[2].address) // archive at the end + assertEquals(999_999_996, repos[2].weight) } } } diff --git a/libs/database/src/main/java/org/fdroid/database/Migrations.kt b/libs/database/src/main/java/org/fdroid/database/Migrations.kt index 8dc70cdef..ec5e6250f 100644 --- a/libs/database/src/main/java/org/fdroid/database/Migrations.kt +++ b/libs/database/src/main/java/org/fdroid/database/Migrations.kt @@ -33,7 +33,7 @@ internal class MultiRepoMigration : AutoMigrationSpec { """ SELECT repoId, address, certificate, weight FROM ${CoreRepository.TABLE} JOIN ${RepositoryPreferences.TABLE} USING (repoId) - ORDER BY weight ASC""" + ORDER BY weight DESC""" ).use { cursor -> while (cursor.moveToNext()) { val repo = getRepo(cursor) @@ -54,7 +54,7 @@ internal class MultiRepoMigration : AutoMigrationSpec { } // now go through all repos and adapt their weight, - // so that repos with a low weight get a high weight with space for archive repos + // so that repos get a higher weight with space for archive repos var nextWeight = REPO_WEIGHT repos.forEach { repo -> val archiveRepo = archiveMap[repo.certificate] From b1631f507859d2512e0c35144743e0c3516c0d14 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 30 Apr 2024 10:42:37 -0300 Subject: [PATCH 2/2] [app] add default repos before ROM repos, so they end up with higher priority --- app/src/main/java/org/fdroid/fdroid/data/DBHelper.java | 7 ++++--- app/src/test/java/org/fdroid/fdroid/data/DBHelperTest.java | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java index f0bc60c93..5f498c0f5 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java +++ b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java @@ -134,8 +134,8 @@ public class DBHelper { } /** - * Load Additional Repos first, then Default Repos. This way, Default - * Repos will be shown after the OEM-added ones on the Manage Repos + * Load Default Repos first, then Additional Repos. This way, the OEM-added repos + * will be shown after the default ones (i.e. lower priority) on the Manage Repos * screen. This throws a hard {@code Exception} on parse errors since * Default Repos are built into the APK. So it should fail as hard and fast * as possible so the developer catches the problem. @@ -164,9 +164,10 @@ public class DBHelper { ") != 0, FYI the priority item was removed in v1.16"); } + // add default repos first, so they are at the top of the list with higher priority List repos = new ArrayList<>(additionalRepos.size() + defaultRepos.size()); - repos.addAll(additionalRepos); repos.addAll(defaultRepos); + repos.addAll(additionalRepos); final int descriptionIndex = 2; for (int i = descriptionIndex; i < repos.size(); i += REPO_XML_ITEM_COUNT) { diff --git a/app/src/test/java/org/fdroid/fdroid/data/DBHelperTest.java b/app/src/test/java/org/fdroid/fdroid/data/DBHelperTest.java index 0b7e8e956..df52db55f 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/DBHelperTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/DBHelperTest.java @@ -316,9 +316,9 @@ public class DBHelperTest { String[] defaultRepos = context.getResources().getStringArray(R.array.default_repos); List shouldBeRepos = new LinkedList<>(); + shouldBeRepos.addAll(Arrays.asList(defaultRepos)); shouldBeRepos.addAll(oem0); shouldBeRepos.addAll(oem1); - shouldBeRepos.addAll(Arrays.asList(defaultRepos)); // Normalize whitespace in descriptions, just like DBHelper does. final int descriptionIndex = 2;