Skip to content

Commit 935bec6

Browse files
authored
Move hasMultipleVersions to Description (#4576)
1 parent 99e84bc commit 935bec6

File tree

11 files changed

+32
-15
lines changed

11 files changed

+32
-15
lines changed

lib/src/command/add.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ Specify multiple sdk packages with descriptors.''');
714714
final description = pubspecDescription(
715715
ref.withConstraint(
716716
constraint ??
717-
(ref.source is HostedSource
717+
(ref.description.hasMultipleVersions
718718
? VersionConstraint.compatibleWith(resultId.version)
719719
: VersionConstraint.any),
720720
),

lib/src/command/upgrade.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import '../package_name.dart';
1717
import '../pubspec.dart';
1818
import '../pubspec_utils.dart';
1919
import '../solver.dart';
20-
import '../source/hosted.dart';
2120
import '../utils.dart';
2221

2322
/// Handles the `upgrade` pub command.
@@ -248,11 +247,11 @@ be direct 'dependencies' or 'dev_dependencies', following packages are not:
248247
// Mapping from original to changed value.
249248
var changes = <Package, Map<PackageRange, PackageRange>>{};
250249
for (final package in entrypoint.workspaceRoot.transitiveWorkspace) {
251-
final declaredHostedDependencies = [
250+
final declaredUpgradableDependencies = [
252251
...package.dependencies.values,
253252
...package.devDependencies.values,
254-
].where((dep) => dep.source is HostedSource);
255-
for (final dep in declaredHostedDependencies) {
253+
].where((dep) => dep.description.hasMultipleVersions);
254+
for (final dep in declaredUpgradableDependencies) {
256255
final resolvedPackage = resolvedPackages[dep.name]!;
257256
if (!toUpgrade.contains(dep.name)) {
258257
// If we're not trying to upgrade this package, or it wasn't in the

lib/src/package_name.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class PackageRange {
174174
bool get _showVersionConstraint {
175175
if (isRoot) return false;
176176
if (!constraint.isAny) return true;
177-
return description.source.hasMultipleVersions;
177+
return description.hasMultipleVersions;
178178
}
179179

180180
/// Returns a copy of `this` with the same semantics, but with a `^`-style

lib/src/solver/version_solver.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,10 @@ class VersionSolver {
586586
// can't be downgraded.
587587
if (_type == SolveType.downgrade) {
588588
final locked = _lockFile.packages[package];
589-
if (locked != null && !locked.source.hasMultipleVersions) return locked;
589+
if (locked != null &&
590+
!locked.description.description.hasMultipleVersions) {
591+
return locked;
592+
}
590593
}
591594

592595
if (_unlock.isEmpty || _unlock.contains(package)) return null;

lib/src/source.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,6 @@ abstract class Source {
5151
/// all sources.
5252
String get name;
5353

54-
/// Whether this source can choose between multiple versions of the same
55-
/// package during version solving.
56-
///
57-
/// Defaults to `false`.
58-
bool get hasMultipleVersions => false;
59-
6054
/// Parses a [PackageRef] from a name and a user-provided [description].
6155
///
6256
/// When a [Pubspec] is parsed, it reads in the description for each
@@ -190,6 +184,11 @@ abstract class Source {
190184
/// with a version constraint.
191185
abstract class Description {
192186
Source get source;
187+
188+
/// Whether the source can choose between multiple versions of this
189+
/// package during version solving.
190+
bool get hasMultipleVersions;
191+
193192
Object? serializeForPubspec({
194193
required String? containingDir,
195194
required LanguageVersion languageVersion,

lib/src/source/git.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,9 @@ class GitDescription extends Description {
892892
}
893893
return p.prettyUri(url);
894894
}
895+
896+
@override
897+
bool get hasMultipleVersions => false;
895898
}
896899

897900
class ResolvedGitDescription extends ResolvedDescription {

lib/src/source/hosted.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,6 @@ class HostedSource extends CachedSource {
123123

124124
@override
125125
final name = 'hosted';
126-
@override
127-
final hasMultipleVersions = true;
128126

129127
static String pubDevUrl = 'https://pub.dev';
130128
static String pubDartlangUrl = 'https://pub.dartlang.org';
@@ -1818,6 +1816,9 @@ class HostedDescription extends Description {
18181816

18191817
@override
18201818
HostedSource get source => HostedSource.instance;
1819+
1820+
@override
1821+
bool get hasMultipleVersions => true;
18211822
}
18221823

18231824
class ResolvedHostedDescription extends ResolvedDescription {

lib/src/source/path.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,9 @@ class PathDescription extends Description {
313313

314314
@override
315315
int get hashCode => _canonicalizedPath.hashCode;
316+
317+
@override
318+
bool get hasMultipleVersions => false;
316319
}
317320

318321
class ResolvedPathDescription extends ResolvedDescription {

lib/src/source/root.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,7 @@ class RootDescription extends Description {
119119

120120
@override
121121
int get hashCode => 'root'.hashCode;
122+
123+
@override
124+
bool get hasMultipleVersions => false;
122125
}

lib/src/source/sdk.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,9 @@ class SdkDescription extends Description {
188188
bool operator ==(Object other) {
189189
return other is SdkDescription && other.sdk == sdk;
190190
}
191+
192+
@override
193+
bool get hasMultipleVersions => false;
191194
}
192195

193196
class ResolvedSdkDescription extends ResolvedDescription {

lib/src/source/unknown.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ class UnknownDescription extends Description {
111111

112112
@override
113113
int get hashCode => Object.hash(source.name, json.encode(description));
114+
115+
@override
116+
bool get hasMultipleVersions => false;
114117
}
115118

116119
class ResolvedUnknownDescription extends ResolvedDescription {

0 commit comments

Comments
 (0)