Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1128)

Side by Side Diff: sdk/lib/_internal/pub_generated/lib/src/source/cached.dart

Issue 896623005: Use native async/await support in pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library pub.source.cached;
6
7 import 'dart:async';
8
9 import 'package:path/path.dart' as path;
10
11 import '../io.dart';
12 import '../package.dart';
13 import '../pubspec.dart';
14 import '../source.dart';
15 import '../utils.dart';
16
17 /// Base class for a [Source] that installs packages into pub's [SystemCache].
18 ///
19 /// A source should be cached if it requires network access to retrieve
20 /// packages or the package needs to be "frozen" at the point in time that it's
21 /// installed. (For example, Git packages are cached because installing from
22 /// the same repo over time may yield different commits.)
23 abstract class CachedSource extends Source {
24 /// The root directory of this source's cache within the system cache.
25 ///
26 /// This shouldn't be overridden by subclasses.
27 String get systemCacheRoot => path.join(systemCache.rootDir, name);
28
29 /// If [id] is already in the system cache, just loads it from there.
30 ///
31 /// Otherwise, defers to the subclass.
32 Future<Pubspec> doDescribe(PackageId id) {
33 return getDirectory(id).then((packageDir) {
34 if (fileExists(path.join(packageDir, "pubspec.yaml"))) {
35 return new Pubspec.load(
36 packageDir,
37 systemCache.sources,
38 expectedName: id.name);
39 }
40
41 return describeUncached(id);
42 });
43 }
44
45 /// Loads the (possibly remote) pubspec for the package version identified by
46 /// [id].
47 ///
48 /// This will only be called for packages that have not yet been installed in
49 /// the system cache.
50 Future<Pubspec> describeUncached(PackageId id);
51
52 Future get(PackageId id, String symlink) {
53 return downloadToSystemCache(id).then((pkg) {
54 createPackageSymlink(id.name, pkg.dir, symlink);
55 });
56 }
57
58 /// Determines if the package with [id] is already downloaded to the system
59 /// cache.
60 Future<bool> isInSystemCache(PackageId id) =>
61 getDirectory(id).then(dirExists);
62
63 /// Downloads the package identified by [id] to the system cache.
64 Future<Package> downloadToSystemCache(PackageId id);
65
66 /// Returns the [Package]s that have been downloaded to the system cache.
67 List<Package> getCachedPackages();
68
69 /// Reinstalls all packages that have been previously installed into the
70 /// system cache by this source.
71 ///
72 /// Returns a [Pair] whose first element is the number of packages
73 /// successfully repaired and the second is the number of failures.
74 Future<Pair<int, int>> repairCachedPackages();
75 }
OLDNEW
« no previous file with comments | « sdk/lib/_internal/pub_generated/lib/src/source.dart ('k') | sdk/lib/_internal/pub_generated/lib/src/source/git.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698