Skip to content

Commit 51435ef

Browse files
authored
Reland "Add flag controlling creation of .packages file." (#3413)
1 parent 1e3c17e commit 51435ef

File tree

69 files changed

+674
-364
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+674
-364
lines changed

lib/src/command/add.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ class AddCommand extends PubCommand {
9494
help: 'Build executables in immediate dependencies.');
9595
argParser.addOption('directory',
9696
abbr: 'C', help: 'Run this in the directory <dir>.', valueHelp: 'dir');
97+
argParser.addFlag('legacy-packages-file',
98+
help: 'Generate the legacy ".packages" file', negatable: false);
9799
}
98100

99101
@override
@@ -165,7 +167,8 @@ class AddCommand extends PubCommand {
165167
.acquireDependencies(SolveType.get,
166168
dryRun: true,
167169
precompile: argResults['precompile'],
168-
analytics: analytics);
170+
analytics: analytics,
171+
generateDotPackages: false);
169172
} else {
170173
/// Update the `pubspec.yaml` before calling [acquireDependencies] to
171174
/// ensure that the modification timestamp on `pubspec.lock` and
@@ -180,6 +183,7 @@ class AddCommand extends PubCommand {
180183
SolveType.get,
181184
precompile: argResults['precompile'],
182185
analytics: analytics,
186+
generateDotPackages: argResults['legacy-packages-file'],
183187
);
184188

185189
if (argResults['example'] && entrypoint.example != null) {
@@ -188,6 +192,7 @@ class AddCommand extends PubCommand {
188192
precompile: argResults['precompile'],
189193
onlyReportSuccessOrFailure: true,
190194
analytics: analytics,
195+
generateDotPackages: argResults['legacy-packages-file'],
191196
);
192197
}
193198
}

lib/src/command/downgrade.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ class DowngradeCommand extends PubCommand {
4242

4343
argParser.addOption('directory',
4444
abbr: 'C', help: 'Run this in the directory<dir>.', valueHelp: 'dir');
45+
argParser.addFlag('legacy-packages-file',
46+
help: 'Generate the legacy ".packages" file', negatable: false);
4547
}
4648

4749
@override
@@ -57,6 +59,7 @@ class DowngradeCommand extends PubCommand {
5759
unlock: argResults.rest,
5860
dryRun: dryRun,
5961
analytics: analytics,
62+
generateDotPackages: argResults['legacy-packages-file'],
6063
);
6164
var example = entrypoint.example;
6265
if (argResults['example'] && example != null) {
@@ -66,6 +69,7 @@ class DowngradeCommand extends PubCommand {
6669
dryRun: dryRun,
6770
onlyReportSuccessOrFailure: true,
6871
analytics: analytics,
72+
generateDotPackages: argResults['legacy-packages-file'],
6973
);
7074
}
7175

lib/src/command/get.dart

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ class GetCommand extends PubCommand {
3333

3434
argParser.addFlag('packages-dir', hide: true);
3535

36+
argParser.addFlag('legacy-packages-file',
37+
help: 'Generate the legacy ".packages" file', negatable: false);
38+
3639
argParser.addFlag(
3740
'example',
3841
help: 'Also run in `example/` (if it exists).',
@@ -53,16 +56,20 @@ class GetCommand extends PubCommand {
5356
SolveType.get,
5457
dryRun: argResults['dry-run'],
5558
precompile: argResults['precompile'],
59+
generateDotPackages: argResults['legacy-packages-file'],
5660
analytics: analytics,
5761
);
5862

5963
var example = entrypoint.example;
6064
if (argResults['example'] && example != null) {
61-
await example.acquireDependencies(SolveType.get,
62-
dryRun: argResults['dry-run'],
63-
precompile: argResults['precompile'],
64-
onlyReportSuccessOrFailure: true,
65-
analytics: analytics);
65+
await example.acquireDependencies(
66+
SolveType.get,
67+
dryRun: argResults['dry-run'],
68+
precompile: argResults['precompile'],
69+
generateDotPackages: argResults['legacy-packages-file'],
70+
analytics: analytics,
71+
onlyReportSuccessOrFailure: true,
72+
);
6673
}
6774
}
6875
}

lib/src/command/remove.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ class RemoveCommand extends PubCommand {
5050

5151
argParser.addOption('directory',
5252
abbr: 'C', help: 'Run this in the directory<dir>.', valueHelp: 'dir');
53+
54+
argParser.addFlag('legacy-packages-file',
55+
help: 'Generate the legacy ".packages" file', negatable: false);
5356
}
5457

5558
@override
@@ -69,7 +72,8 @@ class RemoveCommand extends PubCommand {
6972
.acquireDependencies(SolveType.get,
7073
precompile: argResults['precompile'],
7174
dryRun: true,
72-
analytics: null);
75+
analytics: null,
76+
generateDotPackages: false);
7377
} else {
7478
/// Update the pubspec.
7579
_writeRemovalToPubspec(packages);
@@ -81,6 +85,7 @@ class RemoveCommand extends PubCommand {
8185
SolveType.get,
8286
precompile: argResults['precompile'],
8387
analytics: analytics,
88+
generateDotPackages: argResults['legacy-packages-file'],
8489
);
8590

8691
var example = entrypoint.example;
@@ -90,6 +95,7 @@ class RemoveCommand extends PubCommand {
9095
precompile: argResults['precompile'],
9196
onlyReportSuccessOrFailure: true,
9297
analytics: analytics,
98+
generateDotPackages: argResults['legacy-packages-file'],
9399
);
94100
}
95101
}

lib/src/command/upgrade.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ class UpgradeCommand extends PubCommand {
5656

5757
argParser.addFlag('packages-dir', hide: true);
5858

59+
argParser.addFlag('legacy-packages-file',
60+
help: 'Generate the legacy ".packages" file', negatable: false);
61+
5962
argParser.addFlag(
6063
'major-versions',
6164
help: 'Upgrades packages to their latest resolvable versions, '
@@ -80,6 +83,8 @@ class UpgradeCommand extends PubCommand {
8083

8184
bool get _precompile => argResults['precompile'];
8285

86+
bool get _packagesFile => argResults['legacy-packages-file'];
87+
8388
bool get _upgradeNullSafety =>
8489
argResults['nullsafety'] || argResults['null-safety'];
8590

@@ -126,6 +131,7 @@ class UpgradeCommand extends PubCommand {
126131
dryRun: _dryRun,
127132
precompile: _precompile,
128133
onlyReportSuccessOrFailure: onlySummary,
134+
generateDotPackages: _packagesFile,
129135
analytics: analytics,
130136
);
131137
_showOfflineWarning();
@@ -237,6 +243,7 @@ be direct 'dependencies' or 'dev_dependencies', following packages are not:
237243
dryRun: true,
238244
precompile: _precompile,
239245
analytics: null, // No analytics for dry-run
246+
generateDotPackages: false,
240247
);
241248
} else {
242249
if (changes.isNotEmpty) {
@@ -249,6 +256,7 @@ be direct 'dependencies' or 'dev_dependencies', following packages are not:
249256
SolveType.get,
250257
precompile: _precompile,
251258
analytics: analytics,
259+
generateDotPackages: argResults['legacy-packages-file'],
252260
);
253261
}
254262

@@ -333,6 +341,7 @@ be direct 'dependencies' or 'dev_dependencies', following packages are not:
333341
dryRun: true,
334342
precompile: _precompile,
335343
analytics: null,
344+
generateDotPackages: false,
336345
);
337346
} else {
338347
if (changes.isNotEmpty) {
@@ -345,6 +354,7 @@ be direct 'dependencies' or 'dev_dependencies', following packages are not:
345354
SolveType.upgrade,
346355
precompile: _precompile,
347356
analytics: analytics,
357+
generateDotPackages: argResults['legacy-packages-file'],
348358
);
349359
}
350360

lib/src/entrypoint.dart

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -224,13 +224,17 @@ class Entrypoint {
224224
Entrypoint? _example;
225225

226226
/// Writes .packages and .dart_tool/package_config.json
227-
Future<void> writePackagesFiles() async {
227+
Future<void> writePackagesFiles({bool generateDotPackages = false}) async {
228228
final entrypointName = isGlobal ? null : root.name;
229-
writeTextFile(
230-
packagesFile,
231-
lockFile.packagesFile(cache,
232-
entrypoint: entrypointName,
233-
relativeFrom: isGlobal ? null : root.dir));
229+
if (generateDotPackages) {
230+
writeTextFile(
231+
packagesFile,
232+
lockFile.packagesFile(cache,
233+
entrypoint: entrypointName,
234+
relativeFrom: isGlobal ? null : root.dir));
235+
} else {
236+
tryDeleteEntry(packagesFile);
237+
}
234238
ensureDir(p.dirname(packageConfigFile));
235239
writeTextFile(
236240
packageConfigFile,
@@ -268,6 +272,7 @@ class Entrypoint {
268272
Iterable<String>? unlock,
269273
bool dryRun = false,
270274
bool precompile = false,
275+
required bool generateDotPackages,
271276
required PubAnalytics? analytics,
272277
bool onlyReportSuccessOrFailure = false,
273278
}) async {
@@ -341,7 +346,7 @@ class Entrypoint {
341346
/// have to reload and reparse all the pubspecs.
342347
_packageGraph = PackageGraph.fromSolveResult(this, result);
343348

344-
await writePackagesFiles();
349+
await writePackagesFiles(generateDotPackages: generateDotPackages);
345350

346351
try {
347352
if (precompile) {

lib/src/executable.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ Future<DartExecutableWithPackageConfig> getExecutableForCommand(
308308
() => entrypoint.acquireDependencies(
309309
SolveType.get,
310310
analytics: analytics,
311+
generateDotPackages: false,
311312
),
312313
);
313314
} on ApplicationException catch (e) {

lib/src/global_packages.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,11 @@ class GlobalPackages {
159159
var entrypoint = Entrypoint(path, cache);
160160

161161
// Get the package's dependencies.
162-
await entrypoint.acquireDependencies(SolveType.get, analytics: analytics);
162+
await entrypoint.acquireDependencies(
163+
SolveType.get,
164+
analytics: analytics,
165+
generateDotPackages: false,
166+
);
163167
var name = entrypoint.root.name;
164168
_describeActive(name, cache);
165169

lib/src/package_config.dart

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'dart:convert';
6+
57
import 'package:pub_semver/pub_semver.dart';
68

79
import 'language_version.dart';
@@ -160,8 +162,6 @@ class PackageConfigEntry {
160162
/// Given as `<major>.<minor>` version, similar to the `// @dart = X.Y`
161163
/// comment. This is derived from the lower-bound on the Dart SDK requirement
162164
/// in the `pubspec.yaml` for the given package.
163-
///
164-
/// `null` if not given.
165165
LanguageVersion? languageVersion;
166166

167167
/// Additional properties not in the specification for the
@@ -173,10 +173,8 @@ class PackageConfigEntry {
173173
required this.rootUri,
174174
this.packageUri,
175175
this.languageVersion,
176-
this.additionalProperties,
177-
}) {
178-
additionalProperties ??= {};
179-
}
176+
this.additionalProperties = const {},
177+
});
180178

181179
/// Create [PackageConfigEntry] from JSON [data].
182180
///
@@ -249,7 +247,13 @@ class PackageConfigEntry {
249247
Map<String, Object?> toJson() => {
250248
'name': name,
251249
'rootUri': rootUri.toString(),
252-
if (packageUri != null) 'packageUri': packageUri?.toString(),
250+
if (packageUri != null) 'packageUri': packageUri.toString(),
253251
if (languageVersion != null) 'languageVersion': '$languageVersion',
254252
}..addAll(additionalProperties ?? {});
253+
254+
@override
255+
String toString() {
256+
// TODO: implement toString
257+
return JsonEncoder.withIndent(' ').convert(toJson());
258+
}
255259
}

test/add/common/add_test.dart

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ void main() {
4646
await pubAdd(args: ['foo:1.2.3']);
4747

4848
await d.cacheDir({'foo': '1.2.3'}).validate();
49-
await d.appPackagesFile({'foo': '1.2.3'}).validate();
49+
await d.appPackageConfigFile([
50+
d.packageConfigEntry(name: 'foo', version: '1.2.3'),
51+
]).validate();
5052
await d.appDir({'foo': '1.2.3'}).validate();
5153
});
5254

@@ -62,8 +64,11 @@ void main() {
6264

6365
await d.cacheDir(
6466
{'foo': '1.2.3', 'bar': '1.1.0', 'baz': '2.5.3'}).validate();
65-
await d.appPackagesFile(
66-
{'foo': '1.2.3', 'bar': '1.1.0', 'baz': '2.5.3'}).validate();
67+
await d.appPackageConfigFile([
68+
d.packageConfigEntry(name: 'foo', version: '1.2.3'),
69+
d.packageConfigEntry(name: 'bar', version: '1.1.0'),
70+
d.packageConfigEntry(name: 'baz', version: '2.5.3'),
71+
]).validate();
6772
await d
6873
.appDir({'foo': '1.2.3', 'bar': '1.1.0', 'baz': '2.5.3'}).validate();
6974
});
@@ -90,7 +95,9 @@ void main() {
9095
await pubAdd(args: ['foo:1.2.3']);
9196

9297
await d.cacheDir({'foo': '1.2.3'}).validate();
93-
await d.appPackagesFile({'foo': '1.2.3'}).validate();
98+
await d.appPackageConfigFile([
99+
d.packageConfigEntry(name: 'foo', version: '1.2.3'),
100+
]).validate();
94101

95102
await d.dir(appPath, [
96103
d.pubspec({
@@ -136,7 +143,9 @@ void main() {
136143
await pubAdd(args: ['foo:1.2.3']);
137144

138145
await d.cacheDir({'foo': '1.2.3'}).validate();
139-
await d.appPackagesFile({'foo': '1.2.3'}).validate();
146+
await d.appPackageConfigFile([
147+
d.packageConfigEntry(name: 'foo', version: '1.2.3'),
148+
]).validate();
140149
await d.appDir({'foo': '1.2.3'}).validate();
141150
});
142151

@@ -217,7 +226,9 @@ environment:
217226
'adding it to dependencies instead.'));
218227

219228
await d.cacheDir({'foo': '1.2.3'}).validate();
220-
await d.appPackagesFile({'foo': '1.2.3'}).validate();
229+
await d.appPackageConfigFile([
230+
d.packageConfigEntry(name: 'foo', version: '1.2.3'),
231+
]).validate();
221232

222233
await d.dir(appPath, [
223234
d.pubspec({
@@ -244,7 +255,9 @@ environment:
244255
await pubAdd(args: ['foo']);
245256

246257
await d.cacheDir({'foo': '1.2.2'}).validate();
247-
await d.appPackagesFile({'foo': '1.2.2'}).validate();
258+
await d.appPackageConfigFile([
259+
d.packageConfigEntry(name: 'foo', version: '1.2.2'),
260+
]).validate();
248261
await d.dir(appPath, [
249262
d.pubspec({
250263
'name': 'myapp',
@@ -456,7 +469,9 @@ environment:
456469

457470
await pubAdd(args: ['--dev', 'foo:1.2.3']);
458471

459-
await d.appPackagesFile({'foo': '1.2.3'}).validate();
472+
await d.appPackageConfigFile([
473+
d.packageConfigEntry(name: 'foo', version: '1.2.3'),
474+
]).validate();
460475

461476
await d.dir(appPath, [
462477
d.pubspec({
@@ -566,7 +581,9 @@ environment:
566581
await pubAdd(args: ['foo', '--dev']);
567582

568583
await d.cacheDir({'foo': '1.2.2'}).validate();
569-
await d.appPackagesFile({'foo': '1.2.2'}).validate();
584+
await d.appPackageConfigFile([
585+
d.packageConfigEntry(name: 'foo', version: '1.2.2'),
586+
]).validate();
570587
await d.dir(appPath, [
571588
d.pubspec({
572589
'name': 'myapp',

0 commit comments

Comments
 (0)