Skip to content

Commit 9941c1f

Browse files
authored
Fix broken simplification of prerelease constraints (#3078)
1 parent f0cdfa2 commit 9941c1f

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

lib/src/package_name.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,7 @@ class PackageRange extends PackageName {
268268
if (!range.includeMin) return this;
269269
if (range.includeMax) return this;
270270
if (range.min == null) return this;
271-
if (range.max == range.min.nextBreaking.firstPreRelease ||
272-
(range.min.isPreRelease && range.max == range.min.nextBreaking)) {
271+
if (range.max == range.min.nextBreaking.firstPreRelease) {
273272
return withConstraint(VersionConstraint.compatibleWith(range.min));
274273
} else {
275274
return this;

test/version_solver_test.dart

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1759,6 +1759,44 @@ void prerelease() {
17591759
'c': '1.0.0',
17601760
});
17611761
});
1762+
1763+
test('https://github.com/dart-lang/pub/issues/3057 regression', () async {
1764+
// This used to cause an infinite loop.
1765+
await servePackages((builder) {
1766+
builder.serve('a', '0.12.0', deps: {});
1767+
builder.serve('b', '0.1.0', deps: {'c': '2.0.0'});
1768+
builder.serve('b', '0.9.0-1', deps: {'c': '^1.6.0'});
1769+
builder.serve('b', '0.10.0', deps: {'a': '1.0.0'});
1770+
builder.serve('b', '0.17.0', deps: {'a': '1.0.0'});
1771+
builder.serve('c', '2.0.1', deps: {});
1772+
});
1773+
1774+
await d.appDir(
1775+
{
1776+
'a': '0.12.0',
1777+
'b': 'any',
1778+
},
1779+
).create();
1780+
await expectResolves(
1781+
error: contains(
1782+
'So, because myapp depends on both a 0.12.0 and b any, version solving failed.'),
1783+
tries: 2);
1784+
});
1785+
1786+
test('https://github.com/dart-lang/pub/pull/3038 regression', () async {
1787+
await servePackages((builder) {
1788+
builder.serve('a', '1.1.0', deps: {'b': '^1.0.0'});
1789+
builder.serve('b', '1.0.0', deps: {'c': '^1.0.0'});
1790+
builder.serve('c', '0.9.0');
1791+
builder.serve('b', '1.1.0-alpha');
1792+
builder.serve('a', '1.0.0', deps: {'b': '^1.1.0-alpha'});
1793+
});
1794+
1795+
await d.appDir({
1796+
'a': '^1.0.0',
1797+
}).create();
1798+
await expectResolves(tries: 2);
1799+
});
17621800
}
17631801

17641802
void override() {

0 commit comments

Comments
 (0)