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

Unified Diff: sdk/lib/_internal/pub/lib/src/source/git.dart

Issue 831983005: Properly detect if git revisions aren't in a git repository. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | sdk/lib/_internal/pub/test/get/git/check_out_unfetched_revision_of_cached_repo_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/pub/lib/src/source/git.dart
diff --git a/sdk/lib/_internal/pub/lib/src/source/git.dart b/sdk/lib/_internal/pub/lib/src/source/git.dart
index 9ce844d853dd21f2e1485b899d6c7d97f3c4b06b..89653e1d28f7b3df740fdfbdb3430a6f3c792262 100644
--- a/sdk/lib/_internal/pub/lib/src/source/git.dart
+++ b/sdk/lib/_internal/pub/lib/src/source/git.dart
@@ -214,24 +214,31 @@ class GitSource extends CachedSource {
Future<String> _ensureRevision(PackageId id) {
return new Future.sync(() {
var path = _repoCachePath(id);
+ log.fine("ensuring $path has ${id.description}");
if (!entryExists(path)) {
+ log.fine("$path doesn't exist");
return _clone(_getUrl(id), path, mirror: true)
- .then((_) => _revParse(id));
+ .then((_) => _getRev(id));
}
// If [id] didn't come from a lockfile, it may be using a symbolic
// reference. We want to get the latest version of that reference.
var description = id.description;
if (description is! Map || !description.containsKey('resolved-ref')) {
- return _updateRepoCache(id).then((_) => _revParse(id));
+ log.fine("ID doesn't have a resolved ref");
+ return _updateRepoCache(id).then((_) => _getRev(id));
}
// If [id] did come from a lockfile, then we want to avoid running "git
// fetch" if possible to avoid networking time and errors. See if the
// revision exists in the repo cache before updating it.
- return _revParse(id).catchError((error) {
+ return _getRev(id).then((res) {
+ log.fine("ref is $res");
+ return res;
+ }).catchError((error) {
+ log.fine("repo doesn't have ref, updating");
if (error is! git.GitException) throw error;
- return _updateRepoCache(id).then((_) => _revParse(id));
+ return _updateRepoCache(id).then((_) => _getRev(id));
});
});
}
@@ -248,12 +255,12 @@ class GitSource extends CachedSource {
});
}
- /// Runs "git rev-parse" in the canonical clone of the repository referred to
+ /// Runs "git rev-list" in the canonical clone of the repository referred to
/// by [id] on the effective ref of [id].
///
/// This assumes that the canonical clone already exists.
- Future<String> _revParse(PackageId id) {
- return git.run(["rev-parse", _getEffectiveRef(id)],
+ Future<String> _getRev(PackageId id) {
+ return git.run(["rev-list", "--max-count=1", _getEffectiveRef(id)],
workingDir: _repoCachePath(id)).then((result) => result.first);
}
« no previous file with comments | « no previous file | sdk/lib/_internal/pub/test/get/git/check_out_unfetched_revision_of_cached_repo_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698