diff --git a/app/lib/tool/test_profile/import_source.dart b/app/lib/tool/test_profile/import_source.dart index 58d9291a8a..3cf9d7a5f1 100644 --- a/app/lib/tool/test_profile/import_source.dart +++ b/app/lib/tool/test_profile/import_source.dart @@ -42,14 +42,12 @@ class ImportSource { } /// Resolve all the package-version required for the [profile]. - Future> resolveVersions(TestProfile profile) async { - return [ - ...await resolver.resolveVersions(_client, profile), - ...await _resolveGeneratedVersions(profile), - ]; + Future> resolveImportedVersions( + TestProfile profile) async { + return await resolver.resolveVersions(_client, profile); } - Future> _resolveGeneratedVersions( + Future> resolveGeneratedVersions( TestProfile profile) async { final versions = []; profile.generatedPackages.forEach((p) { diff --git a/app/lib/tool/test_profile/importer.dart b/app/lib/tool/test_profile/importer.dart index 3d52644d7b..c506b424d0 100644 --- a/app/lib/tool/test_profile/importer.dart +++ b/app/lib/tool/test_profile/importer.dart @@ -33,11 +33,12 @@ Future importProfile({ String? adminUserEmail, }) async { source ??= ImportSource(); - final resolvedVersions = await source.resolveVersions(profile); - resolvedVersions.sort(); + final importedVersions = await source.resolveImportedVersions(profile); + final generatedVersions = await source.resolveGeneratedVersions(profile); + final resolvedVersions = [...importedVersions, ...generatedVersions]..sort(); // expand profile with resolved version information - profile = normalize(profile, resolvedVersions: resolvedVersions); + profile = normalize(profile); if (profile.importedPackages .any((p) => p.uploaders != null && p.uploaders!.length > 1)) { @@ -97,11 +98,12 @@ Future importProfile({ lastActiveUploaderEmails[rv.package] = uploaderEmail; var bytes = pendingBytes['${rv.package}/${rv.version}'] ?? - (profile.isGenerated(rv.package, rv.version) - ? await source.getGeneratedArchiveBytes(rv.package, rv.version) - : await source.getPubDevArchiveBytes(rv.package, rv.version)); + (importedVersions.contains(rv) + ? await source.getPubDevArchiveBytes(rv.package, rv.version) + : await source.getGeneratedArchiveBytes(rv.package, rv.version)); bytes = await _mayCleanupTarModeBits(bytes); try { + // TODO: use the created field with fake clock header to set the published timestamp await withRetryPubApiClient( authToken: createFakeAuthTokenForEmail(uploaderEmail, audience: activeConfiguration.pubClientAudience), @@ -232,9 +234,13 @@ Future importProfile({ } List _potentialActiveEmails(TestProfile profile, String packageName) { - final testPackage = - profile.importedPackages.firstWhereOrNull((p) => p.name == packageName) ?? - profile.generatedPackages.firstWhere((p) => p.name == packageName); + final testPackage = profile.importedPackages + .firstWhereOrNull((p) => p.name == packageName) ?? + profile.generatedPackages.firstWhereOrNull((p) => p.name == packageName); + + if (testPackage == null) { + return [profile.resolvedDefaultUser]; + } // uploaders if (testPackage.publisher == null) { diff --git a/app/lib/tool/test_profile/models.dart b/app/lib/tool/test_profile/models.dart index 69a748fd37..16f0c181d4 100644 --- a/app/lib/tool/test_profile/models.dart +++ b/app/lib/tool/test_profile/models.dart @@ -60,13 +60,6 @@ class TestProfile { ); } - /// Returns whether the [package]/[version] is part of the generated packages list. - bool isGenerated(String package, String version) { - final p = generatedPackages.firstWhereOrNull((p) => p.name == package); - final v = p?.versions?.firstWhereOrNull((v) => v.version == version); - return v != null; - } - /// The [defaultUser] if specified, otherwise: /// - the first entry in the [users] list, /// - the first specified member in the [publishers] list, @@ -116,23 +109,6 @@ class TestPackage { } Map toJson() => _$TestPackageToJson(this); - - TestPackage change({ - List? versions, - }) { - return TestPackage( - name: name, - uploaders: uploaders, - publisher: publisher, - versions: versions ?? this.versions, - replacedBy: replacedBy, - isDiscontinued: isDiscontinued, - isUnlisted: isUnlisted, - isFlutterFavorite: isFlutterFavorite, - retractedVersions: retractedVersions, - likeCount: likeCount, - ); - } } @JsonSerializable(explicitToJson: true, includeIfNull: false) diff --git a/app/lib/tool/test_profile/normalizer.dart b/app/lib/tool/test_profile/normalizer.dart index 29f17ef451..d40d51938d 100644 --- a/app/lib/tool/test_profile/normalizer.dart +++ b/app/lib/tool/test_profile/normalizer.dart @@ -6,10 +6,7 @@ import 'models.dart'; /// Creates a new TestProfile with the missing entities (e.g. users or publishers) /// created. -TestProfile normalize( - TestProfile profile, { - List? resolvedVersions, -}) { +TestProfile normalize(TestProfile profile) { final users = {}; final publishers = {}; final importedPackages = {}; @@ -42,43 +39,6 @@ TestProfile normalize( }); }); - // add missing packages from resolved versions - if (resolvedVersions != null) { - resolvedVersions.forEach((rv) { - if (generatedPackages.containsKey(rv.package)) { - return; - } - importedPackages.putIfAbsent( - rv.package, - () => TestPackage( - name: rv.package, - versions: [ - TestVersion(version: rv.version, created: rv.created), - ], - uploaders: [profile.resolvedDefaultUser], - )); - }); - // update versions from resolved versions - List getUpdateVersions(TestPackage p) { - return resolvedVersions - .where((rv) => rv.package == p.name) - .map((rv) => rv.version) - .toSet() - .map((v) => TestVersion( - version: v, - created: - resolvedVersions.firstWhere((x) => x.version == v).created)) - .toList(); - } - - importedPackages.values.toList().forEach((p) { - importedPackages[p.name] = p.change(versions: getUpdateVersions(p)); - }); - generatedPackages.values.toList().forEach((p) { - generatedPackages[p.name] = p.change(versions: getUpdateVersions(p)); - }); - } - final publishersToCreate = { ...importedPackages.values.map((p) => p.publisher).nonNulls, ...generatedPackages.values.map((p) => p.publisher).nonNulls, diff --git a/app/test/tool/test_profile/model_normalization_test.dart b/app/test/tool/test_profile/model_normalization_test.dart index 7faae13aea..9e3f20eee0 100644 --- a/app/test/tool/test_profile/model_normalization_test.dart +++ b/app/test/tool/test_profile/model_normalization_test.dart @@ -2,7 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'package:clock/clock.dart'; import 'package:pub_dev/tool/test_profile/models.dart'; import 'package:pub_dev/tool/test_profile/normalizer.dart'; import 'package:test/test.dart'; @@ -86,43 +85,5 @@ generatedPackages: }, ); }); - - test('resolved versions', () { - expect( - normalize( - TestProfile.fromYaml(''' -defaultUser: user@domain.com -generatedPackages: - - name: foo -'''), - resolvedVersions: [ - ResolvedVersion( - package: 'foo', - version: '1.1.0', - created: clock.now(), - ), - ], - ).toJson(), - { - 'importedPackages': [], - 'generatedPackages': [ - { - 'name': 'foo', - 'versions': [ - {'version': '1.1.0', 'created': isNotEmpty}, - ], - } - ], - 'publishers': [], - 'users': [ - { - 'email': 'user@domain.com', - 'likes': [], - } - ], - 'defaultUser': 'user@domain.com', - }, - ); - }); }); }