Sha256: 152253070b56d0992b18908af5d28fdc697be1dff987f3dd92e6db188a3d27c6

Contents?: true

Size: 1.56 KB

Versions: 19

Compression:

Stored size: 1.56 KB

Contents

package s3.website

import s3.website.model._
import s3.website.Ruby.rubyRegexMatches
import s3.website._

object Diff {

  def resolveDeletes(localFiles: Seq[LocalFile], s3Files: Seq[S3File], redirects: Seq[Upload with UploadTypeResolved])(implicit config: Config): Seq[S3File] = {
    val keysNotToBeDeleted: Set[String] = (localFiles ++ redirects).map(_.s3Key).toSet
    s3Files.filterNot { s3File =>
      val ignoreOnServer = config.ignore_on_server.exists(_.fold(
        (ignoreRegex: String)        => rubyRegexMatches(s3File.s3Key, ignoreRegex),
        (ignoreRegexes: Seq[String]) => ignoreRegexes.exists(rubyRegexMatches(s3File.s3Key, _))
      ))
      keysNotToBeDeleted.exists(_ == s3File.s3Key) || ignoreOnServer
    }
  }

  def resolveNewFiles(localFiles: Seq[LocalFile], s3Files: Seq[S3File])(implicit config: Config):
  Stream[Either[ErrorReport, Upload with UploadTypeResolved]] = {
    val remoteS3KeysIndex = s3Files.map(_.s3Key).toSet
    localFiles
      .toStream // Load lazily, because the MD5 computation for the local file requires us to read the whole file
      .map(resolveUploadSource)
      .collect {
      case errorOrUpload if errorOrUpload.right.exists(isNewUpload(remoteS3KeysIndex)) =>
        for (upload <- errorOrUpload.right) yield upload withUploadType NewFile
    }
  }

  def isNewUpload(remoteS3KeysIndex: Set[String])(u: Upload) = !remoteS3KeysIndex.exists(_ == u.s3Key)

  def resolveUploadSource(localFile: LocalFile)(implicit config: Config): Either[ErrorReport, Upload] =
    for (upload <- LocalFile.toUpload(localFile).right)
    yield upload
}

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
s3_website_monadic-0.0.30 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.29 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.28 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.27 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.26 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.25 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.24 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.23 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.22 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.21 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.20 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.19 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.18 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.16 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.15 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.14 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.13 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.12 src/main/scala/s3/website/Diff.scala
s3_website_monadic-0.0.11 src/main/scala/s3/website/Diff.scala