Skip to content

Commit 146c74f

Browse files
committed
test fix
1 parent 011bc93 commit 146c74f

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

lib/src/solver/version_solver.dart

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -396,23 +396,39 @@ class VersionSolver {
396396
return null; // when unsatisfied.isEmpty
397397
}
398398

399-
bool isDirectAndStable(String packageName) {
400-
final dep = _root.pubspec.dependencies[packageName];
401-
if (dep == null) return false; // not a direct dependency
402-
final constraint = dep.constraint;
403-
if (constraint is Version) {
404-
return !constraint.isPreRelease;
399+
// Prereleases are allowed only if the dependency is transitive, or if
400+
// the constraint explicitly allows prereleases.
401+
bool shouldAllowPrereleases(String packageName) {
402+
final workspaces = [_root, ..._root.workspaceChildren];
403+
bool constraintContainsPrerelease(VersionConstraint? constraint) {
404+
if (constraint is Version) {
405+
return constraint.isPreRelease;
406+
}
407+
if (constraint is VersionRange) {
408+
return (constraint.min != null && constraint.min!.isPreRelease) ||
409+
(constraint.max != null && constraint.max!.isPreRelease) ||
410+
constraint.isAny;
411+
}
412+
return false;
405413
}
406-
if (constraint is VersionRange && constraint.min != null) {
407-
return !constraint.min!.isPreRelease;
414+
var isDirectOrDev = false;
415+
for (final workspace in workspaces) {
416+
final directDep = workspace.dependencies[packageName];
417+
if (directDep != null && constraintContainsPrerelease(directDep.constraint)) {
418+
return true;
419+
}
420+
final devDep = workspace.devDependencies[packageName];
421+
if (devDep != null && constraintContainsPrerelease(devDep.constraint)) {
422+
return true;
423+
}
424+
isDirectOrDev = isDirectOrDev || directDep != null || devDep != null;
408425
}
409-
return false;
426+
return !isDirectOrDev;
410427
}
411428

412429
PackageId? version;
413430
try {
414-
// Prereleases are allowed only if not direct or not stable.
415-
final allowPrereleases = !isDirectAndStable(package.name);
431+
final allowPrereleases = shouldAllowPrereleases(package.name);
416432
version = await _packageLister(
417433
package,
418434
).bestVersion(package.constraint, allowPrereleases: allowPrereleases);

0 commit comments

Comments
 (0)