@@ -89,7 +89,10 @@ class DepsCommand extends PubCommand {
89
89
usageException ('Cannot combine --json and --style.' );
90
90
}
91
91
final visited = < String > [];
92
- final toVisit = [entrypoint.workspaceRoot.name];
92
+ final workspacePackageNames = [
93
+ ...entrypoint.workspaceRoot.transitiveWorkspace.map ((p) => p.name),
94
+ ];
95
+ final toVisit = [...workspacePackageNames];
93
96
final packagesJson = < dynamic > [];
94
97
final graph = await entrypoint.packageGraph;
95
98
while (toVisit.isNotEmpty) {
@@ -98,14 +101,15 @@ class DepsCommand extends PubCommand {
98
101
visited.add (current);
99
102
final currentPackage =
100
103
(await entrypoint.packageGraph).packages[current]! ;
101
- final next = (current == entrypoint.workspaceRoot.name
102
- ? entrypoint.workspaceRoot.immediateDependencies
104
+ final isRoot = workspacePackageNames.contains (currentPackage.name);
105
+ final next = (isRoot
106
+ ? currentPackage.immediateDependencies
103
107
: currentPackage.dependencies)
104
108
.keys
105
109
.toList ();
106
110
final dependencyType =
107
111
entrypoint.workspaceRoot.pubspec.dependencyType (current);
108
- final kind = currentPackage == entrypoint.workspaceRoot
112
+ final kind = isRoot
109
113
? 'root'
110
114
: (dependencyType == DependencyType .direct
111
115
? 'direct'
@@ -159,8 +163,6 @@ class DepsCommand extends PubCommand {
159
163
buffer.writeln ("${log .bold ('${sdk .name } SDK' )} ${sdk .version }" );
160
164
}
161
165
162
- buffer.writeln (_labelPackage (entrypoint.workspaceRoot));
163
-
164
166
switch (argResults['style' ]) {
165
167
case 'compact' :
166
168
await _outputCompact (buffer);
@@ -187,24 +189,32 @@ class DepsCommand extends PubCommand {
187
189
Future <void > _outputCompact (
188
190
StringBuffer buffer,
189
191
) async {
190
- var root = entrypoint.workspaceRoot;
191
- await _outputCompactPackages (
192
- 'dependencies' ,
193
- root.dependencies.keys,
194
- buffer,
195
- );
196
- if (_includeDev) {
192
+ var first = true ;
193
+ for (final root in entrypoint.workspaceRoot.transitiveWorkspace) {
194
+ if (! first) {
195
+ buffer.write ('\n ' );
196
+ }
197
+ first = false ;
198
+
199
+ buffer.writeln (_labelPackage (root));
200
+ await _outputCompactPackages (
201
+ 'dependencies' ,
202
+ root.dependencies.keys,
203
+ buffer,
204
+ );
205
+ if (_includeDev) {
206
+ await _outputCompactPackages (
207
+ 'dev dependencies' ,
208
+ root.devDependencies.keys,
209
+ buffer,
210
+ );
211
+ }
197
212
await _outputCompactPackages (
198
- 'dev dependencies ' ,
199
- root.devDependencies .keys,
213
+ 'dependency overrides ' ,
214
+ root.dependencyOverrides .keys,
200
215
buffer,
201
216
);
202
217
}
203
- await _outputCompactPackages (
204
- 'dependency overrides' ,
205
- root.dependencyOverrides.keys,
206
- buffer,
207
- );
208
218
209
219
var transitive = await _getTransitiveDependencies ();
210
220
await _outputCompactPackages ('transitive dependencies' , transitive, buffer);
@@ -240,20 +250,28 @@ class DepsCommand extends PubCommand {
240
250
/// For each dependency listed, *that* package's immediate dependencies are
241
251
/// shown.
242
252
Future <void > _outputList (StringBuffer buffer) async {
243
- var root = entrypoint.workspaceRoot;
244
- await _outputListSection ('dependencies' , root.dependencies.keys, buffer);
245
- if (_includeDev) {
253
+ var first = true ;
254
+ for (final root in entrypoint.workspaceRoot.transitiveWorkspace) {
255
+ if (! first) {
256
+ buffer.write ('\n ' );
257
+ }
258
+ first = false ;
259
+
260
+ buffer.writeln (_labelPackage (root));
261
+ await _outputListSection ('dependencies' , root.dependencies.keys, buffer);
262
+ if (_includeDev) {
263
+ await _outputListSection (
264
+ 'dev dependencies' ,
265
+ root.devDependencies.keys,
266
+ buffer,
267
+ );
268
+ }
246
269
await _outputListSection (
247
- 'dev dependencies ' ,
248
- root.devDependencies .keys,
270
+ 'dependency overrides ' ,
271
+ root.dependencyOverrides .keys,
249
272
buffer,
250
273
);
251
274
}
252
- await _outputListSection (
253
- 'dependency overrides' ,
254
- root.dependencyOverrides.keys,
255
- buffer,
256
- );
257
275
258
276
var transitive = await _getTransitiveDependencies ();
259
277
if (transitive.isEmpty) return ;
@@ -301,57 +319,66 @@ class DepsCommand extends PubCommand {
301
319
// being added to the tree, and the parent map that will receive that
302
320
// package.
303
321
var toWalk = Queue <(Package , Map <String , Map >)>();
304
- var visited = < String > {entrypoint.workspaceRoot.name };
322
+ var visited = < String > {};
305
323
306
324
// Start with the root dependencies.
307
325
var packageTree = < String , Map > {};
326
+ final workspacePackageNames = [
327
+ ...entrypoint.workspaceRoot.transitiveWorkspace.map ((p) => p.name),
328
+ ];
308
329
var immediateDependencies =
309
330
entrypoint.workspaceRoot.immediateDependencies.keys.toSet ();
310
331
if (! _includeDev) {
311
332
immediateDependencies
312
333
.removeAll (entrypoint.workspaceRoot.devDependencies.keys);
313
334
}
314
- for (var name in immediateDependencies ) {
335
+ for (var name in workspacePackageNames ) {
315
336
toWalk.add ((await _getPackage (name), packageTree));
316
337
}
317
338
318
339
// Do a breadth-first walk to the dependency graph.
319
340
while (toWalk.isNotEmpty) {
320
- var pair = toWalk.removeFirst ();
321
- var (package, map) = pair;
341
+ final (package, map) = toWalk.removeFirst ();
322
342
323
- if (visited.contains (package.name)) {
343
+ if (! visited.add (package.name)) {
324
344
map[log.gray ('${package .name }...' )] = < String , Map > {};
325
345
continue ;
326
346
}
327
347
328
- visited.add (package.name);
329
-
330
348
// Populate the map with this package's dependencies.
331
349
var childMap = < String , Map > {};
332
350
map[_labelPackage (package)] = childMap;
333
351
334
- for (var dep in package.dependencies.values) {
335
- toWalk.add ((await _getPackage (dep.name), childMap));
352
+ final isRoot = workspacePackageNames.contains (package.name);
353
+ final children = [
354
+ ...isRoot
355
+ ? package.immediateDependencies.keys
356
+ : package.dependencies.keys,
357
+ ];
358
+ if (! _includeDev) {
359
+ children.removeWhere (package.devDependencies.keys.contains);
360
+ }
361
+ for (var dep in children) {
362
+ toWalk.add ((await _getPackage (dep), childMap));
336
363
}
337
364
}
338
-
339
365
buffer.write (tree.fromMap (packageTree));
340
366
}
341
367
342
368
String _labelPackage (Package package) =>
343
369
'${log .bold (package .name )} ${package .version }' ;
344
370
345
- /// Gets the names of the non-immediate dependencies of the root package .
371
+ /// Gets the names of the non-immediate dependencies of the workspace packages .
346
372
Future <Set <String >> _getTransitiveDependencies () async {
347
373
var transitive = await _getAllDependencies ();
348
- var root = entrypoint.workspaceRoot;
349
- transitive.remove (root.name);
350
- transitive.removeAll (root.dependencies.keys);
351
- if (_includeDev) {
352
- transitive.removeAll (root.devDependencies.keys);
374
+ for (final root in entrypoint.workspaceRoot.transitiveWorkspace) {
375
+ transitive.remove (root.name);
376
+ transitive.removeAll (root.dependencies.keys);
377
+ if (_includeDev) {
378
+ transitive.removeAll (root.devDependencies.keys);
379
+ }
380
+ transitive.removeAll (root.dependencyOverrides.keys);
353
381
}
354
- transitive.removeAll (root.dependencyOverrides.keys);
355
382
return transitive;
356
383
}
357
384
@@ -361,8 +388,12 @@ class DepsCommand extends PubCommand {
361
388
return graph.packages.keys.toSet ();
362
389
}
363
390
364
- var nonDevDependencies = entrypoint.workspaceRoot.dependencies.keys.toList ()
365
- ..addAll (entrypoint.workspaceRoot.dependencyOverrides.keys);
391
+ var nonDevDependencies = [
392
+ for (final package in entrypoint.workspaceRoot.transitiveWorkspace) ...[
393
+ ...package.dependencies.keys,
394
+ ...package.dependencyOverrides.keys,
395
+ ],
396
+ ];
366
397
return nonDevDependencies
367
398
.expand (graph.transitiveDependencies)
368
399
.map ((package) => package.name)
@@ -385,14 +416,14 @@ class DepsCommand extends PubCommand {
385
416
/// Outputs all executables reachable from [entrypoint] .
386
417
Future <void > _outputExecutables (StringBuffer buffer) async {
387
418
final graph = await entrypoint.packageGraph;
388
- var packages = [
389
- entrypoint.workspaceRoot,
390
- ...(_includeDev
391
- ? entrypoint.workspaceRoot. immediateDependencies
392
- : entrypoint.workspaceRoot.dependencies)
393
- .keys
394
- . map ((name) => graph.packages[name] ! ) ,
395
- ] ;
419
+ final packages = {
420
+ for ( final p in entrypoint.workspaceRoot.transitiveWorkspace) ...[
421
+ graph.packages[p.name] ! ,
422
+ ...(_includeDev ? p. immediateDependencies : p.dependencies)
423
+ .keys
424
+ . map ((name) => graph.packages[name] ! ),
425
+ ] ,
426
+ } ;
396
427
397
428
for (var package in packages) {
398
429
var executables = package.executableNames;
0 commit comments