diff --git a/main/src/main/scala/sbt/Resolvers.scala b/main/src/main/scala/sbt/Resolvers.scala index df44855bc..e3758a687 100644 --- a/main/src/main/scala/sbt/Resolvers.scala +++ b/main/src/main/scala/sbt/Resolvers.scala @@ -67,17 +67,25 @@ object Resolvers { } }.toResolver - val git: Resolver = new DistributedVCS { - override val scheme = "git" + val git: Resolver = (info: ResolveInfo) => { + val uri = info.uri.withoutMarkerScheme + val localCopy = uniqueSubdirectoryFor(uri.copy(scheme = "git"), in = info.staging) + val from = uri.withoutFragment.toASCIIString - override def clone(from: String, to: File) { - run("git", "clone", from, to.getAbsolutePath) + if (uri.hasFragment) { + val branch = uri.getFragment + Some { () => + creates(localCopy) { + run("git", "clone", from, localCopy.getAbsolutePath) + run(Some(localCopy), "git", "checkout", "-q", branch) + } + } + } else Some { () => + creates(localCopy) { + run("git", "clone", "--depth", "1", from, localCopy.getAbsolutePath) + } } - - override def checkout(branch: String, in: File) { - run(Some(in), "git", "checkout", "-q", branch) - } - }.toResolver + } abstract class DistributedVCS { val scheme: String