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 9f4c38c32c9ffb9be0ebeb9c62528107feb7e0fc..9851677b3635f6f1e5fd945e4c9c4ad19c0dcfc6 100644 |
--- a/sdk/lib/_internal/pub/lib/src/source/git.dart |
+++ b/sdk/lib/_internal/pub/lib/src/source/git.dart |
@@ -18,12 +18,28 @@ import 'cached.dart'; |
/// A package source that gets packages from Git repos. |
class GitSource extends CachedSource { |
+ /// Given a valid git package description, returns the URL of the repository |
+ /// it pulls from. |
+ static String urlFromDescription(description) => description["url"]; |
+ |
final name = "git"; |
/// The paths to the canonical clones of repositories for which "git fetch" |
/// has already been run during this run of pub. |
final _updatedRepos = new Set<String>(); |
+ /// Given a Git repo that contains a pub package, gets the name of the pub |
+ /// package. |
+ Future<String> getPackageNameFromRepo(String repo) { |
+ // Clone the repo to a temp directory. |
+ return withTempDir((tempDir) { |
+ return _clone(repo, tempDir, shallow: true).then((_) { |
+ var pubspec = new Pubspec.load(tempDir, systemCache.sources); |
+ return pubspec.name; |
+ }); |
+ }); |
+ } |
+ |
/// Since we don't have an easy way to read from a remote Git repo, this |
/// just installs [id] into the system cache, then describes it from there. |
Future<Pubspec> describeUncached(PackageId id) { |
@@ -134,10 +150,10 @@ class GitSource extends CachedSource { |
var failures = 0; |
var packages = listDir(systemCacheRoot) |
- .where((entry) => dirExists(path.join(entry, ".git"))) |
- .map((packageDir) => new Package.load(null, packageDir, |
- systemCache.sources)) |
- .toList(); |
+ .where((entry) => dirExists(path.join(entry, ".git"))) |
+ .map((packageDir) => new Package.load(null, packageDir, |
+ systemCache.sources)) |
+ .toList(); |
// Note that there may be multiple packages with the same name and version |
// (pinned to different commits). The sort order of those is unspecified. |
@@ -222,13 +238,17 @@ class GitSource extends CachedSource { |
/// If [mirror] is true, create a bare, mirrored clone. This doesn't check out |
/// the working tree, but instead makes the repository a local mirror of the |
/// remote repository. See the manpage for `git clone` for more information. |
nweiz
2014/08/14 00:40:54
Document [shallow].
Bob Nystrom
2014/08/15 00:06:41
Done.
|
- Future _clone(String from, String to, {bool mirror: false}) { |
+ Future _clone(String from, String to, {bool mirror: false, |
+ bool shallow: false}) { |
return syncFuture(() { |
// Git on Windows does not seem to automatically create the destination |
// directory. |
ensureDir(to); |
var args = ["clone", from, to]; |
+ |
if (mirror) args.insert(1, "--mirror"); |
+ if (shallow) args.insertAll(1, ["--depth", "1"]); |
+ |
return git.run(args); |
}).then((result) => null); |
} |