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
diff --git a/lib/src/pubspec.dart b/lib/src/pubspec.dart
index 9fb64fb..ae5935e 100644
--- a/lib/src/pubspec.dart
+++ b/lib/src/pubspec.dart
@@ -391,7 +391,11 @@
     if (!allowPreReleaseSdk) return false;
     if (!sdk.version.isPreRelease) return false;
     if (sdkConstraint.includeMax) return false;
-    if (sdkConstraint.min != null && sdkConstraint.min.isPreRelease) {
+    if (sdkConstraint.min != null &&
+        sdkConstraint.min.isPreRelease &&
+        sdkConstraint.min.major == sdk.version.major &&
+        sdkConstraint.min.minor == sdk.version.minor &&
+        sdkConstraint.min.patch == sdk.version.patch) {
       return false;
     }
     if (sdkConstraint.max == null) return false;
diff --git a/test/version_solver_test.dart b/test/version_solver_test.dart
index 18f9786..04f7d14 100644
--- a/test/version_solver_test.dart
+++ b/test/version_solver_test.dart
@@ -1216,18 +1216,18 @@
             output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
       });
 
-      test("no min pre-release constraint", () async {
+      test("no min pre-release constraint that matches the current SDK",
+          () async {
         await d.dir(appPath, [
           await d.pubspec({
             'name': 'myapp',
-            'environment': {'sdk': '>=1.2.3-dev.2.0 <2.0.0'}
+            'environment': {'sdk': '>=1.2.3-dev.2.0 <1.2.3'}
           })
         ]).create();
 
         await expectResolves(
-            environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
-            error: 'Package myapp requires SDK version >=1.2.3-dev.2.0 <2.0.0 '
-                'but the current SDK is 1.2.3-dev.1.0.');
+            environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.3.0'},
+            output: isNot(contains('PUB_ALLOW_PRERELEASE_SDK')));
       });
 
       test("no build release constraints", () async {
@@ -1244,18 +1244,34 @@
       });
     });
 
-    test("works generally", () async {
-      await d.dir(appPath, [
-        await d.pubspec({
-          'name': 'myapp',
-          'environment': {'sdk': '<1.2.3'}
-        })
-      ]).create();
+    group("allows", () {
+      test("an exclusive max that matches the current SDK", () async {
+        await d.dir(appPath, [
+          await d.pubspec({
+            'name': 'myapp',
+            'environment': {'sdk': '<1.2.3'}
+          })
+        ]).create();
 
-      await expectResolves(
-          environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
-          output: allOf(contains('PUB_ALLOW_PRERELEASE_SDK'),
-              contains('<=1.2.3-dev.1.0'), contains('myapp')));
+        await expectResolves(
+            environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
+            output: allOf(contains('PUB_ALLOW_PRERELEASE_SDK'),
+                contains('<=1.2.3-dev.1.0'), contains('myapp')));
+      });
+
+      test("a pre-release min that doesn't match the current SDK", () async {
+        await d.dir(appPath, [
+          await d.pubspec({
+            'name': 'myapp',
+            'environment': {'sdk': '>=1.0.0-dev.1.0 <1.2.3'}
+          })
+        ]).create();
+
+        await expectResolves(
+            environment: {'_PUB_TEST_SDK_VERSION': '1.2.3-dev.1.0'},
+            output: allOf(contains('PUB_ALLOW_PRERELEASE_SDK'),
+                contains('<=1.2.3-dev.1.0'), contains('myapp')));
+      });
     });
   });
 }