Skip to content

Commit d1289ab

Browse files
authored
Merge pull request #1772 from dart-lang/sdk-solver
Don't adjust SDK constraints whose min versions are prerelease
2 parents f5cbc08 + f1e09a3 commit d1289ab

File tree

2 files changed

+110
-90
lines changed

2 files changed

+110
-90
lines changed

lib/src/pubspec.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,9 @@ class Pubspec {
391391
if (!allowPreReleaseSdk) return false;
392392
if (!sdk.version.isPreRelease) return false;
393393
if (sdkConstraint.includeMax) return false;
394+
if (sdkConstraint.min != null && sdkConstraint.min.isPreRelease) {
395+
return false;
396+
}
394397
if (sdkConstraint.max == null) return false;
395398
if (sdkConstraint.max.isPreRelease) return false;
396399
return sdkConstraint.max.major == sdk.version.major &&

test/version_solver_test.dart

Lines changed: 107 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1135,111 +1135,128 @@ void dartSdkConstraint() {
11351135
'current SDK is 2.0.0.');
11361136
});
11371137

1138-
test("pre-release override requires major SDK versions to match", () async {
1139-
await d.dir(appPath, [
1140-
await d.pubspec({
1141-
'name': 'myapp',
1142-
'environment': {'sdk': '<2.2.3'}
1143-
})
1144-
]).create();
1138+
group("pre-release override", () {
1139+
group("requires", () {
1140+
test("major SDK versions to match", () async {
1141+
await d.dir(appPath, [
1142+
await d.pubspec({
1143+
'name': 'myapp',
1144+
'environment': {'sdk': '<2.2.3'}
1145+
})
1146+
]).create();
11451147

1146-
await expectResolves(
1147-
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1148-
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1149-
});
1148+
await expectResolves(
1149+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1150+
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1151+
});
11501152

1151-
test("pre-release override requires minor SDK versions to match", () async {
1152-
await d.dir(appPath, [
1153-
await d.pubspec({
1154-
'name': 'myapp',
1155-
'environment': {'sdk': '<1.3.3'}
1156-
})
1157-
]).create();
1153+
test("minor SDK versions to match", () async {
1154+
await d.dir(appPath, [
1155+
await d.pubspec({
1156+
'name': 'myapp',
1157+
'environment': {'sdk': '<1.3.3'}
1158+
})
1159+
]).create();
11581160

1159-
await expectResolves(
1160-
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1161-
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1162-
});
1161+
await expectResolves(
1162+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1163+
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1164+
});
11631165

1164-
test("pre-release override requires patch SDK versions to match", () async {
1165-
await d.dir(appPath, [
1166-
await d.pubspec({
1167-
'name': 'myapp',
1168-
'environment': {'sdk': '<1.2.4'}
1169-
})
1170-
]).create();
1166+
test("patch SDK versions to match", () async {
1167+
await d.dir(appPath, [
1168+
await d.pubspec({
1169+
'name': 'myapp',
1170+
'environment': {'sdk': '<1.2.4'}
1171+
})
1172+
]).create();
11711173

1172-
await expectResolves(
1173-
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1174-
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1175-
});
1174+
await expectResolves(
1175+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1176+
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1177+
});
11761178

1177-
test("pre-release override requires exclusive max", () async {
1178-
await d.dir(appPath, [
1179-
await d.pubspec({
1180-
'name': 'myapp',
1181-
'environment': {'sdk': '<=1.2.3'}
1182-
})
1183-
]).create();
1179+
test("exclusive max", () async {
1180+
await d.dir(appPath, [
1181+
await d.pubspec({
1182+
'name': 'myapp',
1183+
'environment': {'sdk': '<=1.2.3'}
1184+
})
1185+
]).create();
11841186

1185-
await expectResolves(
1186-
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1187-
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1188-
});
1187+
await expectResolves(
1188+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1189+
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1190+
});
11891191

1190-
test("pre-release override requires pre-release SDK", () async {
1191-
await d.dir(appPath, [
1192-
await d.pubspec({
1193-
'name': 'myapp',
1194-
'environment': {'sdk': '<1.2.3'}
1195-
})
1196-
]).create();
1192+
test("pre-release SDK", () async {
1193+
await d.dir(appPath, [
1194+
await d.pubspec({
1195+
'name': 'myapp',
1196+
'environment': {'sdk': '<1.2.3'}
1197+
})
1198+
]).create();
11971199

1198-
await expectResolves(
1199-
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3'},
1200-
error: 'Package myapp requires SDK version <1.2.3 but the current '
1201-
'SDK is 1.2.3.');
1202-
});
1200+
await expectResolves(
1201+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3'},
1202+
error: 'Package myapp requires SDK version <1.2.3 but the current '
1203+
'SDK is 1.2.3.');
1204+
});
12031205

1204-
test("pre-release override requires no existing pre-release constraints",
1205-
() async {
1206-
await d.dir(appPath, [
1207-
await d.pubspec({
1208-
'name': 'myapp',
1209-
'environment': {'sdk': '<1.2.3-dev.2.0'}
1210-
})
1211-
]).create();
1206+
test("no max pre-release constraint", () async {
1207+
await d.dir(appPath, [
1208+
await d.pubspec({
1209+
'name': 'myapp',
1210+
'environment': {'sdk': '<1.2.3-dev.2.0'}
1211+
})
1212+
]).create();
12121213

1213-
await expectResolves(
1214-
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1215-
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1216-
});
1214+
await expectResolves(
1215+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1216+
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1217+
});
12171218

1218-
test("pre-release override requires no build release constraints", () async {
1219-
await d.dir(appPath, [
1220-
await d.pubspec({
1221-
'name': 'myapp',
1222-
'environment': {'sdk': '<1.2.3+1'}
1223-
})
1224-
]).create();
1219+
test("no min pre-release constraint", () async {
1220+
await d.dir(appPath, [
1221+
await d.pubspec({
1222+
'name': 'myapp',
1223+
'environment': {'sdk': '>=1.2.3-dev.2.0 <2.0.0'}
1224+
})
1225+
]).create();
12251226

1226-
await expectResolves(
1227-
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3'},
1228-
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1229-
});
1227+
await expectResolves(
1228+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1229+
error: 'Package myapp requires SDK version >=1.2.3-dev.2.0 <2.0.0 '
1230+
'but the current SDK is 1.2.3-dev.1.0.');
1231+
});
12301232

1231-
test("pre-release override works generally", () async {
1232-
await d.dir(appPath, [
1233-
await d.pubspec({
1234-
'name': 'myapp',
1235-
'environment': {'sdk': '<1.2.3'}
1236-
})
1237-
]).create();
1233+
test("no build release constraints", () async {
1234+
await d.dir(appPath, [
1235+
await d.pubspec({
1236+
'name': 'myapp',
1237+
'environment': {'sdk': '<1.2.3+1'}
1238+
})
1239+
]).create();
12381240

1239-
await expectResolves(
1240-
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1241-
output: allOf(contains('PUB_ALLOW_PRERELEASE_SDK'),
1242-
contains('<=1.2.3-dev.1.0'), contains('myapp')));
1241+
await expectResolves(
1242+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3'},
1243+
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
1244+
});
1245+
});
1246+
1247+
test("works generally", () async {
1248+
await d.dir(appPath, [
1249+
await d.pubspec({
1250+
'name': 'myapp',
1251+
'environment': {'sdk': '<1.2.3'}
1252+
})
1253+
]).create();
1254+
1255+
await expectResolves(
1256+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1257+
output: allOf(contains('PUB_ALLOW_PRERELEASE_SDK'),
1258+
contains('<=1.2.3-dev.1.0'), contains('myapp')));
1259+
});
12431260
});
12441261
}
12451262

0 commit comments

Comments
 (0)