| OLD | NEW |
| 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 import 'dart:async'; | 5 import 'dart:async'; |
| 6 | 6 |
| 7 import 'package:path/path.dart' as path; | 7 import 'package:path/path.dart' as path; |
| 8 import 'package:pub_semver/pub_semver.dart'; | 8 import 'package:pub_semver/pub_semver.dart'; |
| 9 | 9 |
| 10 import '../git.dart' as git; | 10 import '../git.dart' as git; |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 BoundGitSource(this.source, this.systemCache); | 149 BoundGitSource(this.source, this.systemCache); |
| 150 | 150 |
| 151 /// The paths to the canonical clones of repositories for which "git fetch" | 151 /// The paths to the canonical clones of repositories for which "git fetch" |
| 152 /// has already been run during this run of pub. | 152 /// has already been run during this run of pub. |
| 153 final _updatedRepos = new Set<String>(); | 153 final _updatedRepos = new Set<String>(); |
| 154 | 154 |
| 155 /// Given a Git repo that contains a pub package, gets the name of the pub | 155 /// Given a Git repo that contains a pub package, gets the name of the pub |
| 156 /// package. | 156 /// package. |
| 157 Future<String> getPackageNameFromRepo(String repo) { | 157 Future<String> getPackageNameFromRepo(String repo) { |
| 158 // Clone the repo to a temp directory. | 158 // Clone the repo to a temp directory. |
| 159 return withTempDir((tempDir) { | 159 return withTempDir((tempDir) async { |
| 160 return _clone(repo, tempDir, shallow: true).then((_) { | 160 await _clone(repo, tempDir, shallow: true); |
| 161 var pubspec = new Pubspec.load(tempDir, systemCache.sources); | 161 var pubspec = new Pubspec.load(tempDir, systemCache.sources); |
| 162 return pubspec.name; | 162 return pubspec.name; |
| 163 }); | |
| 164 }); | 163 }); |
| 165 } | 164 } |
| 166 | 165 |
| 167 Future<List<PackageId>> doGetVersions(PackageRef ref) async { | 166 Future<List<PackageId>> doGetVersions(PackageRef ref) async { |
| 168 await _ensureRepoCache(ref); | 167 await _ensureRepoCache(ref); |
| 169 var path = _repoCachePath(ref); | 168 var path = _repoCachePath(ref); |
| 170 var revision = await _firstRevision(path, ref.description['ref']); | 169 var revision = await _firstRevision(path, ref.description['ref']); |
| 171 var pubspec = await _describeUncached(ref, revision); | 170 var pubspec = await _describeUncached(ref, revision); |
| 172 | 171 |
| 173 return [ | 172 return [ |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 // TODO(keertip): Implement getCachedPackages(). | 241 // TODO(keertip): Implement getCachedPackages(). |
| 243 throw new UnimplementedError( | 242 throw new UnimplementedError( |
| 244 "The git source doesn't support listing its cached packages yet."); | 243 "The git source doesn't support listing its cached packages yet."); |
| 245 } | 244 } |
| 246 | 245 |
| 247 /// Resets all cached packages back to the pristine state of the Git | 246 /// Resets all cached packages back to the pristine state of the Git |
| 248 /// repository at the revision they are pinned to. | 247 /// repository at the revision they are pinned to. |
| 249 Future<Pair<List<PackageId>, List<PackageId>>> repairCachedPackages() async { | 248 Future<Pair<List<PackageId>, List<PackageId>>> repairCachedPackages() async { |
| 250 if (!dirExists(systemCacheRoot)) return new Pair([], []); | 249 if (!dirExists(systemCacheRoot)) return new Pair([], []); |
| 251 | 250 |
| 252 var successes = []; | 251 var successes = <PackageId>[]; |
| 253 var failures = []; | 252 var failures = <PackageId>[]; |
| 254 | 253 |
| 255 var packages = listDir(systemCacheRoot) | 254 var packages = listDir(systemCacheRoot) |
| 256 .where((entry) => dirExists(path.join(entry, ".git"))) | 255 .where((entry) => dirExists(path.join(entry, ".git"))) |
| 257 .map((packageDir) => new Package.load( | 256 .map((packageDir) => new Package.load( |
| 258 null, packageDir, systemCache.sources)) | 257 null, packageDir, systemCache.sources)) |
| 259 .toList(); | 258 .toList(); |
| 260 | 259 |
| 261 // Note that there may be multiple packages with the same name and version | 260 // Note that there may be multiple packages with the same name and version |
| 262 // (pinned to different commits). The sort order of those is unspecified. | 261 // (pinned to different commits). The sort order of those is unspecified. |
| 263 packages.sort(Package.orderByNameAndVersion); | 262 packages.sort(Package.orderByNameAndVersion); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 (result) => null); | 381 (result) => null); |
| 383 } | 382 } |
| 384 | 383 |
| 385 /// Returns the path to the canonical clone of the repository referred to by | 384 /// Returns the path to the canonical clone of the repository referred to by |
| 386 /// [id] (the one in `<system cache>/git/cache`). | 385 /// [id] (the one in `<system cache>/git/cache`). |
| 387 String _repoCachePath(PackageRef ref) { | 386 String _repoCachePath(PackageRef ref) { |
| 388 var repoCacheName = '${ref.name}-${sha1(ref.description['url'])}'; | 387 var repoCacheName = '${ref.name}-${sha1(ref.description['url'])}'; |
| 389 return path.join(systemCacheRoot, 'cache', repoCacheName); | 388 return path.join(systemCacheRoot, 'cache', repoCacheName); |
| 390 } | 389 } |
| 391 } | 390 } |
| OLD | NEW |