-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathConditionalKeys.scala
70 lines (63 loc) · 1.59 KB
/
ConditionalKeys.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import sbt.Keys.skip
import sbt.{Def, InputKey, InputTask, Task, TaskKey}
object ConditionalKeys {
def settingDefaultIfSetting[A, B](
setting: Def.Initialize[A],
condition: Def.Initialize[B],
default: => A
)(
p: B => Boolean
): Def.Initialize[A] = Def.setting {
if (p(condition.value)) {
default
} else {
setting.value
}
}
def taskDefaultIfSkipped[A](task: TaskKey[A], default: => A): Def.Initialize[Task[A]] =
taskDefaultIfTask(task, task / skip, default)(identity)
def taskDefaultIfSetting[A, B](
task: Def.Initialize[Task[A]],
condition: Def.Initialize[B],
default: => A
)(
p: B => Boolean
): Def.Initialize[Task[A]] = Def.taskIf {
if (p(condition.value)) {
default
} else {
task.value
}
}
def taskDefaultIfTask[A, B](
task: Def.Initialize[Task[A]],
condition: Def.Initialize[Task[B]],
default: => A
)(
p: B => Boolean
): Def.Initialize[Task[A]] = Def.taskIf {
if (p(condition.value)) {
default
} else {
task.value
}
}
def inputDefaultIfSkipped[A](input: InputKey[A], default: => A): Def.Initialize[InputTask[A]] =
inputDefaultIfTask(input, input / skip, default)(identity)
def inputDefaultIfTask[A, B](
input: InputKey[A],
condition: Def.Initialize[Task[B]],
default: => A
)(
p: B => Boolean
): Def.Initialize[InputTask[A]] = Def.inputTaskDyn {
val task = input.parsed
Def.taskIf {
if (p(condition.value)) {
default
} else {
task.value
}
}
}
}