scala - Wrapping an existing task with custom tasks -


suppose have 2 tasks, dostart , dostop, , want wrap existing task (e.g. test) in these tasks. following not work:

test := def.sequential(dostart, test, dostop).value 

it fails @ runtime error unresolved setting key. think quite natural, because def.sequential expands nested sequence of def.taskdyn, , since test task referenced in middle task, "new" value requested, @ moment apparently unavailable:

test := def.taskdyn {   dostart.value   def.taskdyn {     test.value     dostop   } }.value 

if introduce temporary task , wrap instead of test:

val _testoriginal = taskkey[unit]("used wrapping.")  _testoriginal := test.value  test := def.sequential(dostart, _testoriginal, dostop) 

then not error seems infinite loop because dostart executed sbt hangs indefinitely without invoking original test task. seems natural because _testoriginal depends on current value of test, not original one.

the "solution" see introduce own tasks named testwrapped, testquickwrapped, etc. , tell users of build use them instead of test/testquick/etc., don't want it. so, how wrap existing task?

test := dostop.dependson(test.dependson(dostart)).value 

though fyi, in case of tests, make dostart , dostop not tasks, rather vanilla functions, , use provided testoptions facility.

testoptions in test += tests.setup(() => ...)  testoptions in test += tests.cleanup(() => ... ) 

Comments