mirror of https://github.com/sbt/sbt.git
Fix URL resolver so that we can push Maven artifacts to local maven repositories.
* Hook "LocalIfFile" repository to also handle publishing * Add test to ensure mavne publishign works.
This commit is contained in:
parent
305d34d011
commit
704d823849
|
|
@ -9,12 +9,13 @@ import org.apache.ivy.core.module.id.ModuleRevisionId
|
||||||
import org.apache.ivy.core.module.descriptor.DependencyDescriptor
|
import org.apache.ivy.core.module.descriptor.DependencyDescriptor
|
||||||
import org.apache.ivy.core.resolve.ResolveData
|
import org.apache.ivy.core.resolve.ResolveData
|
||||||
import org.apache.ivy.core.settings.IvySettings
|
import org.apache.ivy.core.settings.IvySettings
|
||||||
|
import org.apache.ivy.plugins.repository.{ RepositoryCopyProgressListener, TransferEvent }
|
||||||
import org.apache.ivy.plugins.resolver.{ BasicResolver, DependencyResolver, IBiblioResolver, RepositoryResolver }
|
import org.apache.ivy.plugins.resolver.{ BasicResolver, DependencyResolver, IBiblioResolver, RepositoryResolver }
|
||||||
import org.apache.ivy.plugins.resolver.{ AbstractPatternsBasedResolver, AbstractSshBasedResolver, FileSystemResolver, SFTPResolver, SshResolver, URLResolver }
|
import org.apache.ivy.plugins.resolver.{ AbstractPatternsBasedResolver, AbstractSshBasedResolver, FileSystemResolver, SFTPResolver, SshResolver, URLResolver }
|
||||||
import org.apache.ivy.plugins.repository.url.{ URLRepository => URLRepo }
|
import org.apache.ivy.plugins.repository.url.{ URLRepository => URLRepo }
|
||||||
import org.apache.ivy.plugins.repository.file.{ FileRepository => FileRepo, FileResource }
|
import org.apache.ivy.plugins.repository.file.{ FileRepository => FileRepo, FileResource }
|
||||||
import java.io.File
|
import java.io.{ IOException, File }
|
||||||
import org.apache.ivy.util.ChecksumHelper
|
import org.apache.ivy.util.{ FileUtil, ChecksumHelper }
|
||||||
import org.apache.ivy.core.module.descriptor.{ Artifact => IArtifact }
|
import org.apache.ivy.core.module.descriptor.{ Artifact => IArtifact }
|
||||||
|
|
||||||
private[sbt] object ConvertResolver {
|
private[sbt] object ConvertResolver {
|
||||||
|
|
@ -216,6 +217,7 @@ private[sbt] object ConvertResolver {
|
||||||
*/
|
*/
|
||||||
private[this] final class LocalIfFileRepo extends URLRepo {
|
private[this] final class LocalIfFileRepo extends URLRepo {
|
||||||
private[this] val repo = new WarnOnOverwriteFileRepo()
|
private[this] val repo = new WarnOnOverwriteFileRepo()
|
||||||
|
private[this] val progress = new RepositoryCopyProgressListener(this);
|
||||||
override def getResource(source: String) = {
|
override def getResource(source: String) = {
|
||||||
val url = new URL(source)
|
val url = new URL(source)
|
||||||
if (url.getProtocol == IO.FileScheme)
|
if (url.getProtocol == IO.FileScheme)
|
||||||
|
|
@ -223,6 +225,35 @@ private[sbt] object ConvertResolver {
|
||||||
else
|
else
|
||||||
super.getResource(source)
|
super.getResource(source)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override def put(source: File, destination: String, overwrite: Boolean): Unit = {
|
||||||
|
val url = new URL(destination)
|
||||||
|
if (url.getProtocol != IO.FileScheme) super.put(source, destination, overwrite)
|
||||||
|
else {
|
||||||
|
// Here we duplicate the put method for files so we don't just bail on trying ot use Http handler
|
||||||
|
val resource = getResource(destination)
|
||||||
|
if (!overwrite && resource.exists()) {
|
||||||
|
throw new IOException("destination file exists and overwrite == false");
|
||||||
|
}
|
||||||
|
fireTransferInitiated(resource, TransferEvent.REQUEST_PUT);
|
||||||
|
try {
|
||||||
|
var totalLength = source.length
|
||||||
|
if (totalLength > 0) {
|
||||||
|
progress.setTotalLength(totalLength);
|
||||||
|
}
|
||||||
|
FileUtil.copy(source, new java.io.File(url.toURI), progress)
|
||||||
|
} catch {
|
||||||
|
case ex: IOException =>
|
||||||
|
fireTransferError(ex)
|
||||||
|
throw ex
|
||||||
|
case ex: RuntimeException =>
|
||||||
|
fireTransferError(ex)
|
||||||
|
throw ex
|
||||||
|
} finally {
|
||||||
|
progress.setTotalLength(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private[this] final class WarnOnOverwriteFileRepo extends FileRepo() {
|
private[this] final class WarnOnOverwriteFileRepo extends FileRepo() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue