mirror of
https://github.com/f-droid/fdroidclient.git
synced 2026-01-30 01:31:26 -05:00
Merge branch '2788-migrate-repo-order' into 'master'
Maintain legacy repo priority ordering when migrating Closes #2788 See merge request fdroid/fdroidclient!1387
This commit is contained in:
@@ -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<String> 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) {
|
||||
|
||||
@@ -316,9 +316,9 @@ public class DBHelperTest {
|
||||
String[] defaultRepos = context.getResources().getStringArray(R.array.default_repos);
|
||||
|
||||
List<String> 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;
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user