Use .pub-cache from Flutter root, if it exists. (#13358)
The purpose of this PR is to make it so that when the user runs 'flutter', if they have a .pub-cache directory in their flutter root, we use that instead of the default location for the pub cache. Otherwise, it should act as before.
The eventual goal is to support a pre-populated flutter .zip/.tar.gz file that has everything the developer needs in one bundle. In order for that to actually work, we need to have the pub cache be self-contained, and not in the user's home dir.
Another advantage of this is that if you have multiple flutter repos that you're switching between, then the versions in the pub cache will remain static when you switch between them.
This is an attempt to re-land: #13248. Includes a fix for the test that makes it work on bots in the presence of PUB_CACHE being set, and no other changes.
diff --git a/dev/bots/docs.sh b/dev/bots/docs.sh
index 4d9aaab..fe07298 100755
--- a/dev/bots/docs.sh
+++ b/dev/bots/docs.sh
@@ -3,20 +3,29 @@
# If you want to run this script locally, make sure you run it from
# the root of the flutter repository.
+export FLUTTER_ROOT="$PWD"
# This is called from travis_upload.sh on Travis.
# Make sure dart is installed
bin/flutter --version
+# If the pub cache directory exists in the root, then use that.
+FLUTTER_PUB_CACHE="$FLUTTER_ROOT/.pub-cache"
+if [ -d "$FLUTTER_PUB_CACHE" ]; then
+ # This has to be exported, because pub interprets setting it
+ # to the empty string in the same way as setting it to ".".
+ export PUB_CACHE="${PUB_CACHE:-"$FLUTTER_PUB_CACHE"}"
+fi
+
# Install dartdoc.
bin/cache/dart-sdk/bin/pub global activate dartdoc 0.14.1
# This script generates a unified doc set, and creates
# a custom index.html, placing everything into dev/docs/doc.
(cd dev/tools; ../../bin/cache/dart-sdk/bin/pub get)
-FLUTTER_ROOT=$PWD bin/cache/dart-sdk/bin/dart dev/tools/dartdoc.dart
-FLUTTER_ROOT=$PWD bin/cache/dart-sdk/bin/dart dev/tools/java_and_objc_doc.dart
+bin/cache/dart-sdk/bin/dart dev/tools/dartdoc.dart
+bin/cache/dart-sdk/bin/dart dev/tools/java_and_objc_doc.dart
# Ensure google webmaster tools can verify our site.
cp dev/docs/google2ed1af765c529f57.html dev/docs/doc
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index 05135fb..dbfc795 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -14,6 +14,7 @@
final String flutter = path.join(flutterRoot, 'bin', Platform.isWindows ? 'flutter.bat' : 'flutter');
final String dart = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', Platform.isWindows ? 'dart.exe' : 'dart');
final String pub = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', Platform.isWindows ? 'pub.bat' : 'pub');
+final String pubCache = path.join(flutterRoot, '.pub-cache');
final String flutterTestArgs = Platform.environment['FLUTTER_TEST_ARGS'];
final bool hasColor = stdout.supportsAnsiEscapes;
@@ -204,8 +205,12 @@
final List<String> args = <String>['run', 'test', '-j1', '-rexpanded'];
if (testPath != null)
args.add(testPath);
+ final Map<String, String> pubEnvironment = <String, String>{'DART_VM_OPTIONS': '--assert-initializer'};
+ if (new Directory(pubCache).existsSync()) {
+ pubEnvironment['PUB_CACHE'] = pubCache;
+ }
return _runCommand(pub, args, workingDirectory: workingDirectory,
- environment: <String, String>{'DART_VM_OPTIONS': '--assert-initializer'});
+ environment: pubEnvironment);
}
class EvalResult {
diff --git a/dev/tools/dartdoc.dart b/dev/tools/dartdoc.dart
index 4bb53d0..36816c7 100644
--- a/dev/tools/dartdoc.dart
+++ b/dev/tools/dartdoc.dart
@@ -65,14 +65,25 @@
}
new File('dev/docs/lib/temp_doc.dart').writeAsStringSync(contents.toString());
+ final String flutterRoot = Directory.current.path;
+ final Map<String, String> pubEnvironment = <String, String>{
+ 'FLUTTER_ROOT': flutterRoot,
+ };
+
+ // If there's a .pub-cache dir in the flutter root, use that.
+ final String pubCachePath = '$flutterRoot/.pub-cache';
+ if (new Directory(pubCachePath).existsSync()) {
+ pubEnvironment['PUB_CACHE'] = pubCachePath;
+ }
+
+ final String pubExecutable = '$flutterRoot/bin/cache/dart-sdk/bin/pub';
+
// Run pub.
Process process = await Process.start(
- '../../bin/cache/dart-sdk/bin/pub',
+ pubExecutable,
<String>['get'],
workingDirectory: 'dev/docs',
- environment: <String, String>{
- 'FLUTTER_ROOT': Directory.current.path,
- },
+ environment: pubEnvironment,
);
printStream(process.stdout, prefix: 'pub:stdout: ');
printStream(process.stderr, prefix: 'pub:stderr: ');
@@ -84,9 +95,10 @@
// Verify which version of dartdoc we're using.
final ProcessResult result = Process.runSync(
- '../../bin/cache/dart-sdk/bin/pub',
+ pubExecutable,
<String>['global', 'run', 'dartdoc', '--version'],
workingDirectory: 'dev/docs',
+ environment: pubEnvironment,
);
print('\n${result.stdout}');
@@ -113,9 +125,10 @@
}
process = await Process.start(
- '../../bin/cache/dart-sdk/bin/pub',
+ pubExecutable,
args,
workingDirectory: 'dev/docs',
+ environment: pubEnvironment,
);
printStream(process.stdout, prefix: 'dartdoc:stdout: ',
filter: kVerbose ? const <Pattern>[] : <Pattern>[