mirror of https://github.com/sbt/sbt.git
Task.doFinally
This commit is contained in:
parent
171cbeb9ce
commit
fdb4a98d8b
|
|
@ -31,4 +31,9 @@ object Result
|
|||
case Inc(i) => throw i
|
||||
}
|
||||
}
|
||||
def tryValues[S](r: Seq[Result[Unit]], v: Result[S]): S =
|
||||
{
|
||||
r foreach tryValue[Unit]
|
||||
tryValue[S](v)
|
||||
}
|
||||
}
|
||||
|
|
@ -28,6 +28,7 @@ sealed trait SingleInTask[S]
|
|||
def mapFailure[T](f: Incomplete => T): Task[T]
|
||||
def dependsOn(tasks: Task[_]*): Task[S]
|
||||
def andFinally(fin: => Unit): Task[S]
|
||||
def doFinally(t: Task[Unit]): Task[S]
|
||||
|
||||
def || [T >: S](alt: Task[T]): Task[T]
|
||||
def && [T](alt: Task[T]): Task[T]
|
||||
|
|
@ -224,6 +225,7 @@ trait TaskExtra
|
|||
def mapFailure[T](f: Incomplete => T): Task[T] = mapR(f compose failM)
|
||||
|
||||
def andFinally(fin: => Unit): Task[S] = mapR(x => Result.tryValue[S]( { fin; x }))
|
||||
def doFinally(t: Task[Unit]): Task[S] = flatMapR(x => t.mapR { tx => Result.tryValues[S](tx :: Nil, x) })
|
||||
def || [T >: S](alt: Task[T]): Task[T] = flatMapR { case Value(v) => task(v); case Inc(i) => alt }
|
||||
def && [T](alt: Task[T]): Task[T] = flatMap( _ => alt )
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue