Show file size (#3509)
diff --git a/lib/src/ascii_tree.dart b/lib/src/ascii_tree.dart
index 302607f..1ab8a23 100644
--- a/lib/src/ascii_tree.dart
+++ b/lib/src/ascii_tree.dart
@@ -3,12 +3,19 @@
// BSD-style license that can be found in the LICENSE file.
/// A simple library for rendering tree-like structures in ASCII.
+import 'dart:io';
+
import 'package:path/path.dart' as path;
import 'log.dart' as log;
import 'utils.dart';
-/// Draws a tree for the given list of files. Given files like:
+/// Draws a tree for the given list of files
+///
+/// Shows each file with the file size if [showFileSize] is `true`.
+/// This will stats each file in the list for finding the size.
+///
+/// Given files like:
///
/// TODO
/// example/console_example.dart
@@ -16,11 +23,6 @@
/// example/web copy/web_example.dart
/// test/absolute_test.dart
/// test/basename_test.dart
-/// test/dirname_test.dart
-/// test/extension_test.dart
-/// test/is_absolute_test.dart
-/// test/is_relative_test.dart
-/// test/join_test.dart
/// test/normalize_test.dart
/// test/relative_test.dart
/// test/split_test.dart
@@ -34,48 +36,52 @@
///
/// this renders:
///
-/// |-- .gitignore
-/// |-- README.md
-/// |-- TODO
+/// |-- .gitignore (1 KB)
+/// |-- README.md (23 KB)
+/// |-- TODO (1 MB)
/// |-- example
-/// | |-- console_example.dart
-/// | |-- main.dart
+/// | |-- console_example.dart (20 B)
+/// | |-- main.dart (200 B)
/// | '-- web copy
-/// | '-- web_example.dart
+/// | '-- web_example.dart (3 KB)
/// |-- lib
-/// | '-- path.dart
-/// |-- pubspec.yaml
+/// | '-- path.dart (4 KB)
+/// |-- pubspec.yaml (10 KB)
/// '-- test
-/// |-- absolute_test.dart
-/// |-- all_test.dart
-/// |-- basename_test.dart
-/// | (7 more...)
-/// |-- path_windows_test.dart
-/// |-- relative_test.dart
-/// '-- split_test.dart
+/// |-- absolute_test.dart (102 KB)
+/// |-- all_test.dart (100 KB)
+/// |-- basename_test.dart (4 KB)
+/// |-- path_windows_test.dart (2 KB)
+/// |-- relative_test.dart (10 KB)
+/// '-- split_test.dart (50 KB)
///
/// If [baseDir] is passed, it will be used as the root of the tree.
-///
-/// If [showAllChildren] is `false`, then directories with more than ten items
-/// will have their contents truncated. Defaults to `false`.
+
String fromFiles(
List<String> files, {
String? baseDir,
- bool showAllChildren = false,
+ required bool showFileSizes,
}) {
// Parse out the files into a tree of nested maps.
var root = <String, Map>{};
for (var file in files) {
- if (baseDir != null) file = path.relative(file, from: baseDir);
+ final relativeFile =
+ baseDir == null ? file : path.relative(file, from: baseDir);
+ final parts = path.split(relativeFile);
+ if (showFileSizes) {
+ final size = File(path.normalize(file)).statSync().size;
+ final sizeString = _readableFileSize(size);
+ parts.last = '${parts.last} $sizeString';
+ }
var directory = root;
- for (var part in path.split(file)) {
+ for (var part in parts) {
directory = directory.putIfAbsent(part, () => <String, Map>{})
as Map<String, Map>;
}
}
// Walk the map recursively and render to a string.
- return fromMap(root, showAllChildren: showAllChildren);
+ return fromMap(root);
}
/// Draws a tree from a nested map. Given a map like:
@@ -99,12 +105,9 @@
/// barback
///
/// Items with no children should have an empty map as the value.
-///
-/// If [showAllChildren] is `false`, then directories with more than ten items
-/// will have their contents truncated. Defaults to `false`.
-String fromMap(Map<String, Map> map, {bool showAllChildren = false}) {
+String fromMap(Map<String, Map> map) {
var buffer = StringBuffer();
- _draw(buffer, '', null, map, showAllChildren: showAllChildren);
+ _draw(buffer, '', null, map);
return buffer.toString();
}
@@ -155,25 +158,19 @@
showAllChildren: showAllChildren, isLast: isLastChild);
}
- if (name == null || showAllChildren || childNames.length <= 10) {
- // Not too many, so show all the children.
- for (var i = 0; i < childNames.length; i++) {
- drawChild(i == childNames.length - 1, childNames[i]);
- }
+ for (var i = 0; i < childNames.length; i++) {
+ drawChild(i == childNames.length - 1, childNames[i]);
+ }
+}
+
+String _readableFileSize(int size) {
+ if (size >= 1 << 30) {
+ return log.red('(${size ~/ (1 << 30)} GB)');
+ } else if (size >= 1 << 20) {
+ return log.yellow('(${size ~/ (1 << 20)} MB)');
+ } else if (size >= 1 << 10) {
+ return log.gray('(${size ~/ (1 << 10)} KB)');
} else {
- // Show the first few.
- drawChild(false, childNames[0]);
- drawChild(false, childNames[1]);
- drawChild(false, childNames[2]);
-
- // Elide the middle ones.
- buffer.write(prefix);
- buffer.write(_getPrefix(false, isLast));
- buffer.writeln(log.gray('| (${childNames.length - 6} more...)'));
-
- // Show the last few.
- drawChild(false, childNames[childNames.length - 3]);
- drawChild(false, childNames[childNames.length - 2]);
- drawChild(true, childNames[childNames.length - 1]);
+ return log.gray('(<1 KB)');
}
}
diff --git a/lib/src/command/deps.dart b/lib/src/command/deps.dart
index c860f02..a4203ab 100644
--- a/lib/src/command/deps.dart
+++ b/lib/src/command/deps.dart
@@ -287,7 +287,7 @@
}
}
- _buffer.write(tree.fromMap(packageTree, showAllChildren: true));
+ _buffer.write(tree.fromMap(packageTree));
}
String _labelPackage(Package package) =>
diff --git a/lib/src/command/lish.dart b/lib/src/command/lish.dart
index 69c1c7e..2185110 100644
--- a/lib/src/command/lish.dart
+++ b/lib/src/command/lish.dart
@@ -226,7 +226,7 @@
var package = entrypoint.root;
log.message(
'Publishing ${package.name} ${package.version} to $host:\n'
- '${tree.fromFiles(files, baseDir: entrypoint.root.dir, showAllChildren: true)}',
+ '${tree.fromFiles(files, baseDir: entrypoint.root.dir, showFileSizes: true)}',
);
var packageBytesFuture =
diff --git a/test/ascii_tree_test.dart b/test/ascii_tree_test.dart
index 5d82d49..a4b0163 100644
--- a/test/ascii_tree_test.dart
+++ b/test/ascii_tree_test.dart
@@ -3,240 +3,102 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:pub/src/ascii_tree.dart' as tree;
+import 'package:pub/src/package.dart';
+import 'package:pub/src/utils.dart';
import 'package:test/test.dart';
+import 'descriptor.dart';
+import 'golden_file.dart';
+import 'test_pub.dart';
+
/// Removes ansi color codes from [s].
String stripColors(String s) {
return s.replaceAll(RegExp('\u001b\\[.*?m'), '');
}
void main() {
- group('tree.fromFiles', () {
- test('no files', () {
- expect(stripColors(tree.fromFiles([])), equals(''));
- });
-
- test('up to ten files in one directory are shown', () {
- var files = [
- 'dir/a.dart',
- 'dir/b.dart',
- 'dir/c.dart',
- 'dir/d.dart',
- 'dir/e.dart',
- 'dir/f.dart',
- 'dir/g.dart',
- 'dir/h.dart',
- 'dir/i.dart',
- 'dir/j.dart'
- ];
- expect(stripColors(tree.fromFiles(files)), equals("""
-'-- dir
- |-- a.dart
- |-- b.dart
- |-- c.dart
- |-- d.dart
- |-- e.dart
- |-- f.dart
- |-- g.dart
- |-- h.dart
- |-- i.dart
- '-- j.dart
-"""));
- });
-
- test('files are elided if there are more than ten', () {
- var files = [
- 'dir/a.dart',
- 'dir/b.dart',
- 'dir/c.dart',
- 'dir/d.dart',
- 'dir/e.dart',
- 'dir/f.dart',
- 'dir/g.dart',
- 'dir/h.dart',
- 'dir/i.dart',
- 'dir/j.dart',
- 'dir/k.dart'
- ];
- expect(stripColors(tree.fromFiles(files)), equals("""
-'-- dir
- |-- a.dart
- |-- b.dart
- |-- c.dart
- | (5 more...)
- |-- i.dart
- |-- j.dart
- '-- k.dart
-"""));
- });
-
- test('files are not elided at the top level', () {
- var files = [
- 'a.dart',
- 'b.dart',
- 'c.dart',
- 'd.dart',
- 'e.dart',
- 'f.dart',
- 'g.dart',
- 'h.dart',
- 'i.dart',
- 'j.dart',
- 'k.dart'
- ];
- expect(stripColors(tree.fromFiles(files)), equals("""
-|-- a.dart
-|-- b.dart
-|-- c.dart
-|-- d.dart
-|-- e.dart
-|-- f.dart
-|-- g.dart
-|-- h.dart
-|-- i.dart
-|-- j.dart
-'-- k.dart
-"""));
- });
-
- test('a complex example', () {
- var files = [
- 'TODO',
- 'example/console_example.dart',
- 'example/main.dart',
- 'example/web copy/web_example.dart',
- 'test/absolute_test.dart',
- 'test/basename_test.dart',
- 'test/dirname_test.dart',
- 'test/extension_test.dart',
- 'test/is_absolute_test.dart',
- 'test/is_relative_test.dart',
- 'test/join_test.dart',
- 'test/normalize_test.dart',
- 'test/relative_test.dart',
- 'test/split_test.dart',
- '.gitignore',
- 'README.md',
- 'lib/path.dart',
- 'pubspec.yaml',
- 'test/all_test.dart',
- 'test/path_posix_test.dart',
- 'test/path_windows_test.dart'
- ];
-
- expect(stripColors(tree.fromFiles(files)), equals("""
-|-- .gitignore
-|-- README.md
-|-- TODO
-|-- example
-| |-- console_example.dart
-| |-- main.dart
-| '-- web copy
-| '-- web_example.dart
-|-- lib
-| '-- path.dart
-|-- pubspec.yaml
-'-- test
- |-- absolute_test.dart
- |-- all_test.dart
- |-- basename_test.dart
- | (7 more...)
- |-- path_windows_test.dart
- |-- relative_test.dart
- '-- split_test.dart
-"""));
- });
+ setUp(() {
+ forceColors = ForceColorOption.always;
});
- group('treeFromMap', () {
- test('empty map', () {
- expect(stripColors(tree.fromMap({})), equals(''));
- });
-
- test('a complex example', () {
- var map = {
- '.gitignore': <String, Map>{},
- 'README.md': <String, Map>{},
- 'TODO': <String, Map>{},
- 'example': {
- 'console_example.dart': <String, Map>{},
- 'main.dart': <String, Map>{},
- 'web copy': {'web_example.dart': <String, Map>{}},
- },
- 'lib': {'path.dart': <String, Map>{}},
- 'pubspec.yaml': <String, Map>{},
- 'test': {
- 'absolute_test.dart': <String, Map>{},
- 'basename_test.dart': <String, Map>{},
- 'dirname_test.dart': <String, Map>{},
- 'extension_test.dart': <String, Map>{},
- 'is_absolute_test.dart': <String, Map>{},
- 'is_relative_test.dart': <String, Map>{},
- 'join_test.dart': <String, Map>{},
- 'normalize_test.dart': <String, Map>{},
- 'relative_test.dart': <String, Map>{},
- 'split_test.dart': <String, Map>{}
- }
- };
-
- expect(stripColors(tree.fromMap(map)), equals("""
-|-- .gitignore
-|-- README.md
-|-- TODO
-|-- example
-| |-- console_example.dart
-| |-- main.dart
-| '-- web copy
-| '-- web_example.dart
-|-- lib
-| '-- path.dart
-|-- pubspec.yaml
-'-- test
- |-- absolute_test.dart
- |-- basename_test.dart
- |-- dirname_test.dart
- |-- extension_test.dart
- |-- is_absolute_test.dart
- |-- is_relative_test.dart
- |-- join_test.dart
- |-- normalize_test.dart
- |-- relative_test.dart
- '-- split_test.dart
-"""));
- });
+ tearDown(() {
+ forceColors = ForceColorOption.auto;
+ });
+ test('tree.fromFiles no files', () {
+ expect(tree.fromFiles([], showFileSizes: true), equals(''));
});
- test('does not elide children if showAllChildren is true', () {
+ List<int> bytes(int size) => List.filled(size, 0);
+ testWithGolden('tree.fromFiles a complex example', colors: true, (ctx) async {
+ await dir(appPath, [
+ libPubspec('app', '1.0.0'),
+ file('TODO', bytes(10)),
+ dir('example', [
+ file('console_example.dart', bytes(1000)),
+ file('main.dart', bytes(1024)),
+ dir('web copy', [
+ file('web_example.dart', bytes(1025)),
+ ]),
+ ]),
+ dir('test', [
+ file('absolute_test.dart', bytes(0)),
+ file('basename_test.dart', bytes(1 << 20)),
+ file('dirname_test.dart', bytes((1 << 20) + 1)),
+ file('extension_test.dart', bytes(2300)),
+ file('is_absolute_test.dart', bytes(2400)),
+ file('is_relative_test.dart', bytes((1 << 20) * 25)),
+ file('join_test.dart', bytes(1023)),
+ file('normalize_test.dart', bytes((1 << 20) - 1)),
+ file('relative_test.dart', bytes(100)),
+ file('split_test.dart', bytes(1)),
+ file('all_test.dart', bytes(100)),
+ file('path_posix_test.dart', bytes(100)),
+ file('path_windows_test.dart', bytes(100)),
+ ]),
+ file('.gitignore', bytes(100)),
+ file('README.md', bytes(100)),
+ dir('lib', [
+ file('path.dart', bytes(100)),
+ ]),
+ ]).create();
+ var files = Package.load(
+ null,
+ path(appPath),
+ (name) => throw UnimplementedError(),
+ ).listFiles();
+ ctx.expectNextSection(
+ tree.fromFiles(files, baseDir: path(appPath), showFileSizes: true));
+ });
+ test('tree.fromMap empty map', () {
+ expect(tree.fromMap({}), equals(''));
+ });
+
+ testWithGolden('tree.fromMap a complex example', colors: true, (ctx) {
var map = {
- 'dir': {
- 'a.dart': <String, Map>{},
- 'b.dart': <String, Map>{},
- 'c.dart': <String, Map>{},
- 'd.dart': <String, Map>{},
- 'e.dart': <String, Map>{},
- 'f.dart': <String, Map>{},
- 'g.dart': <String, Map>{},
- 'h.dart': <String, Map>{},
- 'i.dart': <String, Map>{},
- 'j.dart': <String, Map>{},
- 'k.dart': <String, Map>{},
- 'l.dart': <String, Map>{},
+ '.gitignore': <String, Map>{},
+ 'README.md': <String, Map>{},
+ 'TODO': <String, Map>{},
+ 'example': {
+ 'console_example.dart': <String, Map>{},
+ 'main.dart': <String, Map>{},
+ 'web copy': {'web_example.dart': <String, Map>{}},
+ },
+ 'lib': {'path.dart': <String, Map>{}},
+ 'pubspec.yaml': <String, Map>{},
+ 'test': {
+ 'absolute_test.dart': <String, Map>{},
+ 'basename_test.dart': <String, Map>{},
+ 'dirname_test.dart': <String, Map>{},
+ 'extension_test.dart': <String, Map>{},
+ 'is_absolute_test.dart': <String, Map>{},
+ 'is_relative_test.dart': <String, Map>{},
+ 'join_test.dart': <String, Map>{},
+ 'normalize_test.dart': <String, Map>{},
+ 'relative_test.dart': <String, Map>{},
+ 'split_test.dart': <String, Map>{}
}
};
- expect(stripColors(tree.fromMap(map, showAllChildren: true)), equals("""
-'-- dir
- |-- a.dart
- |-- b.dart
- |-- c.dart
- |-- d.dart
- |-- e.dart
- |-- f.dart
- |-- g.dart
- |-- h.dart
- |-- i.dart
- |-- j.dart
- |-- k.dart
- '-- l.dart
-"""));
+
+ ctx.expectNextSection(tree.fromMap(map));
});
}
diff --git a/test/golden_file.dart b/test/golden_file.dart
index 9db8ad0..3dcbfb6 100644
--- a/test/golden_file.dart
+++ b/test/golden_file.dart
@@ -46,10 +46,15 @@
late String _header;
final _results = <String>[];
late bool _shouldRegenerateGolden;
+ final bool colors;
bool _generatedNewData = false; // track if new data is generated
int _nextSectionIndex = 0;
- GoldenTestContext._(this._currentTestFile, this._testName) {
+ GoldenTestContext._(
+ this._currentTestFile,
+ this._testName, {
+ required this.colors,
+ }) {
final rel = p.relative(
_currentTestFile.replaceAll(RegExp(r'\.dart$'), ''),
from: p.join(p.current, 'test'),
@@ -59,8 +64,8 @@
'testdata',
'goldens',
rel,
- // Sanitize the name, and add .txt
- '${_testName.replaceAll(RegExp(r'[<>:"/\|?*%#]'), '~')}.txt',
+ // Sanitize the name, and add .ans or .txt.
+ '${_testName.replaceAll(RegExp(r'[<>:"/\|?*%#]'), '~')}.${colors ? 'ans' : 'txt'}',
);
_goldenFile = File(_goldenFilePath);
_header = '# GENERATED BY: ${p.relative(_currentTestFile)}\n\n';
@@ -184,10 +189,12 @@
s.writeln('\$ cd $directory');
}
s.writeln('\$ tree');
- s.writeln(stripColors(ascii_tree.fromFiles(
+ final tree = ascii_tree.fromFiles(
listDir(target, recursive: true),
baseDir: target,
- )));
+ showFileSizes: false,
+ );
+ s.writeln(colors ? tree : stripColors(tree));
_expectSection(sectionIndex, s.toString());
}
@@ -203,11 +210,20 @@
/// `test/testdata/goldens/path/to/myfile_test/<name>.txt`
/// , when `path/to/myfile_test.dart` is the `_test.dart` file from which this
/// function is called.
+///
+/// If [colors] is `true` the file will be created with an `.ans` extension that
+/// indicates ANSI colors will be used.
+///
+/// Such a file can eg. be viewed in vscode with this plugin:
+/// https://marketplace.visualstudio.com/items?itemName=iliazeus.vscode-ansi
void testWithGolden(
- String name,
- FutureOr<void> Function(GoldenTestContext ctx) fn,
-) {
- final ctx = GoldenTestContext._(_findCurrentTestFilename(), name);
+ String name, FutureOr<void> Function(GoldenTestContext ctx) fn,
+ {bool colors = false}) {
+ final ctx = GoldenTestContext._(
+ _findCurrentTestFilename(),
+ name,
+ colors: colors,
+ );
test(name, () async {
ctx._readGoldenFile();
await fn(ctx);
diff --git a/test/testdata/goldens/ascii_tree_test/tree.fromFiles a complex example.ans b/test/testdata/goldens/ascii_tree_test/tree.fromFiles a complex example.ans
new file mode 100644
index 0000000..4ae381f
--- /dev/null
+++ b/test/testdata/goldens/ascii_tree_test/tree.fromFiles a complex example.ans
@@ -0,0 +1,26 @@
+# GENERATED BY: test/ascii_tree_test.dart
+
+[38;5;245m|-- [0mREADME.md [38;5;245m(<1 KB)[0m
+[38;5;245m|-- [0mTODO [38;5;245m(<1 KB)[0m
+[38;5;245m|-- [0mexample
+[38;5;245m| [0m[38;5;245m|-- [0mconsole_example.dart [38;5;245m(<1 KB)[0m
+[38;5;245m| [0m[38;5;245m|-- [0mmain.dart [38;5;245m(1 KB)[0m
+[38;5;245m| [0m[38;5;245m'-- [0mweb copy
+[38;5;245m| [0m [38;5;245m'-- [0mweb_example.dart [38;5;245m(1 KB)[0m
+[38;5;245m|-- [0mlib
+[38;5;245m| [0m[38;5;245m'-- [0mpath.dart [38;5;245m(<1 KB)[0m
+[38;5;245m|-- [0mpubspec.yaml [38;5;245m(<1 KB)[0m
+[38;5;245m'-- [0mtest
+ [38;5;245m|-- [0mabsolute_test.dart [38;5;245m(<1 KB)[0m
+ [38;5;245m|-- [0mall_test.dart [38;5;245m(<1 KB)[0m
+ [38;5;245m|-- [0mbasename_test.dart [33m(1 MB)[39m
+ [38;5;245m|-- [0mdirname_test.dart [33m(1 MB)[39m
+ [38;5;245m|-- [0mextension_test.dart [38;5;245m(2 KB)[0m
+ [38;5;245m|-- [0mis_absolute_test.dart [38;5;245m(2 KB)[0m
+ [38;5;245m|-- [0mis_relative_test.dart [33m(25 MB)[39m
+ [38;5;245m|-- [0mjoin_test.dart [38;5;245m(<1 KB)[0m
+ [38;5;245m|-- [0mnormalize_test.dart [38;5;245m(1023 KB)[0m
+ [38;5;245m|-- [0mpath_posix_test.dart [38;5;245m(<1 KB)[0m
+ [38;5;245m|-- [0mpath_windows_test.dart [38;5;245m(<1 KB)[0m
+ [38;5;245m|-- [0mrelative_test.dart [38;5;245m(<1 KB)[0m
+ [38;5;245m'-- [0msplit_test.dart [38;5;245m(<1 KB)[0m
diff --git a/test/testdata/goldens/ascii_tree_test/tree.fromMap a complex example.ans b/test/testdata/goldens/ascii_tree_test/tree.fromMap a complex example.ans
new file mode 100644
index 0000000..75932d7
--- /dev/null
+++ b/test/testdata/goldens/ascii_tree_test/tree.fromMap a complex example.ans
@@ -0,0 +1,24 @@
+# GENERATED BY: test/ascii_tree_test.dart
+
+[38;5;245m|-- [0m.gitignore
+[38;5;245m|-- [0mREADME.md
+[38;5;245m|-- [0mTODO
+[38;5;245m|-- [0mexample
+[38;5;245m| [0m[38;5;245m|-- [0mconsole_example.dart
+[38;5;245m| [0m[38;5;245m|-- [0mmain.dart
+[38;5;245m| [0m[38;5;245m'-- [0mweb copy
+[38;5;245m| [0m [38;5;245m'-- [0mweb_example.dart
+[38;5;245m|-- [0mlib
+[38;5;245m| [0m[38;5;245m'-- [0mpath.dart
+[38;5;245m|-- [0mpubspec.yaml
+[38;5;245m'-- [0mtest
+ [38;5;245m|-- [0mabsolute_test.dart
+ [38;5;245m|-- [0mbasename_test.dart
+ [38;5;245m|-- [0mdirname_test.dart
+ [38;5;245m|-- [0mextension_test.dart
+ [38;5;245m|-- [0mis_absolute_test.dart
+ [38;5;245m|-- [0mis_relative_test.dart
+ [38;5;245m|-- [0mjoin_test.dart
+ [38;5;245m|-- [0mnormalize_test.dart
+ [38;5;245m|-- [0mrelative_test.dart
+ [38;5;245m'-- [0msplit_test.dart
diff --git a/test/testdata/goldens/directory_option_test/commands taking a --directory~-C parameter work.txt b/test/testdata/goldens/directory_option_test/commands taking a --directory~-C parameter work.txt
index 9585341..30ff534 100644
--- a/test/testdata/goldens/directory_option_test/commands taking a --directory~-C parameter work.txt
+++ b/test/testdata/goldens/directory_option_test/commands taking a --directory~-C parameter work.txt
@@ -94,18 +94,18 @@
## Section 11
$ pub publish -C myapp --dry-run
Publishing test_pkg 1.0.0 to http://localhost:$PORT:
-|-- CHANGELOG.md
-|-- LICENSE
-|-- README.md
+|-- CHANGELOG.md (<1 KB)
+|-- LICENSE (<1 KB)
+|-- README.md (<1 KB)
|-- bin
-| '-- app.dart
+| '-- app.dart (<1 KB)
|-- example
-| '-- pubspec.yaml
+| '-- pubspec.yaml (<1 KB)
|-- example2
-| '-- pubspec.yaml
+| '-- pubspec.yaml (<1 KB)
|-- lib
-| '-- test_pkg.dart
-'-- pubspec.yaml
+| '-- test_pkg.dart (<1 KB)
+'-- pubspec.yaml (<1 KB)
The server may enforce additional checks.
[STDERR]
[STDERR] Package has 0 warnings.
diff --git a/test/testdata/goldens/lish/many_files_test/displays all files.txt b/test/testdata/goldens/lish/many_files_test/displays all files.txt
index 09a01da..81897c2 100644
--- a/test/testdata/goldens/lish/many_files_test/displays all files.txt
+++ b/test/testdata/goldens/lish/many_files_test/displays all files.txt
@@ -1,32 +1,32 @@
# GENERATED BY: test/lish/many_files_test.dart
Publishing test_pkg 1.0.0 to http://localhost:$PORT:
-|-- CHANGELOG.md
-|-- LICENSE
-|-- README.md
+|-- CHANGELOG.md (<1 KB)
+|-- LICENSE (<1 KB)
+|-- README.md (<1 KB)
|-- lib
-| |-- file_0.dart
-| |-- file_1.dart
-| |-- file_10.dart
-| |-- file_11.dart
-| |-- file_12.dart
-| |-- file_13.dart
-| |-- file_14.dart
-| |-- file_15.dart
-| |-- file_16.dart
-| |-- file_17.dart
-| |-- file_18.dart
-| |-- file_19.dart
-| |-- file_2.dart
-| |-- file_3.dart
-| |-- file_4.dart
-| |-- file_5.dart
-| |-- file_6.dart
-| |-- file_7.dart
-| |-- file_8.dart
-| |-- file_9.dart
-| '-- test_pkg.dart
-'-- pubspec.yaml
+| |-- file_0.dart (<1 KB)
+| |-- file_1.dart (<1 KB)
+| |-- file_10.dart (<1 KB)
+| |-- file_11.dart (<1 KB)
+| |-- file_12.dart (<1 KB)
+| |-- file_13.dart (<1 KB)
+| |-- file_14.dart (<1 KB)
+| |-- file_15.dart (<1 KB)
+| |-- file_16.dart (<1 KB)
+| |-- file_17.dart (<1 KB)
+| |-- file_18.dart (<1 KB)
+| |-- file_19.dart (<1 KB)
+| |-- file_2.dart (<1 KB)
+| |-- file_3.dart (<1 KB)
+| |-- file_4.dart (<1 KB)
+| |-- file_5.dart (<1 KB)
+| |-- file_6.dart (<1 KB)
+| |-- file_7.dart (<1 KB)
+| |-- file_8.dart (<1 KB)
+| |-- file_9.dart (<1 KB)
+| '-- test_pkg.dart (<1 KB)
+'-- pubspec.yaml (<1 KB)
Publishing is forever; packages cannot be unpublished.
Policy details are available at https://pub.dev/policy