Skip to content

Commit

Permalink
add patched version of sbt.util.Changed (see discussion in sbt#57)
Browse files Browse the repository at this point in the history
  • Loading branch information
godenji committed Aug 10, 2017
1 parent 703c585 commit 71a91b0
Showing 1 changed file with 24 additions and 3 deletions.
27 changes: 24 additions & 3 deletions src/main/scala-sbt-1.0/com/typesafe/sbt/SbtCompat.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.typesafe.sbt

import java.io.File
import sbt.{Changed, FileInfo}
import sbt.util.{CacheStore, CacheStoreFactory}
import sbt.FileInfo
import sbt.util.{CacheStore, CacheStoreFactory, Tracked}
import sjsonnew.JsonFormat

object SbtCompat {
Expand All @@ -14,5 +14,26 @@ object SbtCompat {
sbt.FileFunction.cached(CacheStoreFactory(cacheBaseDirectory), inStyle, outStyle)(action)
}

def changed[O: Equiv: JsonFormat](store: File): Changed[O] = new Changed[O](CacheStore(store))
def changed[O: Equiv: JsonFormat](store: File) = {
new Changed[O](CacheStore(store))
}

private[sbt] class Changed[O: Equiv: JsonFormat](val store: CacheStore) extends Tracked {
def clean() = store.delete()

def apply[O2](ifChanged: O => O2, ifUnchanged: O => O2): O => O2 = value => {
if (uptodate(value)) ifUnchanged(value)
else {
update(value)
ifChanged(value)
}
}

def update(value: O): Unit = store.write(value)
def uptodate(value: O): Boolean = {
val equiv: Equiv[O] = implicitly
try { equiv.equiv(value, store.read[O]) }
catch { case _: Exception => false }
}
}
}

0 comments on commit 71a91b0

Please sign in to comment.