diff --git a/main/Resolvers.scala b/main/Resolvers.scala index 1ad6a1c71..0e7d49e42 100644 --- a/main/Resolvers.scala +++ b/main/Resolvers.scala @@ -51,19 +51,27 @@ object Resolvers run(Some(in), "git", "checkout", "-q", branch) } - def retrieveLocalCopy(at: URI, into: File) = + def normalized(uri: URI) = uri.copy(scheme = "git") + + def retrieveLocalCopy(at: URI, into: File) = creates(into) {clone(at.withoutFragment.toASCIIString, into)} + + def retrieveBranch(branch: String, from: File, into: File) = { creates(into) { - clone(at.withoutFragment.toASCIIString, into) - if (at.hasFragment) - checkout(branch = at.getFragment, in = into) + clone(at = from.getAbsolutePath, into = into) + checkout(branch, in = into) } } val uri = info.uri + val staging = info.staging Some { () => - retrieveLocalCopy(at = uri, into = uniqueSubdirectoryFor(uri, in = info.staging)) + val localCopy = retrieveLocalCopy(at = uri, into = uniqueSubdirectoryFor(normalized(uri.withoutFragment), in = staging)) + if (uri.hasFragment) + retrieveBranch(branch = uri.getFragment, from = localCopy, into = uniqueSubdirectoryFor(normalized(uri), in = staging)) + else + localCopy } } diff --git a/util/io/RichURI.scala b/util/io/RichURI.scala index 7e46af660..1cd4cab48 100644 --- a/util/io/RichURI.scala +++ b/util/io/RichURI.scala @@ -8,6 +8,11 @@ import java.net.URI class RichURI(uri: URI) { + def copy(scheme: String = uri.getScheme, userInfo: String = uri.getUserInfo, + host: String = uri.getHost, port: Int = uri.getPort, path: String = uri.getPath, + query: String = uri.getQuery, fragment: String = uri.getFragment) = + new URI(scheme, userInfo, host, port, path, query, fragment) + def hasFragment = uri.getFragment ne null def withoutFragment =