Skip to content

Instantly share code, notes, and snippets.

@minimum2scp
Last active August 29, 2015 14:07
Show Gist options
  • Select an option

  • Save minimum2scp/d0ee3c1bee7192f34206 to your computer and use it in GitHub Desktop.

Select an option

Save minimum2scp/d0ee3c1bee7192f34206 to your computer and use it in GitHub Desktop.
multitask を使った Rakefile のテスト (see also: http://minimum2scp.org/graphviz/dot/b1b037f56548fb6f57e6cbb09d963ca761e4830a.svg.html)
mkdir -p flags
I, [2014-10-16T04:42:48.312609 #10793] INFO -- : [#<Thread:0x00000002222bd8>] >>> starting task01
I, [2014-10-16T04:42:48.313101 #10793] INFO -- : [#<Thread:0x000000022222f0>] >>> starting task02
I, [2014-10-16T04:42:48.314543 #10793] INFO -- : [#<Thread:0x000000022189d0>] >>> starting task03
I, [2014-10-16T04:42:48.315005 #10793] INFO -- : [#<Thread:0x00000002217da0>] >>> starting task04
I, [2014-10-16T04:42:48.316725 #10793] INFO -- : [#<Thread:0x00000002222bd8>] running 1 tasks: task01
I, [2014-10-16T04:42:48.317551 #10793] INFO -- : [#<Thread:0x000000022222f0>] running 3 tasks: task01 task02 task03
I, [2014-10-16T04:42:48.317785 #10793] INFO -- : [#<Thread:0x000000022189d0>] running 3 tasks: task01 task02 task03
I, [2014-10-16T04:42:48.319584 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 4 tasks: task01 task02 task03 task04
I, [2014-10-16T04:42:53.322660 #10793] INFO -- : [#<Thread:0x000000022189d0>] running 4 tasks: task01 task02 task03 task04
I, [2014-10-16T04:42:53.322894 #10793] INFO -- : [#<Thread:0x000000022189d0>] <<< finished task03
I, [2014-10-16T04:42:55.321598 #10793] INFO -- : [#<Thread:0x000000022222f0>] running 3 tasks: task01 task02 task04
I, [2014-10-16T04:42:55.321778 #10793] INFO -- : [#<Thread:0x000000022222f0>] <<< finished task02
I, [2014-10-16T04:42:55.322305 #10793] INFO -- : [#<Thread:0x00000002215bb8>] >>> starting task06
I, [2014-10-16T04:42:55.323032 #10793] INFO -- : [#<Thread:0x00000002215bb8>] running 3 tasks: task01 task04 task06
I, [2014-10-16T04:42:55.323842 #10793] INFO -- : [#<Thread:0x00000002215bb8>] task06 reads flags/task02.done
I, [2014-10-16T04:42:58.320655 #10793] INFO -- : [#<Thread:0x00000002222bd8>] running 3 tasks: task01 task04 task06
I, [2014-10-16T04:42:58.321005 #10793] INFO -- : [#<Thread:0x00000002222bd8>] <<< finished task01
I, [2014-10-16T04:42:58.321806 #10793] INFO -- : [#<Thread:0x00000002216f68>] >>> starting task05
I, [2014-10-16T04:42:58.322990 #10793] INFO -- : [#<Thread:0x00000002214538>] >>> starting task07
I, [2014-10-16T04:42:58.323565 #10793] INFO -- : [#<Thread:0x00000002216f68>] running 3 tasks: task04 task05 task06
I, [2014-10-16T04:42:58.324508 #10793] INFO -- : [#<Thread:0x00000002214538>] running 4 tasks: task04 task05 task06 task07
I, [2014-10-16T04:42:58.324933 #10793] INFO -- : [#<Thread:0x00000002216f68>] task05 reads flags/task01.done
I, [2014-10-16T04:42:58.327588 #10793] INFO -- : [#<Thread:0x00000002214538>] task07 reads flags/task01.done
I, [2014-10-16T04:42:58.327840 #10793] INFO -- : [#<Thread:0x00000002214538>] task07 reads flags/task02.done
I, [2014-10-16T04:42:59.323708 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 4 tasks: task04 task05 task06 task07
I, [2014-10-16T04:42:59.323935 #10793] INFO -- : [#<Thread:0x00000002217da0>] <<< finished task04
I, [2014-10-16T04:42:59.324653 #10793] INFO -- : [#<Thread:0x000000022189d0>] >>> starting task08
I, [2014-10-16T04:42:59.325423 #10793] INFO -- : [#<Thread:0x00000002217da0>] >>> starting task21
I, [2014-10-16T04:42:59.326356 #10793] INFO -- : [#<Thread:0x000000022189d0>] running 4 tasks: task05 task06 task07 task08
I, [2014-10-16T04:42:59.327441 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 5 tasks: task05 task06 task07 task08 task21
I, [2014-10-16T04:42:59.330013 #10793] INFO -- : [#<Thread:0x000000022189d0>] task08 reads flags/task03.done
I, [2014-10-16T04:42:59.330220 #10793] INFO -- : [#<Thread:0x000000022189d0>] task08 reads flags/task04.done
I, [2014-10-16T04:43:01.331623 #10793] INFO -- : [#<Thread:0x00000002214538>] running 5 tasks: task05 task06 task07 task08 task21
I, [2014-10-16T04:43:01.331851 #10793] INFO -- : [#<Thread:0x00000002214538>] <<< finished task07
I, [2014-10-16T04:43:02.331620 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 4 tasks: task05 task06 task08 task21
I, [2014-10-16T04:43:02.331881 #10793] INFO -- : [#<Thread:0x00000002217da0>] <<< finished task21
I, [2014-10-16T04:43:02.333030 #10793] INFO -- : [#<Thread:0x00000002214538>] >>> starting task22
I, [2014-10-16T04:43:02.333832 #10793] INFO -- : [#<Thread:0x00000002214538>] running 4 tasks: task05 task06 task08 task22
I, [2014-10-16T04:43:02.334015 #10793] INFO -- : [#<Thread:0x00000002214538>] task22 reads flags/task21.done
I, [2014-10-16T04:43:03.327978 #10793] INFO -- : [#<Thread:0x00000002215bb8>] running 4 tasks: task05 task06 task08 task22
I, [2014-10-16T04:43:03.328217 #10793] INFO -- : [#<Thread:0x00000002215bb8>] <<< finished task06
I, [2014-10-16T04:43:05.338026 #10793] INFO -- : [#<Thread:0x00000002214538>] running 3 tasks: task05 task08 task22
I, [2014-10-16T04:43:05.338230 #10793] INFO -- : [#<Thread:0x00000002214538>] <<< finished task22
I, [2014-10-16T04:43:05.338862 #10793] INFO -- : [#<Thread:0x00000002217da0>] >>> starting task23
I, [2014-10-16T04:43:05.340021 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 3 tasks: task05 task08 task23
I, [2014-10-16T04:43:05.340171 #10793] INFO -- : [#<Thread:0x00000002217da0>] task23 reads flags/task22.done
I, [2014-10-16T04:43:08.333400 #10793] INFO -- : [#<Thread:0x000000022189d0>] running 3 tasks: task05 task08 task23
I, [2014-10-16T04:43:08.333487 #10793] INFO -- : [#<Thread:0x000000022189d0>] <<< finished task08
I, [2014-10-16T04:43:08.333713 #10793] INFO -- : [#<Thread:0x000000022222f0>] >>> starting task09
I, [2014-10-16T04:43:08.334269 #10793] INFO -- : [#<Thread:0x000000022222f0>] running 3 tasks: task05 task09 task23
I, [2014-10-16T04:43:08.334377 #10793] INFO -- : [#<Thread:0x000000022222f0>] task09 reads flags/task07.done
I, [2014-10-16T04:43:08.334606 #10793] INFO -- : [#<Thread:0x000000022189d0>] >>> starting task31
I, [2014-10-16T04:43:08.334779 #10793] INFO -- : [#<Thread:0x000000022222f0>] task09 reads flags/task08.done
I, [2014-10-16T04:43:08.335150 #10793] INFO -- : [#<Thread:0x000000022189d0>] running 4 tasks: task05 task09 task23 task31
I, [2014-10-16T04:43:08.343438 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 4 tasks: task05 task09 task23 task31
I, [2014-10-16T04:43:08.343562 #10793] INFO -- : [#<Thread:0x00000002217da0>] <<< finished task23
I, [2014-10-16T04:43:08.346359 #10793] INFO -- : [#<Thread:0x00000002215bb8>] >>> starting task24
I, [2014-10-16T04:43:08.346892 #10793] INFO -- : [#<Thread:0x00000002215bb8>] running 4 tasks: task05 task09 task24 task31
I, [2014-10-16T04:43:08.347035 #10793] INFO -- : [#<Thread:0x00000002215bb8>] task24 reads flags/task23.done
I, [2014-10-16T04:43:10.329427 #10793] INFO -- : [#<Thread:0x00000002216f68>] running 4 tasks: task05 task09 task24 task31
I, [2014-10-16T04:43:10.329695 #10793] INFO -- : [#<Thread:0x00000002216f68>] <<< finished task05
I, [2014-10-16T04:43:11.349507 #10793] INFO -- : [#<Thread:0x00000002215bb8>] running 3 tasks: task09 task24 task31
I, [2014-10-16T04:43:11.349596 #10793] INFO -- : [#<Thread:0x00000002215bb8>] <<< finished task24
I, [2014-10-16T04:43:11.349968 #10793] INFO -- : [#<Thread:0x00000002214538>] >>> starting task25
I, [2014-10-16T04:43:11.350319 #10793] INFO -- : [#<Thread:0x00000002214538>] running 3 tasks: task09 task25 task31
I, [2014-10-16T04:43:11.350384 #10793] INFO -- : [#<Thread:0x00000002214538>] task25 reads flags/task24.done
I, [2014-10-16T04:43:12.337939 #10793] INFO -- : [#<Thread:0x000000022222f0>] running 3 tasks: task09 task25 task31
I, [2014-10-16T04:43:12.338275 #10793] INFO -- : [#<Thread:0x000000022222f0>] <<< finished task09
I, [2014-10-16T04:43:12.338985 #10793] INFO -- : [#<Thread:0x00000002222bd8>] >>> starting task10
I, [2014-10-16T04:43:12.339793 #10793] INFO -- : [#<Thread:0x000000022222f0>] >>> starting task41
I, [2014-10-16T04:43:12.340527 #10793] INFO -- : [#<Thread:0x000000022222f0>] running 4 tasks: task10 task25 task31 task41
I, [2014-10-16T04:43:12.343436 #10793] INFO -- : [#<Thread:0x00000002222bd8>] running 4 tasks: task10 task25 task31 task41
I, [2014-10-16T04:43:12.343855 #10793] INFO -- : [#<Thread:0x00000002222bd8>] task10 reads flags/task05.done
I, [2014-10-16T04:43:12.344015 #10793] INFO -- : [#<Thread:0x00000002222bd8>] task10 reads flags/task06.done
I, [2014-10-16T04:43:12.344150 #10793] INFO -- : [#<Thread:0x00000002222bd8>] task10 reads flags/task09.done
I, [2014-10-16T04:43:13.339267 #10793] INFO -- : [#<Thread:0x000000022189d0>] running 4 tasks: task10 task25 task31 task41
I, [2014-10-16T04:43:13.339494 #10793] INFO -- : [#<Thread:0x000000022189d0>] <<< finished task31
I, [2014-10-16T04:43:13.340228 #10793] INFO -- : [#<Thread:0x00000002217da0>] >>> starting task32
I, [2014-10-16T04:43:13.341980 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 4 tasks: task10 task25 task32 task41
I, [2014-10-16T04:43:13.342232 #10793] INFO -- : [#<Thread:0x00000002217da0>] task32 reads flags/task31.done
I, [2014-10-16T04:43:14.352568 #10793] INFO -- : [#<Thread:0x00000002214538>] running 4 tasks: task10 task25 task32 task41
I, [2014-10-16T04:43:14.352698 #10793] INFO -- : [#<Thread:0x00000002214538>] <<< finished task25
I, [2014-10-16T04:43:18.346073 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 3 tasks: task10 task32 task41
I, [2014-10-16T04:43:18.346212 #10793] INFO -- : [#<Thread:0x00000002217da0>] <<< finished task32
I, [2014-10-16T04:43:18.346766 #10793] INFO -- : [#<Thread:0x00000002217da0>] >>> starting task51
I, [2014-10-16T04:43:18.346905 #10793] INFO -- : [#<Thread:0x00000002216f68>] >>> starting task33
I, [2014-10-16T04:43:18.347769 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 4 tasks: task10 task33 task41 task51
I, [2014-10-16T04:43:18.348109 #10793] INFO -- : [#<Thread:0x00000002216f68>] running 4 tasks: task10 task33 task41 task51
I, [2014-10-16T04:43:18.350029 #10793] INFO -- : [#<Thread:0x00000002222bd8>] running 4 tasks: task10 task33 task41 task51
I, [2014-10-16T04:43:18.350114 #10793] INFO -- : [#<Thread:0x00000002222bd8>] <<< finished task10
I, [2014-10-16T04:43:18.350305 #10793] INFO -- : [#<Thread:0x00000002216f68>] task33 reads flags/task32.done
I, [2014-10-16T04:43:19.344555 #10793] INFO -- : [#<Thread:0x000000022222f0>] running 3 tasks: task33 task41 task51
I, [2014-10-16T04:43:19.344781 #10793] INFO -- : [#<Thread:0x000000022222f0>] <<< finished task41
I, [2014-10-16T04:43:19.345557 #10793] INFO -- : [#<Thread:0x000000022189d0>] >>> starting task42
I, [2014-10-16T04:43:19.346618 #10793] INFO -- : [#<Thread:0x000000022189d0>] running 3 tasks: task33 task42 task51
I, [2014-10-16T04:43:19.347221 #10793] INFO -- : [#<Thread:0x000000022189d0>] task42 reads flags/task41.done
I, [2014-10-16T04:43:23.352651 #10793] INFO -- : [#<Thread:0x00000002216f68>] running 3 tasks: task33 task42 task51
I, [2014-10-16T04:43:23.352808 #10793] INFO -- : [#<Thread:0x00000002216f68>] <<< finished task33
I, [2014-10-16T04:43:23.353344 #10793] INFO -- : [#<Thread:0x00000002215bb8>] >>> starting task34
I, [2014-10-16T04:43:23.354043 #10793] INFO -- : [#<Thread:0x00000002216f68>] >>> starting task61
I, [2014-10-16T04:43:23.354711 #10793] INFO -- : [#<Thread:0x00000002215bb8>] running 3 tasks: task34 task42 task51
I, [2014-10-16T04:43:23.355235 #10793] INFO -- : [#<Thread:0x00000002215bb8>] task34 reads flags/task33.done
I, [2014-10-16T04:43:23.357703 #10793] INFO -- : [#<Thread:0x00000002216f68>] running 4 tasks: task34 task42 task51 task61
I, [2014-10-16T04:43:24.351190 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 4 tasks: task34 task42 task51 task61
I, [2014-10-16T04:43:24.351408 #10793] INFO -- : [#<Thread:0x00000002217da0>] <<< finished task51
I, [2014-10-16T04:43:24.352061 #10793] INFO -- : [#<Thread:0x00000002222bd8>] >>> starting task52
I, [2014-10-16T04:43:24.353812 #10793] INFO -- : [#<Thread:0x00000002222bd8>] running 4 tasks: task34 task42 task52 task61
I, [2014-10-16T04:43:24.354007 #10793] INFO -- : [#<Thread:0x00000002222bd8>] task52 reads flags/task51.done
I, [2014-10-16T04:43:26.350727 #10793] INFO -- : [#<Thread:0x000000022189d0>] running 4 tasks: task34 task42 task52 task61
I, [2014-10-16T04:43:26.350833 #10793] INFO -- : [#<Thread:0x000000022189d0>] <<< finished task42
I, [2014-10-16T04:43:26.351111 #10793] INFO -- : [#<Thread:0x00000002214538>] >>> starting task43
I, [2014-10-16T04:43:26.351669 #10793] INFO -- : [#<Thread:0x00000002214538>] running 4 tasks: task34 task43 task52 task61
I, [2014-10-16T04:43:26.351735 #10793] INFO -- : [#<Thread:0x00000002214538>] task43 reads flags/task42.done
I, [2014-10-16T04:43:27.361106 #10793] INFO -- : [#<Thread:0x00000002216f68>] running 4 tasks: task34 task43 task52 task61
I, [2014-10-16T04:43:27.361333 #10793] INFO -- : [#<Thread:0x00000002216f68>] <<< finished task61
I, [2014-10-16T04:43:27.362038 #10793] INFO -- : [#<Thread:0x00000002217da0>] >>> starting task62
I, [2014-10-16T04:43:27.363965 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 4 tasks: task34 task43 task52 task62
I, [2014-10-16T04:43:27.364192 #10793] INFO -- : [#<Thread:0x00000002217da0>] task62 reads flags/task61.done
I, [2014-10-16T04:43:28.359104 #10793] INFO -- : [#<Thread:0x00000002215bb8>] running 4 tasks: task34 task43 task52 task62
I, [2014-10-16T04:43:28.359384 #10793] INFO -- : [#<Thread:0x00000002215bb8>] <<< finished task34
I, [2014-10-16T04:43:28.360530 #10793] INFO -- : [#<Thread:0x00000002215bb8>] >>> starting task71
I, [2014-10-16T04:43:28.361770 #10793] INFO -- : [#<Thread:0x00000002215bb8>] running 4 tasks: task43 task52 task62 task71
I, [2014-10-16T04:43:30.358226 #10793] INFO -- : [#<Thread:0x00000002222bd8>] running 4 tasks: task43 task52 task62 task71
I, [2014-10-16T04:43:30.358416 #10793] INFO -- : [#<Thread:0x00000002222bd8>] <<< finished task52
I, [2014-10-16T04:43:30.358962 #10793] INFO -- : [#<Thread:0x000000022222f0>] >>> starting task53
I, [2014-10-16T04:43:30.360568 #10793] INFO -- : [#<Thread:0x000000022222f0>] running 4 tasks: task43 task53 task62 task71
I, [2014-10-16T04:43:30.360776 #10793] INFO -- : [#<Thread:0x000000022222f0>] task53 reads flags/task52.done
I, [2014-10-16T04:43:30.365920 #10793] INFO -- : [#<Thread:0x00000002215bb8>] running 4 tasks: task43 task53 task62 task71
I, [2014-10-16T04:43:30.366079 #10793] INFO -- : [#<Thread:0x00000002215bb8>] <<< finished task71
I, [2014-10-16T04:43:30.366968 #10793] INFO -- : [#<Thread:0x00000002222bd8>] >>> starting task72
I, [2014-10-16T04:43:30.368309 #10793] INFO -- : [#<Thread:0x00000002222bd8>] running 4 tasks: task43 task53 task62 task72
I, [2014-10-16T04:43:30.368506 #10793] INFO -- : [#<Thread:0x00000002222bd8>] task72 reads flags/task71.done
I, [2014-10-16T04:43:31.368766 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 4 tasks: task43 task53 task62 task72
I, [2014-10-16T04:43:31.369047 #10793] INFO -- : [#<Thread:0x00000002217da0>] <<< finished task62
I, [2014-10-16T04:43:31.369844 #10793] INFO -- : [#<Thread:0x000000022189d0>] >>> starting task63
I, [2014-10-16T04:43:31.371670 #10793] INFO -- : [#<Thread:0x000000022189d0>] running 4 tasks: task43 task53 task63 task72
I, [2014-10-16T04:43:31.371944 #10793] INFO -- : [#<Thread:0x000000022189d0>] task63 reads flags/task62.done
I, [2014-10-16T04:43:32.373213 #10793] INFO -- : [#<Thread:0x00000002222bd8>] running 4 tasks: task43 task53 task63 task72
I, [2014-10-16T04:43:32.373435 #10793] INFO -- : [#<Thread:0x00000002222bd8>] <<< finished task72
I, [2014-10-16T04:43:32.374178 #10793] INFO -- : [#<Thread:0x00000002215bb8>] >>> starting task73
I, [2014-10-16T04:43:32.375695 #10793] INFO -- : [#<Thread:0x00000002215bb8>] running 4 tasks: task43 task53 task63 task73
I, [2014-10-16T04:43:32.375868 #10793] INFO -- : [#<Thread:0x00000002215bb8>] task73 reads flags/task72.done
I, [2014-10-16T04:43:33.354485 #10793] INFO -- : [#<Thread:0x00000002214538>] running 4 tasks: task43 task53 task63 task73
I, [2014-10-16T04:43:33.354714 #10793] INFO -- : [#<Thread:0x00000002214538>] <<< finished task43
I, [2014-10-16T04:43:34.380147 #10793] INFO -- : [#<Thread:0x00000002215bb8>] running 3 tasks: task53 task63 task73
I, [2014-10-16T04:43:34.380356 #10793] INFO -- : [#<Thread:0x00000002215bb8>] <<< finished task73
I, [2014-10-16T04:43:34.387757 #10793] INFO -- : [#<Thread:0x00000002217da0>] >>> starting task74
I, [2014-10-16T04:43:34.389325 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 3 tasks: task53 task63 task74
I, [2014-10-16T04:43:34.389548 #10793] INFO -- : [#<Thread:0x00000002217da0>] task74 reads flags/task73.done
I, [2014-10-16T04:43:35.376560 #10793] INFO -- : [#<Thread:0x000000022189d0>] running 3 tasks: task53 task63 task74
I, [2014-10-16T04:43:35.376787 #10793] INFO -- : [#<Thread:0x000000022189d0>] <<< finished task63
I, [2014-10-16T04:43:35.377584 #10793] INFO -- : [#<Thread:0x00000002216f68>] >>> starting task64
I, [2014-10-16T04:43:35.379232 #10793] INFO -- : [#<Thread:0x00000002216f68>] running 3 tasks: task53 task64 task74
I, [2014-10-16T04:43:35.379452 #10793] INFO -- : [#<Thread:0x00000002216f68>] task64 reads flags/task63.done
I, [2014-10-16T04:43:36.365349 #10793] INFO -- : [#<Thread:0x000000022222f0>] running 3 tasks: task53 task64 task74
I, [2014-10-16T04:43:36.365574 #10793] INFO -- : [#<Thread:0x000000022222f0>] <<< finished task53
I, [2014-10-16T04:43:36.394182 #10793] INFO -- : [#<Thread:0x00000002217da0>] running 2 tasks: task64 task74
I, [2014-10-16T04:43:36.394406 #10793] INFO -- : [#<Thread:0x00000002217da0>] <<< finished task74
I, [2014-10-16T04:43:36.395105 #10793] INFO -- : [#<Thread:0x00000002222bd8>] >>> starting task75
I, [2014-10-16T04:43:36.396512 #10793] INFO -- : [#<Thread:0x00000002222bd8>] running 2 tasks: task64 task75
I, [2014-10-16T04:43:36.396698 #10793] INFO -- : [#<Thread:0x00000002222bd8>] task75 reads flags/task74.done
I, [2014-10-16T04:43:38.399822 #10793] INFO -- : [#<Thread:0x00000002222bd8>] running 2 tasks: task64 task75
I, [2014-10-16T04:43:38.400043 #10793] INFO -- : [#<Thread:0x00000002222bd8>] <<< finished task75
I, [2014-10-16T04:43:39.383986 #10793] INFO -- : [#<Thread:0x00000002216f68>] running 1 tasks: task64
I, [2014-10-16T04:43:39.384196 #10793] INFO -- : [#<Thread:0x00000002216f68>] <<< finished task64
require 'rake/clean'
require 'logger'
directory "flags"
CLEAN.include "flags"
CLOBBER.include "deps.dot"
logger = Logger.new($stderr)
dependency_graph = []
provides_graph = {}
default_task_prerequisites = []
log_running_tasks = ->{
running_tasks = Dir.glob('flags/*.running').map{|f| File.basename(f, '.running')} - Dir.glob('flags/*.done').map{|f| File.basename(f, '.done')}
logger.info "[#{Thread.current}] running #{running_tasks.size} tasks: #{running_tasks.sort.join(' ')}"
}
define_multitask = ->(name, deps, body){
done_flag = "flags/#{name}.done"
run_flag = "flags/#{name}.running"
file done_flag => [ "flags" ] do |t|
Rake::Task[name].invoke
touch t.name, :verbose => false
end
file run_flag => ["flags" ] do |t|
touch t.name, :verbose => false
end
desc "#{name}"
multitask name => deps.map{|x| "flags/#{x}.done"} do |t,args|
logger.info "[#{Thread.current}] >>> starting #{t.name}"
Rake::Task[run_flag].invoke
log_running_tasks.call
t.prerequisites.each{ |f|
File.read(f)
logger.info "[#{Thread.current}] #{t.name} reads #{f}"
}
body.call
log_running_tasks.call
logger.info "[#{Thread.current}] <<< finished #{t.name}"
end
CLEAN.include done_flag
CLEAN.include run_flag
dependency_graph << [name]
deps.each do |dep|
dependency_graph << [name, dep]
end
provides_graph[name] ||= []
deps.each do |d|
provides_graph[d] ||= []
provides_graph[d] << name
end
default_task_prerequisites << done_flag
}
define_multitask["task01", [], ->{ system("sleep 10") }]
define_multitask["task02", [], ->{ system("sleep 7") }]
define_multitask["task03", [], ->{ system("sleep 5") }]
define_multitask["task04", [], ->{ system("sleep 11") }]
define_multitask["task05", ["task01"], ->{ system("sleep 12") }]
define_multitask["task06", ["task02"], ->{ system("sleep 8") }]
define_multitask["task07", ["task01", "task02"], ->{ system("sleep 3") }]
define_multitask["task08", ["task03", "task04"], ->{ system("sleep 9") }]
define_multitask["task09", ["task07", "task08"], ->{ system("sleep 4") }]
define_multitask["task10", ["task05", "task06", "task09"], ->{ system("sleep 6") }]
define_multitask["task21", [], ->{ system("sleep 3") }]
define_multitask["task22", ["task21"], ->{ system("sleep 3") }]
define_multitask["task23", ["task22"], ->{ system("sleep 3") }]
define_multitask["task24", ["task23"], ->{ system("sleep 3") }]
define_multitask["task25", ["task24"], ->{ system("sleep 3") }]
define_multitask["task31", [], ->{ system("sleep 5") }]
define_multitask["task32", ["task31"], ->{ system("sleep 5") }]
define_multitask["task33", ["task32"], ->{ system("sleep 5") }]
define_multitask["task34", ["task33"], ->{ system("sleep 5") }]
define_multitask["task41", [], ->{ system("sleep 7") }]
define_multitask["task42", ["task41"], ->{ system("sleep 7") }]
define_multitask["task43", ["task42"], ->{ system("sleep 7") }]
define_multitask["task51", [], ->{ system("sleep 6") }]
define_multitask["task52", ["task51"], ->{ system("sleep 6") }]
define_multitask["task53", ["task52"], ->{ system("sleep 6") }]
define_multitask["task61", [], ->{ system("sleep 4") }]
define_multitask["task62", ["task61"], ->{ system("sleep 4") }]
define_multitask["task63", ["task62"], ->{ system("sleep 4") }]
define_multitask["task64", ["task63"], ->{ system("sleep 4") }]
define_multitask["task71", [], ->{ system("sleep 2") }]
define_multitask["task72", ["task71"], ->{ system("sleep 2") }]
define_multitask["task73", ["task72"], ->{ system("sleep 2") }]
define_multitask["task74", ["task73"], ->{ system("sleep 2") }]
define_multitask["task75", ["task74"], ->{ system("sleep 2") }]
multitask :default => default_task_prerequisites
require 'tsort'
class Hash
include TSort
alias tsort_each_node each_key
def tsort_each_child(node, &block)
fetch(node).each(&block)
end
end
multitask :default_with_tsort => provides_graph.tsort.map{|t| "flags/#{t}.done"}
desc "task dependency graph"
file "deps.dot" => "Rakefile" do |t|
File.open(t.name, "w") do |fh|
fh << "digraph G {\n"
dependency_graph.each do |name, dep|
if dep
fh << " \"#{dep}\" -> \"#{name}\";\n"
else
fh << " \"default\" -> \"#{name}\" [style=dotted, arrowhead=empty];\n"
end
end
fh << "}\n"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment