| 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 library pub.source.git; | 5 library pub.source.git; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:path/path.dart' as path; | 9 import 'package:path/path.dart' as path; |
| 10 | 10 |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 } | 156 } |
| 157 | 157 |
| 158 List<Package> getCachedPackages() { | 158 List<Package> getCachedPackages() { |
| 159 // TODO(keertip): Implement getCachedPackages(). | 159 // TODO(keertip): Implement getCachedPackages(). |
| 160 throw new UnimplementedError( | 160 throw new UnimplementedError( |
| 161 "The git source doesn't support listing its cached packages yet."); | 161 "The git source doesn't support listing its cached packages yet."); |
| 162 } | 162 } |
| 163 | 163 |
| 164 /// Resets all cached packages back to the pristine state of the Git | 164 /// Resets all cached packages back to the pristine state of the Git |
| 165 /// repository at the revision they are pinned to. | 165 /// repository at the revision they are pinned to. |
| 166 Future<Pair<int, int>> repairCachedPackages() async { | 166 Future<Pair<List<PackageId>, List<PackageId>>> repairCachedPackages() async { |
| 167 if (!dirExists(systemCacheRoot)) return new Pair(0, 0); | 167 if (!dirExists(systemCacheRoot)) return new Pair([], []); |
| 168 | 168 |
| 169 var successes = 0; | 169 var successes = []; |
| 170 var failures = 0; | 170 var failures = []; |
| 171 | 171 |
| 172 var packages = listDir(systemCacheRoot) | 172 var packages = listDir(systemCacheRoot) |
| 173 .where((entry) => dirExists(path.join(entry, ".git"))) | 173 .where((entry) => dirExists(path.join(entry, ".git"))) |
| 174 .map((packageDir) => new Package.load(null, packageDir, | 174 .map((packageDir) => new Package.load(null, packageDir, |
| 175 systemCache.sources)) | 175 systemCache.sources)) |
| 176 .toList(); | 176 .toList(); |
| 177 | 177 |
| 178 // Note that there may be multiple packages with the same name and version | 178 // Note that there may be multiple packages with the same name and version |
| 179 // (pinned to different commits). The sort order of those is unspecified. | 179 // (pinned to different commits). The sort order of those is unspecified. |
| 180 packages.sort(Package.orderByNameAndVersion); | 180 packages.sort(Package.orderByNameAndVersion); |
| 181 | 181 |
| 182 for (var package in packages) { | 182 for (var package in packages) { |
| 183 var id = new PackageId(package.name, this.name, package.version, null); |
| 184 |
| 183 log.message("Resetting Git repository for " | 185 log.message("Resetting Git repository for " |
| 184 "${log.bold(package.name)} ${package.version}..."); | 186 "${log.bold(package.name)} ${package.version}..."); |
| 185 | 187 |
| 186 try { | 188 try { |
| 187 // Remove all untracked files. | 189 // Remove all untracked files. |
| 188 await git.run(["clean", "-d", "--force", "-x"], | 190 await git.run(["clean", "-d", "--force", "-x"], |
| 189 workingDir: package.dir); | 191 workingDir: package.dir); |
| 190 | 192 |
| 191 // Discard all changes to tracked files. | 193 // Discard all changes to tracked files. |
| 192 await git.run(["reset", "--hard", "HEAD"], workingDir: package.dir); | 194 await git.run(["reset", "--hard", "HEAD"], workingDir: package.dir); |
| 193 | 195 |
| 194 successes++; | 196 successes.add(id); |
| 195 } on git.GitException catch (error, stackTrace) { | 197 } on git.GitException catch (error, stackTrace) { |
| 196 log.error("Failed to reset ${log.bold(package.name)} " | 198 log.error("Failed to reset ${log.bold(package.name)} " |
| 197 "${package.version}. Error:\n$error"); | 199 "${package.version}. Error:\n$error"); |
| 198 log.fine(stackTrace); | 200 log.fine(stackTrace); |
| 199 failures++; | 201 failures.add(id); |
| 200 | 202 |
| 201 tryDeleteEntry(package.dir); | 203 tryDeleteEntry(package.dir); |
| 202 } | 204 } |
| 203 } | 205 } |
| 204 | 206 |
| 205 return new Pair(successes, failures); | 207 return new Pair(successes, failures); |
| 206 } | 208 } |
| 207 | 209 |
| 208 /// Ensure that the canonical clone of the repository referred to by [id] (the | 210 /// Ensure that the canonical clone of the repository referred to by [id] (the |
| 209 /// one in `<system cache>/git/cache`) exists and contains the revision | 211 /// one in `<system cache>/git/cache`) exists and contains the revision |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 return description['ref']; | 333 return description['ref']; |
| 332 } | 334 } |
| 333 | 335 |
| 334 /// Returns [description] if it's a description, or [PackageId.description] if | 336 /// Returns [description] if it's a description, or [PackageId.description] if |
| 335 /// it's a [PackageId]. | 337 /// it's a [PackageId]. |
| 336 _getDescription(description) { | 338 _getDescription(description) { |
| 337 if (description is PackageId) return description.description; | 339 if (description is PackageId) return description.description; |
| 338 return description; | 340 return description; |
| 339 } | 341 } |
| 340 } | 342 } |
| OLD | NEW |