File tree Expand file tree Collapse file tree 3 files changed +44
-0
lines changed Expand file tree Collapse file tree 3 files changed +44
-0
lines changed Original file line number Diff line number Diff line change @@ -27,6 +27,7 @@ import 'package_reservation_create.dart';
2727import 'package_reservation_delete.dart' ;
2828import 'package_reservation_list.dart' ;
2929import 'package_version_delete.dart' ;
30+ import 'package_version_fix_sha256.dart' ;
3031import 'package_version_info.dart' ;
3132import 'package_version_retraction.dart' ;
3233import 'publisher_create.dart' ;
@@ -116,6 +117,7 @@ final class AdminAction {
116117 packageReservationDelete,
117118 packageReservationList,
118119 packageVersionDelete,
120+ packageVersionFixSha256,
119121 packageVersionInfo,
120122 packageVersionRetraction,
121123 publisherCreate,
Original file line number Diff line number Diff line change 33// BSD-style license that can be found in the LICENSE file.
44
55import 'dart:io' ;
6+ import 'dart:typed_data' ;
67
78import 'package:crypto/crypto.dart' ;
89import 'package:gcloud/storage.dart' ;
910import 'package:logging/logging.dart' ;
1011import 'package:meta/meta.dart' ;
12+ import 'package:pub_dev/admin/actions/actions.dart' ;
1113import 'package:pub_dev/package/api_export/exported_api.dart' ;
1214import '../shared/datastore.dart' ;
1315import '../shared/storage.dart' ;
@@ -317,6 +319,17 @@ class TarballStorage {
317319 archivesDeleted: deleteObjects.length,
318320 );
319321 }
322+
323+ /// Loads the bytes from the canonical archive for [package] [version] .
324+ Future <Uint8List > getCanonicalArchiveBytes (
325+ String package, String version) async {
326+ final objectName = tarballObjectName (package, version);
327+ final info = await _canonicalBucket.tryInfo (objectName);
328+ if (info == null ) {
329+ throw NotFoundException ('Canonical archive not found.' );
330+ }
331+ return await _canonicalBucket.readAsBytes (objectName);
332+ }
320333}
321334
322335class PublicBucketUpdateStat {
Original file line number Diff line number Diff line change 33// BSD-style license that can be found in the LICENSE file.
44
55import 'package:_pub_shared/data/admin_api.dart' ;
6+ import 'package:gcloud/db.dart' ;
67import 'package:pub_dev/package/backend.dart' ;
78import 'package:test/test.dart' ;
89
@@ -59,5 +60,33 @@ void main() {
5960 final newLatest = await packageBackend.getLatestVersion ('oxygen' );
6061 expect (newLatest != latest, isTrue);
6162 });
63+
64+ testWithProfile ('package-version-fix-sha256' , fn: () async {
65+ final latest = await packageBackend.getLatestVersion ('oxygen' );
66+ final oldPv =
67+ await packageBackend.lookupPackageVersion ('oxygen' , latest! );
68+ oldPv! .sha256 = [0 , 1 , 2 ];
69+ await dbService.commit (inserts: [oldPv]);
70+
71+ final api = createPubApiClient (authToken: siteAdminToken);
72+ final result = await api.adminInvokeAction (
73+ 'package-version-fix-sha256' ,
74+ AdminInvokeActionArguments (arguments: {
75+ 'package' : 'oxygen' ,
76+ 'version' : latest,
77+ }),
78+ );
79+
80+ expect (result.output, {
81+ 'package' : 'oxygen' ,
82+ 'version' : latest,
83+ 'before' : {
84+ 'sha256' : '000102' ,
85+ },
86+ 'after' : {
87+ 'sha256' : hasLength (64 ),
88+ },
89+ });
90+ });
6291 });
6392}
You can’t perform that action at this time.
0 commit comments