Skip to content

Commit fdf7b48

Browse files
committed
Improve circular dependency overrides.
When a dependency is overridden, any dependency it has back on the root package is now ignored. This makes it easier for users to develop one portion of a circular dependency. Closes #1443 [email protected] Review URL: https://codereview.chromium.org//2276943003 .
1 parent 83fc6eb commit fdf7b48

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

lib/src/solver/backtracking_solver.dart

+7
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,13 @@ class BacktrackingSolver {
579579
} else {
580580
// Ignore any overridden dependencies.
581581
deps.removeWhere((dep) => _overrides.containsKey(dep.name));
582+
583+
// If an overridden dependency depends on the root package, ignore that
584+
// dependency. This ensures that users can work on the next version of one
585+
// side of a circular dependency easily.
586+
if (_overrides.containsKey(id.name)) {
587+
deps.removeWhere((dep) => dep.name == root.name);
588+
}
582589
}
583590

584591
// Make sure the package doesn't have any bad dependencies.

test/version_solver_test.dart

+17-1
Original file line numberDiff line numberDiff line change
@@ -1216,7 +1216,7 @@ void override() {
12161216
'- myapp depends on version >=1.0.0 <2.0.0');
12171217
});
12181218

1219-
integration('override a bad source without error', () {
1219+
integration('overrides a bad source without error', () {
12201220
servePackages((builder) {
12211221
builder.serve('foo', '0.0.0');
12221222
});
@@ -1231,6 +1231,22 @@ void override() {
12311231

12321232
expectResolves(result: {'foo': '0.0.0'});
12331233
});
1234+
1235+
integration('overrides an unmatched root dependency', () {
1236+
servePackages((builder) {
1237+
builder.serve('foo', '0.0.0', deps: {'myapp': '1.0.0'});
1238+
});
1239+
1240+
d.dir(appPath, [
1241+
d.pubspec({
1242+
'name': 'myapp',
1243+
'version': '2.0.0',
1244+
'dependency_overrides': {'foo': 'any'}
1245+
})
1246+
]).create();
1247+
1248+
expectResolves(result: {'foo': '0.0.0'});
1249+
});
12341250
}
12351251

12361252
void downgrade() {

0 commit comments

Comments
 (0)