Skip to content

Commit 46883e1

Browse files
committed
Refactor sort of pending versions into the method that generates the list.
1 parent 704b8b9 commit 46883e1

File tree

2 files changed

+36
-39
lines changed

2 files changed

+36
-39
lines changed

app/lib/task/models.dart

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:clock/clock.dart';
88
import 'package:json_annotation/json_annotation.dart';
99
import 'package:pub_dev/admin/actions/actions.dart';
1010
import 'package:pub_dev/shared/utils.dart';
11+
import 'package:pub_semver/pub_semver.dart';
1112

1213
import '../shared/datastore.dart' as db;
1314
import '../shared/versions.dart' as shared_versions;
@@ -167,7 +168,7 @@ class PackageState extends db.ExpandoModel<String> {
167168
final at_ = at ?? clock.now();
168169
Duration timeSince(DateTime past) => at_.difference(past);
169170

170-
return versions!.entries
171+
final list = versions!.entries
171172
.where(
172173
// NOTE: Any changes here must be reflected in [derivePendingAt]
173174
(e) =>
@@ -185,7 +186,40 @@ class PackageState extends db.ExpandoModel<String> {
185186
taskRetryDelay(e.value.attempts)),
186187
)
187188
.map((e) => e.key)
189+
.map(Version.parse)
188190
.toList();
191+
192+
// Prioritize stable versions first, prereleases after them (in decreasing order), e.g.
193+
// - 2.5.0
194+
// - 2.4.0
195+
// - 2.0.0
196+
// - 1.2.0
197+
// - 3.0.0-dev2
198+
// - 3.0.0-dev1
199+
// - 2.7.0-beta
200+
// - 1.0.0-dev
201+
list.sort((a, b) => compareSemanticVersionsDesc(a, b, true, true));
202+
203+
// Promote the first prerelease version to the second position, e.g.
204+
// - 2.5.0
205+
// - 3.0.0-dev2
206+
// - 2.4.0
207+
// - 2.0.0
208+
// - 1.2.0
209+
// - 3.0.0-dev1
210+
// - 2.7.0-beta
211+
// - 1.0.0-dev
212+
//
213+
// (applicable only when the second position is a stable version)
214+
if (list.length > 2 && !list[1].isPreRelease) {
215+
final firstPrereleaseIndex = list.indexWhere((v) => v.isPreRelease);
216+
if (firstPrereleaseIndex > 1) {
217+
final v = list.removeAt(firstPrereleaseIndex);
218+
list.insert(1, v);
219+
}
220+
}
221+
222+
return list.map((s) => s.toString()).toList();
189223
}
190224

191225
/// Returns true if the current [PackageState] instance is new, no version analysis

app/lib/task/scheduler.dart

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import 'package:pub_dev/task/clock_control.dart';
1616
import 'package:pub_dev/task/cloudcompute/cloudcompute.dart';
1717
import 'package:pub_dev/task/global_lock.dart';
1818
import 'package:pub_dev/task/models.dart';
19-
import 'package:pub_semver/pub_semver.dart';
2019

2120
final _log = Logger('pub.task.schedule');
2221

@@ -305,48 +304,12 @@ updatePackageStateWithPendingVersions(
305304
final oldVersionsMap = {...?s.versions};
306305

307306
final now = clock.now();
308-
final pendingVersions = s
309-
.pendingVersions(at: now)
310-
.map(Version.parse)
311-
.toList();
307+
final pendingVersions = s.pendingVersions(at: now).toList();
312308
if (pendingVersions.isEmpty) {
313309
// do not schedule anything
314310
return null;
315311
}
316312

317-
// Prioritize stable versions first, prereleases after them (in decreasing order), e.g.
318-
// - 2.5.0
319-
// - 2.4.0
320-
// - 2.0.0
321-
// - 1.2.0
322-
// - 3.0.0-dev2
323-
// - 3.0.0-dev1
324-
// - 2.7.0-beta
325-
// - 1.0.0-dev
326-
pendingVersions.sort(
327-
(a, b) => compareSemanticVersionsDesc(a, b, true, true),
328-
);
329-
// Promote the first prerelease version to the second position, e.g.
330-
// - 2.5.0
331-
// - 3.0.0-dev2
332-
// - 2.4.0
333-
// - 2.0.0
334-
// - 1.2.0
335-
// - 3.0.0-dev1
336-
// - 2.7.0-beta
337-
// - 1.0.0-dev
338-
//
339-
// (applicable only when the second position is a stable version)
340-
if (pendingVersions.length > 2 && !pendingVersions[1].isPreRelease) {
341-
final firstPrereleaseIndex = pendingVersions.indexWhere(
342-
(v) => v.isPreRelease,
343-
);
344-
if (firstPrereleaseIndex > 1) {
345-
final v = pendingVersions.removeAt(firstPrereleaseIndex);
346-
pendingVersions.insert(1, v);
347-
}
348-
}
349-
350313
// Update PackageState
351314
s.versions!.addAll({
352315
for (final v in pendingVersions.map((v) => v.toString()))

0 commit comments

Comments
 (0)