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

Side by Side Diff: utils/pub/entrypoint.dart

Issue 11635060: Add a validator for dependency version constraints. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 8 years 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
« no previous file with comments | « no previous file | utils/pub/http.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library entrypoint; 5 library entrypoint;
6 6
7 import 'io.dart'; 7 import 'io.dart';
8 import 'lock_file.dart'; 8 import 'lock_file.dart';
9 import 'log.dart' as log; 9 import 'log.dart' as log;
10 import 'package.dart'; 10 import 'package.dart';
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 107
108 return future; 108 return future;
109 } 109 }
110 110
111 /** 111 /**
112 * Installs all dependencies of the [root] package to its "packages" 112 * Installs all dependencies of the [root] package to its "packages"
113 * directory, respecting the [LockFile] if present. Returns a [Future] that 113 * directory, respecting the [LockFile] if present. Returns a [Future] that
114 * completes when all dependencies are installed. 114 * completes when all dependencies are installed.
115 */ 115 */
116 Future installDependencies() { 116 Future installDependencies() {
117 return _loadLockFile() 117 return loadLockFile()
118 .chain((lockFile) => resolveVersions(cache.sources, root, lockFile)) 118 .chain((lockFile) => resolveVersions(cache.sources, root, lockFile))
119 .chain(_installDependencies); 119 .chain(_installDependencies);
120 } 120 }
121 121
122 /** 122 /**
123 * Installs the latest available versions of all dependencies of the [root] 123 * Installs the latest available versions of all dependencies of the [root]
124 * package to its "package" directory, writing a new [LockFile]. Returns a 124 * package to its "package" directory, writing a new [LockFile]. Returns a
125 * [Future] that completes when all dependencies are installed. 125 * [Future] that completes when all dependencies are installed.
126 */ 126 */
127 Future updateAllDependencies() { 127 Future updateAllDependencies() {
128 return resolveVersions(cache.sources, root, new LockFile.empty()) 128 return resolveVersions(cache.sources, root, new LockFile.empty())
129 .chain(_installDependencies); 129 .chain(_installDependencies);
130 } 130 }
131 131
132 /** 132 /**
133 * Installs the latest available versions of [dependencies], while leaving 133 * Installs the latest available versions of [dependencies], while leaving
134 * other dependencies as specified by the [LockFile] if possible. Returns a 134 * other dependencies as specified by the [LockFile] if possible. Returns a
135 * [Future] that completes when all dependencies are installed. 135 * [Future] that completes when all dependencies are installed.
136 */ 136 */
137 Future updateDependencies(List<String> dependencies) { 137 Future updateDependencies(List<String> dependencies) {
138 return _loadLockFile().chain((lockFile) { 138 return loadLockFile().chain((lockFile) {
139 var versionSolver = new VersionSolver(cache.sources, root, lockFile); 139 var versionSolver = new VersionSolver(cache.sources, root, lockFile);
140 for (var dependency in dependencies) { 140 for (var dependency in dependencies) {
141 versionSolver.useLatestVersion(dependency); 141 versionSolver.useLatestVersion(dependency);
142 } 142 }
143 return versionSolver.solve(); 143 return versionSolver.solve();
144 }).chain(_installDependencies); 144 }).chain(_installDependencies);
145 } 145 }
146 146
147 /** 147 /**
148 * Removes the old packages directory, installs all dependencies listed in 148 * Removes the old packages directory, installs all dependencies listed in
149 * [packageVersions], and writes a [LockFile]. 149 * [packageVersions], and writes a [LockFile].
150 */ 150 */
151 Future _installDependencies(List<PackageId> packageVersions) { 151 Future _installDependencies(List<PackageId> packageVersions) {
152 return cleanDir(path).chain((_) { 152 return cleanDir(path).chain((_) {
153 return Futures.wait(packageVersions.map((id) { 153 return Futures.wait(packageVersions.map((id) {
154 if (id.source is RootSource) return new Future.immediate(id); 154 if (id.source is RootSource) return new Future.immediate(id);
155 return install(id); 155 return install(id);
156 })); 156 }));
157 }).chain(_saveLockFile) 157 }).chain(_saveLockFile)
158 .chain(_installSelfReference) 158 .chain(_installSelfReference)
159 .chain(_linkSecondaryPackageDirs); 159 .chain(_linkSecondaryPackageDirs);
160 } 160 }
161 161
162 /** 162 /// Loads the list of concrete package versions from the `pubspec.lock`, if it
163 * Loads the list of concrete package versions from the `pubspec.lock`, if it 163 /// exists. If it doesn't, this completes to an empty [LockFile].
164 * exists. If it doesn't, this completes to an empty [LockFile]. 164 Future<LockFile> loadLockFile() {
165 *
166 * If there's an error reading the `pubspec.lock` file, this will print a
167 * warning message and act as though the file doesn't exist.
168 */
169 Future<LockFile> _loadLockFile() {
170 var lockFilePath = join(root.dir, 'pubspec.lock'); 165 var lockFilePath = join(root.dir, 'pubspec.lock');
171 166
172 log.fine("Loading lockfile."); 167 log.fine("Loading lockfile.");
173 return fileExists(lockFilePath).chain((exists) { 168 return fileExists(lockFilePath).chain((exists) {
174 if (!exists) { 169 if (!exists) {
175 log.fine("No lock file at $lockFilePath, creating empty one."); 170 log.fine("No lock file at $lockFilePath, creating empty one.");
176 return new Future<LockFile>.immediate(new LockFile.empty()); 171 return new Future<LockFile>.immediate(new LockFile.empty());
177 } 172 }
178 173
179 return readTextFile(lockFilePath).transform((text) => 174 return readTextFile(lockFilePath).transform((text) =>
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 * Creates a symlink to the `packages` directory in [dir] if none exists. 270 * Creates a symlink to the `packages` directory in [dir] if none exists.
276 */ 271 */
277 Future _linkSecondaryPackageDir(String dir) { 272 Future _linkSecondaryPackageDir(String dir) {
278 var to = join(dir, 'packages'); 273 var to = join(dir, 'packages');
279 return exists(to).chain((exists) { 274 return exists(to).chain((exists) {
280 if (exists) return new Future.immediate(null); 275 if (exists) return new Future.immediate(null);
281 return createSymlink(path, to); 276 return createSymlink(path, to);
282 }); 277 });
283 } 278 }
284 } 279 }
OLDNEW
« no previous file with comments | « no previous file | utils/pub/http.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698