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); |
} |