删除orb forr for sbt 0.11

时间:2013-10-02 16:41:20

标签: sbt

我正在维护一些类似于这种双层解决方法的代码:

import AssemblyKeys._   
lazy val assemblySettings: Seq[sbt.Project.Setting[_]] = baseAssemblySettings

implicit def wrapTaskKey[T](key: TaskKey[T]): WrappedTaskKey[T] = WrappedTaskKey(key) 
case class WrappedTaskKey[A](key: TaskKey[A]) {
  def orr[T >: A](rhs: Initialize[Task[T]]): Initialize[Task[T]] =
    (key.? zipWith rhs)( (x,y) => (x :^: y :^: KNil) map Scoped.hf2( _ getOrElse _ ))
}

lazy val baseAssemblySettings: Seq[sbt.Project.Setting[_]] = Seq(
  test <<= test orr (test in Test).identity,
  test in assembly <<= (test in Test).identity,
)

(来自here)。

我应该如何完全删除此变通办法的两个“层”,因为在sbt&gt; = 0.12中显然不再需要它们了?

2 个答案:

答案 0 :(得分:2)

  

我甚至不确定是否仍然需要。

不再需要了。

or#202 (Task-scoped keys)的解决方法,适用于sbt 0.10。这个但是根据评论在sbt 0.12修复了。让我们在sbt 0.13中测试一下:

helloworld> set test in Compile in compile := {}
[info] Defining helloworld/compile:compile::test
helloworld> inspect test
[info] Task: Unit
[info] Description:
[info]  Executes all tests.
[info] Provided by:
[info]  {file:/Users/eed3si9n/work/helloworld/}helloworld/test:test
....

所以我们明白#202。事实上,我上周(2013年9月28日)将sbt-assembly中的or重新布线为0.10.0,现在它看起来像这样:

// test
test in assembly := (test in Test).value,

ORR

orr#204 ("Reference to undefined setting" while using an optional key)的解决方法,它在sbt 0.11.0中打破or并根据标记修复为0.11.1。由于我们不再需要or,这有点没有实际意义,但在sbt 0.11.1之后我们不需要orr

为避免进一步混淆,我从非官方指南中删除了该部分,并链接到github以获取历史兴趣。

答案 1 :(得分:0)

查看sbt-assembly的日志,只需删除wrapTaskKeyWrappedTaskKey并将orr替换为or即可。

我不确定即使or仍然是必要的。但我根本不理解这段代码。