s3_website_monadic 0.0.34 → 0.0.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 544c3317c4db01041c932fdd6d3dc7a49879e019
4
- data.tar.gz: a2671f82df2738ba303cf1c904bfe33235c7d1c7
3
+ metadata.gz: 0a588d29f02ef097314aa16ec55674fa6eccbe09
4
+ data.tar.gz: caf04222e53fdd2cacdadcc6897f9d59cfd7b850
5
5
  SHA512:
6
- metadata.gz: bfad7b5247239f3a68f1e8ffb2dba18deccb5324553ce9eff9dd3f2095d4807954e798a2c575a96c3b680674557236abed540bb5d1ca2a8a9a5a8c5637383fb8
7
- data.tar.gz: 1880cd8113663882568d7754f61b886040f9c35db400f1c12362ba0aa8a2d87fd40a415e095024577105bfc030a3957d886af8f03c9a05603e702e394232c176
6
+ metadata.gz: 61d6891706690b50a98966cd6860e0680ccd9e478f5a1ec2fc0c0c92a0af6e42777c546486d826177b85c73a3911eeabce9ec4b1a32f2b8a645778f99d7ad771
7
+ data.tar.gz: 0d49bbcd125387e1d9fcbd8346e784ff4f4957e30ecc0839fcb2714680a68c3a4bc9f7ddfacfc63238fd542d7dc013d63af61ed4a2d09d8d2cdb25cf17c273d3
@@ -1,3 +1,3 @@
1
1
  module S3Website
2
- VERSION = '0.0.34'
2
+ VERSION = '0.0.35'
3
3
  end
@@ -151,15 +151,20 @@ object Diff {
151
151
 
152
152
  val changesMissedByLocalDiff: Future[Either[ErrorReport, Seq[LocalFileFromDisk]]] = s3FilesFuture.map { errorOrS3Files =>
153
153
  for (s3Files <- errorOrS3Files.right) yield {
154
+ val remoteS3Keys = s3Files.map(_.s3Key).toSet
154
155
  val localS3Keys = unchangedAccordingToLocalDiff.map(_.s3Key).toSet
155
156
  val localMd5 = unchangedAccordingToLocalDiff.map(_.uploadFileMd5).toSet
156
- val changedOnS3 = s3Files.filter { s3File =>
157
- (localS3Keys contains s3File.s3Key) && !(localMd5 contains s3File.md5)
157
+ def isChangedOnS3(s3File: S3File) = (localS3Keys contains s3File.s3Key) && !(localMd5 contains s3File.md5)
158
+ val changedOnS3 = s3Files collect {
159
+ case s3File if isChangedOnS3(s3File) =>
160
+ LocalFileFromDisk(site resolveFile s3File, FileUpdate)
158
161
  }
159
- logger.debug(s"Detected ${changedOnS3.length} object(s) that have changed on S3 but not on the local site")
160
- changedOnS3 map { s3File =>
161
- LocalFileFromDisk(site resolveFile s3File, FileUpdate)
162
+ val missingFromS3 = localS3Keys collect {
163
+ case localS3Key if !(remoteS3Keys contains localS3Key) =>
164
+ LocalFileFromDisk(site resolveFile localS3Key, NewFile)
165
+
162
166
  }
167
+ changedOnS3 ++ missingFromS3
163
168
  }
164
169
  }
165
170
 
@@ -27,6 +27,7 @@ import s3.website.Push.{push, CliArgs}
27
27
  import s3.website.CloudFront.CloudFrontSetting
28
28
  import s3.website.S3.S3Setting
29
29
  import org.apache.commons.codec.digest.DigestUtils
30
+ import java.util.Date
30
31
 
31
32
  class S3WebsiteSpec extends Specification {
32
33
 
@@ -588,6 +589,15 @@ class S3WebsiteSpec extends Specification {
588
589
  push
589
590
  sentPutObjectRequests.length must equalTo(2)
590
591
  }
592
+
593
+ "push locally unchanged files that are missing from S3" in new AllInSameDirectory with EmptySite with MockAWS with DefaultRunMode {
594
+ setLocalFileWithContentAndLastModified(("file.txt", "contents", new Date(1400000000000L)))
595
+ push
596
+ // Simulate the situation where someone else has deleted file.txt, and we push for the second time
597
+ setLocalFileWithContentAndLastModified(("file.txt", "contents", new Date(1400000000000L)))
598
+ push
599
+ sentPutObjectRequests.length must equalTo(2) // Even though we use the local db, we should notice that someone else has deleted file.txt
600
+ }
591
601
  }
592
602
 
593
603
  "Jekyll site" should {
@@ -785,11 +795,15 @@ class S3WebsiteSpec extends Specification {
785
795
 
786
796
  trait EmptySite extends Directories {
787
797
  type LocalFileWithContent = (String, String)
798
+ type LocalFileWithContentAndLastModified = (String, String, Date)
788
799
 
789
- val localFilesWithContent: mutable.Set[LocalFileWithContent] = mutable.Set()
800
+ val localFilesWithContent: mutable.Set[LocalFileWithContentAndLastModified] = mutable.Set()
790
801
  def setLocalFile(fileName: String) = setLocalFileWithContent((fileName, ""))
791
802
  def setLocalFiles(fileNames: String*) = fileNames foreach setLocalFile
792
- def setLocalFileWithContent(fileNameAndContent: LocalFileWithContent) = localFilesWithContent += fileNameAndContent
803
+ def setLocalFileWithContent(fileNameAndContent: LocalFileWithContent) =
804
+ setLocalFileWithContentAndLastModified((fileNameAndContent._1, fileNameAndContent._2, new Date))
805
+ def setLocalFileWithContentAndLastModified(fileNameAndContentAndLastModified: LocalFileWithContentAndLastModified) =
806
+ localFilesWithContent += fileNameAndContentAndLastModified
793
807
  def setLocalFilesWithContent(fileNamesAndContent: LocalFileWithContent*) = fileNamesAndContent foreach setLocalFileWithContent
794
808
  var config = ""
795
809
  val baseConfig =
@@ -802,15 +816,16 @@ class S3WebsiteSpec extends Specification {
802
816
  implicit def cliArgs: CliArgs = siteWithFilesAndContent(config, localFilesWithContent)
803
817
  def pushMode: PushMode // Represents the --dry-run switch
804
818
 
805
- private def siteWithFilesAndContent(config: String = "", localFilesWithContent: mutable.Set[LocalFileWithContent]): CliArgs = {
819
+ private def siteWithFilesAndContent(config: String = "", localFilesWithContent: mutable.Set[LocalFileWithContentAndLastModified]): CliArgs = {
806
820
  localFilesWithContent.foreach {
807
- case (filePath, content) =>
821
+ case (filePath, content, lastModified) =>
808
822
  val file = new File(siteDirectory, filePath)
809
823
  forceMkdir(file.getParentFile)
810
824
  file.createNewFile()
811
825
  write(file, content)
812
- localFilesWithContent remove(filePath, content) // Remove the file from the set once we've persisted it on the disk.
826
+ file.setLastModified(lastModified.getTime)
813
827
  }
828
+ localFilesWithContent.clear() // Once we've persisted the changes on the disk, clear the queue. I.e., keep the state where it should be – on the disk.
814
829
  buildCliArgs(config)
815
830
  }
816
831
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3_website_monadic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.34
4
+ version: 0.0.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lauri Lehmijoki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-27 00:00:00.000000000 Z
11
+ date: 2014-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor