Skip to content

Commit 3cba934

Browse files
authored
Run flutter pub get when appropriate instead of normal pub get (#2190)
1 parent 18fdf4a commit 3cba934

7 files changed

+57
-22
lines changed

lib/src/dartdoc_options.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,10 +1583,6 @@ Future<List<DartdocOption>> createDartdocOptions() async {
15831583
(option.root['topLevelPackageMeta'].valueAt(dir) as PackageMeta)
15841584
.requiresFlutter) {
15851585
String flutterRoot = option.root['flutterRoot'].valueAt(dir);
1586-
if (flutterRoot == null) {
1587-
throw DartdocOptionError(
1588-
'Top level package requires Flutter but FLUTTER_ROOT environment variable not set');
1589-
}
15901586
return p.join(flutterRoot, 'bin', 'cache', 'dart-sdk');
15911587
}
15921588
return defaultSdkDir.absolute.path;

lib/src/model/library.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
452452

453453
PackageMeta get packageMeta {
454454
if (_packageMeta == null) {
455-
_packageMeta = PackageMeta.fromElement(element, config);
455+
_packageMeta = PackageMeta.fromElement(element, config.sdkDir);
456456
}
457457
return _packageMeta;
458458
}

lib/src/model/package_builder.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,16 @@ class PackageBuilder {
3939
PackageBuilder(this.config);
4040

4141
Future<PackageGraph> buildPackageGraph() async {
42-
if (config.topLevelPackageMeta.needsPubGet) {
43-
config.topLevelPackageMeta.runPubGet();
42+
if (!config.sdkDocs) {
43+
if (config.topLevelPackageMeta.needsPubGet &&
44+
config.topLevelPackageMeta.requiresFlutter &&
45+
config.flutterRoot == null) {
46+
throw DartdocOptionError(
47+
'Top level package requires Flutter but FLUTTER_ROOT environment variable not set');
48+
}
49+
if (config.topLevelPackageMeta.needsPubGet) {
50+
config.topLevelPackageMeta.runPubGet(config.flutterRoot);
51+
}
4452
}
4553

4654
RendererFactory rendererFactory = RendererFactory.forFormat(config.format);

lib/src/model/package_graph.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class PackageGraph {
4242
void addLibraryToGraph(ResolvedLibraryResult result) {
4343
assert(!allLibrariesAdded);
4444
LibraryElement element = result.element;
45-
var packageMeta = PackageMeta.fromElement(element, config);
45+
var packageMeta = PackageMeta.fromElement(element, config.sdkDir);
4646
var lib = Library.fromLibraryResult(
4747
result, this, Package.fromPackageMeta(packageMeta, this));
4848
packageMap[packageMeta.name].libraries.add(lib);
@@ -850,7 +850,7 @@ class PackageGraph {
850850
result,
851851
this,
852852
Package.fromPackageMeta(
853-
PackageMeta.fromElement(result.element.library, config),
853+
PackageMeta.fromElement(result.element.library, config.sdkDir),
854854
packageGraph));
855855
allLibraries[result.element.library] = foundLibrary;
856856
return foundLibrary;

lib/src/package_meta.dart

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,9 @@ abstract class PackageMeta {
9494

9595
/// Use this instead of fromDir where possible.
9696
factory PackageMeta.fromElement(
97-
LibraryElement libraryElement, DartdocOptionContext config) {
98-
// [config] is only here for sdkDir, and it's OK that it is the wrong
99-
// context since sdkDir is argOnly and this is supposed to be a temporary
100-
// workaround.
97+
LibraryElement libraryElement, String sdkDir) {
10198
if (libraryElement.isInSdk) {
102-
return PackageMeta.fromDir(Directory(config.sdkDir));
99+
return PackageMeta.fromDir(Directory(sdkDir));
103100
}
104101
return PackageMeta.fromDir(
105102
File(path.canonicalize(libraryElement.source.fullName)).parent);
@@ -173,7 +170,7 @@ abstract class PackageMeta {
173170

174171
bool get requiresFlutter;
175172

176-
void runPubGet();
173+
void runPubGet(String flutterRoot);
177174

178175
String get name;
179176

@@ -279,16 +276,24 @@ class _FilePackageMeta extends PackageMeta {
279276

280277
@override
281278
bool get needsPubGet =>
282-
!(File(path.join(dir.path, '.packages')).existsSync());
279+
!(File(path.join(dir.path, '.dart_tool', 'package_config.json'))
280+
.existsSync());
283281

284282
@override
285-
void runPubGet() {
286-
String pubPath =
287-
path.join(path.dirname(Platform.resolvedExecutable), 'pub');
288-
if (Platform.isWindows) pubPath += '.bat';
283+
void runPubGet(String flutterRoot) {
284+
String binPath;
285+
List<String> parameters;
286+
if (requiresFlutter) {
287+
binPath = path.join(flutterRoot, 'bin', 'flutter');
288+
parameters = ['pub', 'get'];
289+
} else {
290+
binPath = path.join(path.dirname(Platform.resolvedExecutable), 'pub');
291+
parameters = ['get'];
292+
}
293+
if (Platform.isWindows) binPath += '.bat';
289294

290295
ProcessResult result =
291-
Process.runSync(pubPath, ['get'], workingDirectory: dir.path);
296+
Process.runSync(binPath, parameters, workingDirectory: dir.path);
292297

293298
var trimmedStdout = (result.stdout as String).trim();
294299
if (trimmedStdout.isNotEmpty) {
@@ -385,7 +390,7 @@ class _SdkMeta extends PackageMeta {
385390
bool get isSdk => true;
386391

387392
@override
388-
void runPubGet() {
393+
void runPubGet(String flutterRoot) {
389394
throw 'unsupported operation';
390395
}
391396

test/dartdoc_integration_test.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ void main() {
135135
test('Validate missing FLUTTER_ROOT exception is clean', () async {
136136
StringBuffer output = StringBuffer();
137137
var args = <String>[dartdocPath];
138+
var dart_tool =
139+
Directory(path.join(_testPackageFlutterPluginPath, '.dart_tool'));
140+
if (dart_tool.existsSync()) dart_tool.deleteSync(recursive: true);
138141
Future run = subprocessLauncher.runStreamed(
139142
Platform.resolvedExecutable, args,
140143
environment: Map.from(Platform.environment)..remove('FLUTTER_ROOT'),

tool/grind.dart

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ Future<List<Map>> _buildTestPackageDocs(
527527
}
528528

529529
@Task('Build generated test package docs (with inherited docs and source code)')
530+
@Depends(clean)
530531
Future<void> buildTestPackageDocs() async {
531532
await _buildTestPackageDocs(
532533
testPackageDocsDir.absolute.path, Future.value(Directory.current.path));
@@ -903,23 +904,44 @@ Future<void> tryPublish() async {
903904
}
904905

905906
@Task('Run a smoke test, only')
907+
@Depends(clean)
906908
Future<void> smokeTest() async {
907909
await testDart2(smokeTestFiles);
908910
await testFutures.wait();
909911
}
910912

911913
@Task('Run non-smoke tests, only')
914+
@Depends(clean)
912915
Future<void> longTest() async {
913916
await testDart2(testFiles);
914917
await testFutures.wait();
915918
}
916919

917920
@Task('Run all the tests.')
921+
@Depends(clean)
918922
Future<void> test() async {
919923
await testDart2(smokeTestFiles.followedBy(testFiles));
920924
await testFutures.wait();
921925
}
922926

927+
@Task('Clean up pub data from test directories')
928+
Future<void> clean() async {
929+
var toDelete = nonRootPubData;
930+
toDelete.forEach((e) => e.deleteSync(recursive: true));
931+
}
932+
933+
Iterable<FileSystemEntity> get nonRootPubData {
934+
// This involves deleting things, so be careful.
935+
if (!File(path.join('tool', 'grind.dart')).existsSync()) {
936+
throw FileSystemException('wrong CWD, run from root of dartdoc package');
937+
}
938+
return Directory('.')
939+
.listSync(recursive: true)
940+
.where((e) => path.dirname(e.path) != '.')
941+
.where((e) => <String>['.dart_tool', '.packages', 'pubspec.lock']
942+
.contains(path.basename(e.path)));
943+
}
944+
923945
List<File> get smokeTestFiles => Directory('test')
924946
.listSync(recursive: true)
925947
.whereType<File>()
@@ -1017,6 +1039,7 @@ Future<WarningsCollection> _buildDartdocFlutterPluginDocs() async {
10171039
}
10181040

10191041
@Task('Build docs for a package that requires flutter with remote linking')
1042+
@Depends(clean)
10201043
Future<void> buildDartdocFlutterPluginDocs() async {
10211044
await _buildDartdocFlutterPluginDocs();
10221045
}

0 commit comments

Comments
 (0)