b12e27a4d2
Review URL: https://codereview.chromium.org//12253054 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@18551 260f80e4-7a28-3924-810f-c04153c831b5
55 lines
1.8 KiB
Dart
55 lines
1.8 KiB
Dart
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
library sdk_source;
|
|
|
|
import 'dart:async';
|
|
|
|
import '../../pkg/path/lib/path.dart' as path;
|
|
|
|
import 'io.dart';
|
|
import 'package.dart';
|
|
import 'pubspec.dart';
|
|
import 'sdk.dart' as sdk;
|
|
import 'source.dart';
|
|
import 'utils.dart';
|
|
import 'version.dart';
|
|
|
|
/// A package source that uses libraries from the Dart SDK.
|
|
class SdkSource extends Source {
|
|
final String name = "sdk";
|
|
final bool shouldCache = false;
|
|
|
|
/// SDK packages are not individually versioned. Instead, their version is
|
|
/// inferred from the revision number of the SDK itself.
|
|
Future<Pubspec> describe(PackageId id) {
|
|
return defer(() {
|
|
var packageDir = _getPackagePath(id);
|
|
// TODO(rnystrom): What if packageDir is null?
|
|
var pubspec = new Pubspec.load(id.name, packageDir, systemCache.sources);
|
|
// Ignore the pubspec's version, and use the SDK's.
|
|
return new Pubspec(id.name, sdk.version, pubspec.dependencies,
|
|
pubspec.environment);
|
|
});
|
|
}
|
|
|
|
/// Since all the SDK files are already available locally, installation just
|
|
/// involves symlinking the SDK library into the packages directory.
|
|
Future<bool> install(PackageId id, String destPath) {
|
|
return defer(() {
|
|
var path = _getPackagePath(id);
|
|
if (path == null) return false;
|
|
|
|
return createPackageSymlink(id.name, path, destPath).then((_) => true);
|
|
});
|
|
}
|
|
|
|
/// Gets the path in the SDK's "pkg" directory to the directory containing
|
|
/// package [id]. Returns `null` if the package could not be found.
|
|
String _getPackagePath(PackageId id) {
|
|
var pkgPath = path.join(sdk.rootDirectory, "pkg", id.description);
|
|
return dirExists(pkgPath) ? pkgPath : null;
|
|
}
|
|
}
|