2009-08-26 14:38:20 +02:00
|
|
|
package xsbt
|
|
|
|
|
|
2009-08-29 16:19:00 +02:00
|
|
|
object ChangeReport
|
|
|
|
|
{
|
|
|
|
|
def modified[T](files: Set[T]) =
|
|
|
|
|
new EmptyChangeReport[T]
|
|
|
|
|
{
|
|
|
|
|
override def allInputs = files
|
|
|
|
|
override def modified = files
|
|
|
|
|
override def markAllModified = this
|
|
|
|
|
}
|
|
|
|
|
def unmodified[T](files: Set[T]) =
|
|
|
|
|
new EmptyChangeReport[T]
|
|
|
|
|
{
|
|
|
|
|
override def allInputs = files
|
|
|
|
|
override def unmodified = files
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-08-26 14:38:20 +02:00
|
|
|
trait ChangeReport[T] extends NotNull
|
|
|
|
|
{
|
|
|
|
|
def allInputs: Set[T]
|
|
|
|
|
def unmodified: Set[T]
|
|
|
|
|
def modified: Set[T] // all changes, including added
|
|
|
|
|
def added: Set[T]
|
|
|
|
|
def removed: Set[T]
|
|
|
|
|
def +++(other: ChangeReport[T]): ChangeReport[T] = new CompoundChangeReport(this, other)
|
2009-08-29 16:19:00 +02:00
|
|
|
def markAllModified: ChangeReport[T] =
|
|
|
|
|
new ChangeReport[T]
|
|
|
|
|
{
|
|
|
|
|
def allInputs = ChangeReport.this.allInputs
|
|
|
|
|
def unmodified = Set.empty[T]
|
|
|
|
|
def modified = ChangeReport.this.allInputs
|
|
|
|
|
def added = ChangeReport.this.added
|
|
|
|
|
def removed = ChangeReport.this.removed
|
|
|
|
|
override def markAllModified = this
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
class EmptyChangeReport[T] extends ChangeReport[T]
|
|
|
|
|
{
|
|
|
|
|
def allInputs = Set.empty[T]
|
|
|
|
|
def unmodified = Set.empty[T]
|
|
|
|
|
def modified = Set.empty[T]
|
|
|
|
|
def added = Set.empty[T]
|
|
|
|
|
def removed = Set.empty[T]
|
2009-08-26 14:38:20 +02:00
|
|
|
}
|
|
|
|
|
trait InvalidationReport[T] extends NotNull
|
|
|
|
|
{
|
|
|
|
|
def valid: Set[T]
|
|
|
|
|
def invalid: Set[T]
|
|
|
|
|
def invalidProducts: Set[T]
|
|
|
|
|
}
|
|
|
|
|
private class CompoundChangeReport[T](a: ChangeReport[T], b: ChangeReport[T]) extends ChangeReport[T]
|
|
|
|
|
{
|
|
|
|
|
lazy val allInputs = a.allInputs ++ b.allInputs
|
|
|
|
|
lazy val unmodified = a.unmodified ++ b.unmodified
|
|
|
|
|
lazy val modified = a.modified ++ b.modified
|
|
|
|
|
lazy val added = a.added ++ b.added
|
|
|
|
|
lazy val removed = a.removed ++ b.removed
|
|
|
|
|
}
|