Skip to content
This repository has been archived by the owner on Dec 15, 2021. It is now read-only.

fix implcit conversion of Resolver #3

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ lazy val commonSettings = Seq(
lazy val sbtGCSResolver =
Project("sbt-google-cloud-storage", file("."))
.settings(
version := "0.0.10",
version := "0.0.11",
organization := "com.lightbend",
scalaVersion := "2.12.6",

Expand All @@ -22,7 +22,7 @@ lazy val sbtGCSResolver =
),

sbtPlugin := true,
crossSbtVersions := Vector("1.0.2"),
crossSbtVersions := Vector("1.2.8"),

name := "sbt-google-cloud-storage",
description := "A SBT resolver and publisher for Google Cloud Storage",
Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version = 1.0.2
sbt.version = 1.2.8
14 changes: 3 additions & 11 deletions src/main/scala/com/lightbend/gcsplugin/GCSPlugin.scala
Original file line number Diff line number Diff line change
@@ -1,26 +1,18 @@
package com.lightbend.gcsplugin

import sbt.PluginTrigger
import sbt.AutoPlugin
import sbt.{AutoPlugin, PluginTrigger, Setting}

object GCSPlugin extends AutoPlugin {

trait Keys {
implicit def toSbtResolver(resolver: GCSResolver): sbt.Resolver = {
new sbt.RawRepository(resolver, resolver.getName)
}
}

object Keys extends Keys
object autoImport extends Keys {
object autoImport {
val GCSResolver = com.lightbend.gcsplugin.GCSResolver
val GCSPublisher = com.lightbend.gcsplugin.GCSPublisher
val AccessRights = com.lightbend.gcsplugin.AccessRights
}

import sbt.Keys._

override def projectSettings = Seq(
override def projectSettings: Seq[Setting[_]] = Seq(
publishMavenStyle := false
)

Expand Down
14 changes: 6 additions & 8 deletions src/main/scala/com/lightbend/gcsplugin/GCSRepository.scala
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
package com.lightbend.gcsplugin

import java.io.{ FileInputStream, _ }
import java.util
import java.io._
import java.io.FileInputStream

import scala.collection.JavaConverters._

import com.google.cloud.storage._
import com.google.cloud.storage.Storage
import com.google.cloud.storage.Bucket._
import com.google.cloud.storage.{ Storage, _ }
import com.lightbend.gcsplugin.AccessRights._
import org.apache.ivy.core.module.descriptor._
import org.apache.ivy.plugins.repository._

case class GCSRepository(bucketName: String, publishPolicy: AccessRigths) extends AbstractRepository {
import scala.collection.JavaConverters._

case class GCSRepository(bucketName: String, publishPolicy: AccessRights) extends AbstractRepository {
private val storage: Storage = StorageOptions.getDefaultInstance.getService
private val bucket = storage.get(bucketName)

Expand All @@ -30,7 +28,7 @@ case class GCSRepository(bucketName: String, publishPolicy: AccessRigths) extend
else
source

GCSResource.toFile(storage, GCSResource.create(storage, bucketName, extSource), destination)
GCSResource.download(storage, GCSResource.create(storage, bucketName, extSource), destination)
}

override def list(parent: String): util.List[String] = {
Expand Down
21 changes: 15 additions & 6 deletions src/main/scala/com/lightbend/gcsplugin/GCSResolver.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,34 @@ package com.lightbend.gcsplugin
import org.apache.ivy.plugins.resolver._
import sbt.librarymanagement._

import scala.language.implicitConversions

object AccessRights extends Enumeration {
type AccessRigths = Value
type AccessRights = Value
val PublicRead, InheritBucket = Value
}

import com.lightbend.gcsplugin.AccessRights._

object GCSResolver {
def forBucket(bucketName: String) = {
object GCSResolver extends Implicits {
def forBucket(bucketName: String): GCSResolver = {
new GCSResolver("Google Cloud Storage Resolver", bucketName, publishPolicy = AccessRights.InheritBucket)
}
}

object GCSPublisher {
def forBucket(bucketName: String, publishPolicy: AccessRigths) = {
object GCSPublisher extends Implicits {
def forBucket(bucketName: String, publishPolicy: AccessRights): GCSResolver = {
new GCSResolver("Google Cloud Storage Publisher", bucketName, publishPolicy)
}
}

class GCSResolver(name: String, bucketName: String, publishPolicy: AccessRigths) extends RepositoryResolver {
trait Implicits {
implicit def toSbtResolver(resolver: GCSResolver): sbt.Resolver = {
new sbt.RawRepository(resolver, resolver.getName)
}
}

class GCSResolver(name: String, bucketName: String, publishPolicy: AccessRights) extends RepositoryResolver {
setName(name)
setRepository(GCSRepository(bucketName, publishPolicy))
setM2compatible(false)
Expand Down
35 changes: 23 additions & 12 deletions src/main/scala/com/lightbend/gcsplugin/GCSResource.scala
Original file line number Diff line number Diff line change
@@ -1,44 +1,55 @@
package com.lightbend.gcsplugin

import java.io._
import java.io.File
import java.io.{ File, _ }
import java.nio.channels._

import com.google.cloud.storage._
import com.google.cloud.storage.BlobId
import com.google.cloud.storage.{ BlobId, _ }
import org.apache.ivy.plugins.repository._

object GCSResource {
def create(storage: Storage, bucketName: String, blobName: String): GCSResource = {
val blobId = BlobId.of(bucketName, blobName.replace("//", "/"))
val blob = storage.get(blobId)
val blob = storage.get(blobIdFromName(bucketName, blobName))
if (blob == null)
GCSResource(storage, bucketName, blobName, 0, 0, exists = false)
else
GCSResource(storage, bucketName, blobName, blob.getUpdateTime(), blob.getSize, exists = true)
}

def openStream(storage: Storage, resource: GCSResource): InputStream = {
val blobId = BlobId.of(resource.bucketName, resource.blobName.replace("//", "/"))
val blob = storage.get(blobId)
val blob = storage.get(blobIdFromName(resource.bucketName, resource.blobName))
Channels.newInputStream(blob.reader())
}
def toFile(storage: Storage, resource: GCSResource, file: File): Unit = {
val blobId = BlobId.of(resource.bucketName, resource.blobName.replace("//", "/"))
val blob = storage.get(blobId)

def download(storage: Storage, resource: GCSResource, file: File): Unit = {
val blob = storage.get(blobIdFromName(resource.bucketName, resource.blobName))
blob.downloadTo(file.toPath)
}

def blobIdFromName(bucketName: String, name: String): BlobId = {
BlobId.of(bucketName, name.replace("//", "/"))
}
}

case class GCSResource(storage: Storage, bucketName: String, blobName: String, lastModified: Long, contentLength: Long, exists: Boolean) extends Resource {
case class GCSResource(
storage: Storage,
bucketName: String,
blobName: String,
lastModified: Long,
contentLength: Long,
exists: Boolean) extends Resource {

override def getName: String = blobName

override def getLastModified: Long = lastModified

override def getContentLength: Long = contentLength

override def openStream(): InputStream = {
GCSResource.openStream(storage, this)
}

override def isLocal = false

override def clone(cloneName: String): Resource = copy()

}