Devon Carew f132acaf1d use the new cache code to locate more artifacts (#3361)
* use the new cache code to locate more artifacts

* add todo

* review comments
2016-04-15 21:08:03 -07:00

194 lines
5.1 KiB
Dart

// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:io';
import 'package:path/path.dart' as path;
import 'build_configuration.dart';
import 'globals.dart';
enum ArtifactType {
snapshot,
shell,
mojo,
androidClassesJar,
androidIcuData,
androidKeystore,
androidLibSkyShell,
}
class Artifact {
const Artifact._({
this.name,
this.fileName,
this.type,
this.hostPlatform,
this.targetPlatform
});
final String name;
final String fileName;
final ArtifactType type;
final HostPlatform hostPlatform;
final TargetPlatform targetPlatform;
String get platform {
if (targetPlatform != null)
return getNameForTargetPlatform(targetPlatform);
if (hostPlatform != null)
return getNameForHostPlatform(hostPlatform);
assert(false);
return null;
}
}
class ArtifactStore {
static const List<Artifact> knownArtifacts = const <Artifact>[
// tester
const Artifact._(
name: 'Flutter Tester',
fileName: 'sky_shell',
type: ArtifactType.shell,
targetPlatform: TargetPlatform.linux_x64
),
// snapshotters
const Artifact._(
name: 'Sky Snapshot',
fileName: 'sky_snapshot',
type: ArtifactType.snapshot,
hostPlatform: HostPlatform.linux_x64
),
const Artifact._(
name: 'Sky Snapshot',
fileName: 'sky_snapshot',
type: ArtifactType.snapshot,
hostPlatform: HostPlatform.darwin_x64
),
// mojo
const Artifact._(
name: 'Flutter for Mojo',
fileName: 'flutter.mojo',
type: ArtifactType.mojo,
targetPlatform: TargetPlatform.android_arm
),
const Artifact._(
name: 'Flutter for Mojo',
fileName: 'flutter.mojo',
type: ArtifactType.mojo,
targetPlatform: TargetPlatform.linux_x64
),
// android-arm
const Artifact._(
name: 'Compiled Java code',
fileName: 'classes.dex.jar',
type: ArtifactType.androidClassesJar,
targetPlatform: TargetPlatform.android_arm
),
const Artifact._(
name: 'ICU data table',
fileName: 'icudtl.dat',
type: ArtifactType.androidIcuData,
targetPlatform: TargetPlatform.android_arm
),
const Artifact._(
name: 'Key Store',
fileName: 'chromium-debug.keystore',
type: ArtifactType.androidKeystore,
targetPlatform: TargetPlatform.android_arm
),
const Artifact._(
name: 'Compiled C++ code',
fileName: 'libsky_shell.so',
type: ArtifactType.androidLibSkyShell,
targetPlatform: TargetPlatform.android_arm
),
// android-x86
const Artifact._(
name: 'Compiled Java code',
fileName: 'classes.dex.jar',
type: ArtifactType.androidClassesJar,
targetPlatform: TargetPlatform.android_x64
),
const Artifact._(
name: 'ICU data table',
fileName: 'icudtl.dat',
type: ArtifactType.androidIcuData,
targetPlatform: TargetPlatform.android_x64
),
const Artifact._(
name: 'Key Store',
fileName: 'chromium-debug.keystore',
type: ArtifactType.androidKeystore,
targetPlatform: TargetPlatform.android_x64
),
const Artifact._(
name: 'Compiled C++ code',
fileName: 'libsky_shell.so',
type: ArtifactType.androidLibSkyShell,
targetPlatform: TargetPlatform.android_x64
),
];
static Artifact getArtifact({
ArtifactType type,
HostPlatform hostPlatform,
TargetPlatform targetPlatform
}) {
for (Artifact artifact in ArtifactStore.knownArtifacts) {
if (type != null &&
type != artifact.type)
continue;
if (hostPlatform != null &&
artifact.hostPlatform != null &&
hostPlatform != artifact.hostPlatform)
continue;
if (targetPlatform != null &&
artifact.targetPlatform != null &&
targetPlatform != artifact.targetPlatform)
continue;
return artifact;
}
return null;
}
// Initialized by FlutterCommandRunner on startup.
static String flutterRoot;
static String _engineRevision;
static String get engineRevision {
if (_engineRevision == null) {
File revisionFile = new File(path.join(flutterRoot, 'bin', 'cache', 'engine.version'));
if (revisionFile.existsSync())
_engineRevision = revisionFile.readAsStringSync().trim();
}
return _engineRevision;
}
static Directory _getBaseCacheDir() {
return new Directory(path.join(flutterRoot, 'bin', 'cache', 'artifacts'));
}
// TODO(devoncarew): There are 5 call-sites of this (run_mojo, build_apk, the
// test command, toolchain, setup_xcodeproj); move them over to using
// something from `cache.dart`.
static String getPath(Artifact artifact) {
File cachedFile = new File(
path.join(_getBaseCacheDir().path, 'engine', artifact.platform, artifact.fileName)
);
if (!cachedFile.existsSync()) {
printError('File not found in the platform artifacts: ${cachedFile.path}');
return null;
} else {
return cachedFile.path;
}
}
}