Skip to content

Commit 64c5f40

Browse files
nex3munificent
authored andcommitted
Fix another bug in SDK override logic (#1782)
We'd previously been disabling SDK overrides any time the minimum constraint was a pre-release version, whether or not that version had anything to do with the SDK. We not only disable the overrides when the minimum constraint is a pre-release version *of the current SDK*. Closes #1781 Closes #1780 See dart-lang/sdk#31926 See dart-lang/sdk#31940
1 parent 9b21c14 commit 64c5f40

File tree

2 files changed

+37
-17
lines changed

2 files changed

+37
-17
lines changed

lib/src/pubspec.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,11 @@ 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) {
394+
if (sdkConstraint.min != null &&
395+
sdkConstraint.min.isPreRelease &&
396+
sdkConstraint.min.major == sdk.version.major &&
397+
sdkConstraint.min.minor == sdk.version.minor &&
398+
sdkConstraint.min.patch == sdk.version.patch) {
395399
return false;
396400
}
397401
if (sdkConstraint.max == null) return false;

test/version_solver_test.dart

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1216,18 +1216,18 @@ void dartSdkConstraint() {
12161216
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
12171217
});
12181218

1219-
test("no min pre-release constraint", () async {
1219+
test("no min pre-release constraint that matches the current SDK",
1220+
() async {
12201221
await d.dir(appPath, [
12211222
await d.pubspec({
12221223
'name': 'myapp',
1223-
'environment': {'sdk': '>=1.2.3-dev.2.0 <2.0.0'}
1224+
'environment': {'sdk': '>=1.2.3-dev.2.0 <1.2.3'}
12241225
})
12251226
]).create();
12261227

12271228
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.');
1229+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.3.0'},
1230+
output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
12311231
});
12321232

12331233
test("no build release constraints", () async {
@@ -1244,18 +1244,34 @@ void dartSdkConstraint() {
12441244
});
12451245
});
12461246

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();
1247+
group("allows", () {
1248+
test("an exclusive max that matches the current SDK", () async {
1249+
await d.dir(appPath, [
1250+
await d.pubspec({
1251+
'name': 'myapp',
1252+
'environment': {'sdk': '<1.2.3'}
1253+
})
1254+
]).create();
12541255

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')));
1256+
await expectResolves(
1257+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1258+
output: allOf(contains('PUB_ALLOW_PRERELEASE_SDK'),
1259+
contains('<=1.2.3-dev.1.0'), contains('myapp')));
1260+
});
1261+
1262+
test("a pre-release min that doesn't match the current SDK", () async {
1263+
await d.dir(appPath, [
1264+
await d.pubspec({
1265+
'name': 'myapp',
1266+
'environment': {'sdk': '>=1.0.0-dev.1.0 <1.2.3'}
1267+
})
1268+
]).create();
1269+
1270+
await expectResolves(
1271+
environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
1272+
output: allOf(contains('PUB_ALLOW_PRERELEASE_SDK'),
1273+
contains('<=1.2.3-dev.1.0'), contains('myapp')));
1274+
});
12591275
});
12601276
});
12611277
}

0 commit comments

Comments
 (0)