diff --git a/.bazelversion b/.bazelversion index 1140becc..2b0aa212 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -lucidsoftware/8.1.999 +8.2.1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 665e3f73..134baadd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-24.04] - bazel_version: [lucidsoftware/8.1.999] + bazel_version: [lucidsoftware/8.2.1] steps: - uses: actions/checkout@v3 - uses: bazel-contrib/setup-bazel@0.9.0 diff --git a/MODULE.bazel b/MODULE.bazel index 73b99980..1e66a96d 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -2,7 +2,7 @@ module(name = "rules_scala_annex") bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "protobuf", version = "29.3") -bazel_dep(name = "rules_java", version = "8.9.0") +bazel_dep(name = "rules_java", version = "8.11.0") bazel_dep(name = "rules_jvm_external", version = "6.5") bazel_dep(name = "buildifier_prebuilt", version = "7.3.1", dev_dependency = True) @@ -24,13 +24,13 @@ register_toolchains( # so we have to copy them here. scala_2_12_version = "2.12.19" -scala_2_13_version = "2.13.15" +scala_2_13_version = "2.13.16" scala_3_version = "3.3.5" scalapb_version = "0.11.17" -zinc_version = "1.10.7" +zinc_version = "1.10.8" annex = use_extension("@rules_jvm_external//:extensions.bzl", "maven") annex.install( diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 4e36212c..e031689b 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -91,11 +91,10 @@ "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", "https://bcr.bazel.build/modules/rules_java/7.3.2/MODULE.bazel": "50dece891cfdf1741ea230d001aa9c14398062f2b7c066470accace78e412bc2", "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", + "https://bcr.bazel.build/modules/rules_java/8.11.0/MODULE.bazel": "c3d280bc5ff1038dcb3bacb95d3f6b83da8dd27bba57820ec89ea4085da767ad", + "https://bcr.bazel.build/modules/rules_java/8.11.0/source.json": "302b52a39259a85aa06ca3addb9787864ca3e03b432a5f964ea68244397e7544", "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017", "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939", - "https://bcr.bazel.build/modules/rules_java/8.6.1/MODULE.bazel": "f4808e2ab5b0197f094cabce9f4b006a27766beb6a9975931da07099560ca9c2", - "https://bcr.bazel.build/modules/rules_java/8.9.0/MODULE.bazel": "e17c876cb53dcd817b7b7f0d2985b710610169729e8c371b2221cacdcd3dce4a", - "https://bcr.bazel.build/modules/rules_java/8.9.0/source.json": "fcf9537bfd741f6b7d74ec00898b8a79c1bc76335690943d412bc32fe1e64d03", "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", @@ -482,7 +481,7 @@ }, "@@rules_python+//python/private/pypi:pip.bzl%pip_internal": { "general": { - "bzlTransitiveDigest": "UT27gbYR4rXUHlRTZenxY7C2WW8iKjlj00ldj987Kyc=", + "bzlTransitiveDigest": "sCGUUdVOVATRPlKd1IJea1kfLmtsYsAZdVI5HkdAUQo=", "usagesDigest": "OLoIStnzNObNalKEMRq99FqenhPGLFZ5utVLV4sz7OI=", "recordedFileInputs": { "@@rules_python+//tools/publish/requirements_darwin.txt": "2994136eab7e57b083c3de76faf46f70fad130bc8e7360a7fed2b288b69e79dc", diff --git a/annex_install.json b/annex_install.json index 841b3f65..c2132dc0 100644 --- a/annex_install.json +++ b/annex_install.json @@ -1,9 +1,9 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -1768572912, - "__RESOLVED_ARTIFACTS_HASH": -1511736944, + "__INPUT_ARTIFACTS_HASH": 416553459, + "__RESOLVED_ARTIFACTS_HASH": -333989184, "conflict_resolution": { - "org.scala-sbt:io_2.13:1.10.1": "org.scala-sbt:io_2.13:1.10.3" + "org.scala-sbt:io_2.13:1.10.1": "org.scala-sbt:io_2.13:1.10.4" }, "artifacts": { "ch.epfl.scala:bloop-backend_2.12": { @@ -484,10 +484,10 @@ }, "io.github.java-diff-utils:java-diff-utils": { "shasums": { - "jar": "9990a2039778f6b4cc94790141c2868864eacee0620c6c459451121a901cd5b5", - "sources": "fa24217b6eaa115a05d4a8f0003fe913c62716ca2184d2e4f17de4a7d42a8822" + "jar": "964c69e3a23a892db2778ae6806aa1d42f81230032bd8e4982dc8620582ee6b7", + "sources": "85e4ed33a7688be204d36d48a244cf815c05b54c626c6297ec4cf75be2af922f" }, - "version": "4.12" + "version": "4.15" }, "io.github.soc:directories": { "shasums": { @@ -554,10 +554,10 @@ }, "net.java.dev.jna:jna": { "shasums": { - "jar": "34ed1e1f27fa896bca50dbc4e99cf3732967cec387a7a0d5e3486c09673fe8c6", - "sources": "ebd774c761215676cda059fd68240628ef99f4aafa6d355ae00d184855aef134" + "jar": "fbc9de96a0cc193a125b4008dbc348e9ed54e5e13fc67b8ed40e645d303cc51b", + "sources": "74145556f7b10be10303b76e9bfb12a7d0d43934c60788ed006a7a8aed5517f4" }, - "version": "5.14.0" + "version": "4.5.1" }, "net.java.dev.jna:jna-platform": { "shasums": { @@ -631,10 +631,10 @@ }, "org.jline:jline": { "shasums": { - "jar": "f23116c349314658cdebaa6caf6d0067733cc9e5b852cad2a29e643d32bd52bd", - "sources": "f64a28d3e00bc975c7711d6b8b1682a6ed0fc3e8eb9bdbf8f599590e8ac38208" + "jdk8": "9d165aff3d714a455de2e711dc90df09fdb0a0969a1cd4d52aa72a44cb545db0", + "sources": "6ca4d8eacb00f9c99a86732f99087ce1f8f2b94294651b042cb6fdcfbf73e136" }, - "version": "3.26.3" + "version": "3.27.1" }, "org.jline:jline-native": { "shasums": { @@ -729,24 +729,24 @@ }, "org.scala-lang:scala-compiler": { "shasums": { - "jar": "4c200cd193c082bec14a2a2dffe6a1ba5f8130b1b27c79ee54c936dfcafc8ed9", - "sources": "118383733de3aa7152dc80617c26dca74d1be2f2fc85b400073d1e2de947673e" + "jar": "f59982714591e321ba9c087af2c8666e2f5fb92b11a0cef72c2c5e9b342152d3", + "sources": "e922dc2f97d545fdc083f2fcf2915eb00c7647f3770b95489de0bc9ef7b54a3e" }, - "version": "2.13.15" + "version": "2.13.16" }, "org.scala-lang:scala-library": { "shasums": { - "jar": "8e4dbc3becf70d59c787118f6ad06fab6790136a0699cd6412bc9da3d336944e", - "sources": "d2fc9d93d6e0915e8244846c8ecfc9ce89a79b2571a3c2d479d906af3a8888df" + "jar": "1ebb2b6f9e4eb4022497c19b1e1e825019c08514f962aaac197145f88ed730f1", + "sources": "c02edc324e7db59c52115214a6ef36e2d78d0a50dff635eda4dcee5502b1dea5" }, - "version": "2.13.15" + "version": "2.13.16" }, "org.scala-lang:scala-reflect": { "shasums": { - "jar": "78d0cc350e1ee42d87c6e11cf5b0dc7bf0b70829c00aa38f27bfb019d439dc11", - "sources": "2257237d06321ec3f2a5833de4f37b35b8ee6d5089813487a6cfb77515894090" + "jar": "fb49ccd9cac7464486ab993cda20a3c1569d8ef26f052e897577ad2a4970fb1d", + "sources": "11c15fbf9ee203e262049fdd54d8b8472e1601970fba655678c237629815117e" }, - "version": "2.13.15" + "version": "2.13.16" }, "org.scala-lang:scala3-compiler_3": { "shasums": { @@ -799,31 +799,31 @@ }, "org.scala-sbt:collections_2.13": { "shasums": { - "jar": "8591617224e4f66ee2a40c6190b64de496d63ee2a9e01b8358fc529738b24c39", - "sources": "656b8801ec1aa6a20472eb091f6ce522ea9b2028ac53a01b6ab87b2daa123c97" + "jar": "6abfc9bb5919555492a8631f2e9120814d0abd6bb000deed74c0850e5a845392", + "sources": "c3e912f85542841a18fa3ab569ccf113d042c4643f32d08b2128848b7ed354b9" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:compiler-bridge_2.13": { "shasums": { - "jar": "e26978868d84ada21f73d26b3ed475dd9607e5707d28cab14ceb0ea8cece10e2", - "sources": "79785687394a722cca53fa4fac4a36593eba44aa6bf2af36213b8808d0fa3778" + "jar": "bd2ba7aa5848010d6393873d060d40638d3a36729ee85f8c3615196a672095ea", + "sources": "0e50062b0da124ebb9ac868f91dd50bcefa8c981aea4dfb5dd2921ab30c9230a" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:compiler-interface": { "shasums": { - "jar": "2bacc5761e03920a228e5c9d20b33d9c51d43aaf2f52e8f839ece630966eb880", - "sources": "6bf753fba3afad192b1837858a2e68d5969976375c27b8e2969cdea952efb47f" + "jar": "b7569d4e2513391c11d14561013923841a6d7ece3b1d556bb054c3e3cc9d28e9", + "sources": "ff7dbe4ebf7c8d198490e2a2797adfca633cc9fd7248b300273e853a45888429" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:core-macros_2.13": { "shasums": { - "jar": "cfde9f2e7d885e7b3ea81b54b8cb579f10a599cf0802a06f1899243fee2b2189", - "sources": "739fc8b4ab7cc0ec4987655f605ac5267ba8fa2ef04ad41c799946ef5bb7e5f4" + "jar": "8555d9e405cba6d891939773aa6c774250a011bca2774373d622e2a091854d2c", + "sources": "fdf75d93b60e16a0349c4578cba2b868179b49ad199b9e9726baa5ba1fd8a90d" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:io_2.12": { "shasums": { @@ -834,10 +834,10 @@ }, "org.scala-sbt:io_2.13": { "shasums": { - "jar": "251b451307efac3270569fa61a6a2cb5436fdfa651c477ffc2e79a7a7ab9647c", - "sources": "3989f4dc2b79c8032f2f3825469a064102ce94fcb0639ada488c6a5e6f77815e" + "jar": "d53e2733b35854751760f98250a86599f4c10f7b18af27df409023335b573b0b", + "sources": "cc0d78158318ed92a2ac65a0c391eb2bed2a1063421b40297984905b6c47887f" }, - "version": "1.10.3" + "version": "1.10.4" }, "org.scala-sbt:launcher-interface": { "shasums": { @@ -911,10 +911,10 @@ }, "org.scala-sbt:util-interface": { "shasums": { - "jar": "1d6b91efa42b70fc064caed6d62962374e13b27737f885a87c84c667b30be625", - "sources": "6ac907710f3bb66a94e2a5d5703aef5d16ddc1bbaf35185e9f6aca1354956b12" + "jar": "c5619c3106ffbb29b5e266ba1c96a7c20e2e5a685c916cf5e1e8b699f90671bd", + "sources": "a960af9d1d0af7f176122926e704ee965b6ce656b84c42588d62804031aafc52" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:util-logging_2.12": { "shasums": { @@ -925,10 +925,10 @@ }, "org.scala-sbt:util-logging_2.13": { "shasums": { - "jar": "f9704d98f8b137cb6758bcf99c8f4d12731dd9a97567e4689993c9020c709908", - "sources": "0691080593d86a9607bef146ede9388fc28a1ed905110811accb0f3500e22130" + "jar": "592dafd15ba8f11bdff52d70c3ee3dcd26e38033c3626cc1e9a2da6be40ad771", + "sources": "06fe3e364651dda83fbbfe1b1453dd9f56a6cf1fea09c5dc3af7664c9627ec58" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:util-position_2.12": { "shasums": { @@ -939,10 +939,10 @@ }, "org.scala-sbt:util-position_2.13": { "shasums": { - "jar": "c64d48ad306a5e4de4a3b3fe3655d71a27024e5ae4bd8dc1a6cb736a7710ae64", - "sources": "4af1d0e60c107c14e6e24cb134889acfed270033c4bdca8ef1fef6544849cdbb" + "jar": "6de32f75a0c05002df4b4d28f57062e13ebd35a0f398f6066402f59d38ad0d9b", + "sources": "4346e77b286c8d8909b68dcff4881bf6abbee214aac1f5e09af71f55250c1a6e" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:util-relation_2.12": { "shasums": { @@ -960,59 +960,59 @@ }, "org.scala-sbt:zinc-apiinfo_2.13": { "shasums": { - "jar": "7189b99c7c01053f32487da6ca18815e6bedac24af065e8534b8a4f77bdc53a4", - "sources": "0b797818a19241da56fb20b2b2172a90eb0f30bee9cbe5822fbd83652dd36f11" + "jar": "aee40c0c4887eb10e9c985f4604ea04a744d200ab0b4d9dcf92c76a04fc8c719", + "sources": "98e12b92bc90a1b791ccb9fc34bae6f65e6c3dc12c47077ec9a24b0edb1504d8" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-classfile_2.13": { "shasums": { - "jar": "9e717932f0e32ba943f0508673ce3209b5e25b6592f577ce9e6804fffc54efbd", - "sources": "3062530eb56b891f2958f51493a650e3898ada6137be6ab842b280455ad7e09e" + "jar": "56957af56262bf98b87034e311d85126998d98c02a35ad1813c12a9929eb1c13", + "sources": "53e0d15dadbec4416c06cb055f68d57149eeb6c38e1542097c7ee63aedf9e452" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-classpath_2.13": { "shasums": { - "jar": "b6ec35309459458355119ef3ab9e0abdb9245ecd072bbda5a41b9d57bc32993a", - "sources": "b8878a8bfc4766e9250e88d8622b77858fb4516c870a766450562a6058c533d0" + "jar": "226053c5392e1e4ab696cf43759d242444b4f334de1bec85293afa9e482f3b57", + "sources": "7549c1edf0161639c9efdf1262e7f18534f1926cfd493d0a4762f2da63809ada" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-compile-core_2.13": { "shasums": { - "jar": "927b0cadcebe0688cba289648ea938175e39904ac0e501fd83316879c2793560", - "sources": "fc97b3bf40e12b1a02d4a016b741130c7a99ccd83c952e618361537a86e7645a" + "jar": "40aecf9875adc1b7960a0fb473b03d29f5b3f772ffb268766bce100c2b83bac7", + "sources": "b04dcf8b58de01a2efbcdf77a47b510b2757a2c7ae9d99c1b68a8da1242d6ff1" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-core_2.13": { "shasums": { - "jar": "406ba11be36923b299b8dfd46ddd2974ca869f7a962705353d9d25172a98be2f", - "sources": "4bf6f5e826fdceb1b5557e51351cf94ff8dee2ea438585bd9f835f0f439a0e1c" + "jar": "59c7a5fe1a6940f5b19fb92ca9cd53d75f85b4b0d5fe67efc22988be2f456122", + "sources": "d3f680dc63dcf8c445d009755c93ff291642aaf8d3d075566b932e2cae6e5cac" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-persist-core-assembly": { "shasums": { - "jar": "38cd882751c37531b38159084c91f07f7367e3368dc30dad20d0a57c34ff1a42", - "sources": "21de6c8632af63d44d0a23f3085618fe8cc8596d09925356c3fe031d5b78c9dc" + "jar": "821cc1b9be6a03025ed0aaf52f4a03bb45c34d3e87ecc1a4d69514a565c65d1b", + "sources": "9d52c6d2ccc204f65fa0aa77d6d7c2ba6a38dfec3f5444d7a632103f1727bc64" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-persist_2.13": { "shasums": { - "jar": "a6854a428b403c3070872fa64ed8c346933e1af6c1fc2923975e71d27c3e0f31", - "sources": "4a6d8cfcc238603c6bc0e080c239daad7c77048b427c0c98938535f72079d259" + "jar": "f194266a20c540f70110a2e08b4435dec2285220269df71e033da5cd30e3d924", + "sources": "31aa61c0a83bceec8881abbbda0aff06a9624024654abe9c93a0c73b3ae710e3" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc_2.13": { "shasums": { - "jar": "c3437c37b0ee8fef5b1de634c2765d0e8c9284750b92d03e8b198a095b5e6d84", - "sources": "d8c9966ed12a7a87cc860b46ee365b2df7574855340b49123f0cb25db43df347" + "jar": "d41aa6563a87bed30e4427a9ba74406ed09402150aafdce175986ae18e5e019f", + "sources": "6cf60e6c9193569e1a4c80806b7bacdb552f1e5067976a3bb3121fbe9ea858b4" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scalameta:jsonrpc_2.12": { "shasums": { @@ -1468,8 +1468,7 @@ ], "org.scala-lang:scala-compiler": [ "io.github.java-diff-utils:java-diff-utils", - "net.java.dev.jna:jna", - "org.jline:jline", + "org.jline:jline:jar:jdk8", "org.scala-lang:scala-library", "org.scala-lang:scala-reflect" ], @@ -2239,7 +2238,6 @@ ], "net.java.dev.jna:jna": [ "com.sun.jna", - "com.sun.jna.internal", "com.sun.jna.ptr", "com.sun.jna.win32" ], @@ -2450,7 +2448,32 @@ "org.jctools.queues.spec", "org.jctools.util" ], - "org.jline:jline": [ + "org.jline:jline-native": [ + "org.jline.nativ" + ], + "org.jline:jline-reader": [ + "org.jline.keymap", + "org.jline.reader", + "org.jline.reader.impl", + "org.jline.reader.impl.completer", + "org.jline.reader.impl.history" + ], + "org.jline:jline-terminal": [ + "org.jline.terminal", + "org.jline.terminal.impl", + "org.jline.terminal.impl.exec", + "org.jline.terminal.spi", + "org.jline.utils" + ], + "org.jline:jline-terminal-jni": [ + "org.jline.terminal.impl.jni", + "org.jline.terminal.impl.jni.freebsd", + "org.jline.terminal.impl.jni.linux", + "org.jline.terminal.impl.jni.osx", + "org.jline.terminal.impl.jni.solaris", + "org.jline.terminal.impl.jni.win" + ], + "org.jline:jline:jar:jdk8": [ "org.jline.builtins", "org.jline.builtins.ssh", "org.jline.builtins.telnet", @@ -2468,7 +2491,6 @@ "org.jline.terminal", "org.jline.terminal.impl", "org.jline.terminal.impl.exec", - "org.jline.terminal.impl.ffm", "org.jline.terminal.impl.jansi", "org.jline.terminal.impl.jansi.freebsd", "org.jline.terminal.impl.jansi.linux", @@ -2491,31 +2513,6 @@ "org.jline.utils", "org.jline.widget" ], - "org.jline:jline-native": [ - "org.jline.nativ" - ], - "org.jline:jline-reader": [ - "org.jline.keymap", - "org.jline.reader", - "org.jline.reader.impl", - "org.jline.reader.impl.completer", - "org.jline.reader.impl.history" - ], - "org.jline:jline-terminal": [ - "org.jline.terminal", - "org.jline.terminal.impl", - "org.jline.terminal.impl.exec", - "org.jline.terminal.spi", - "org.jline.utils" - ], - "org.jline:jline-terminal-jni": [ - "org.jline.terminal.impl.jni", - "org.jline.terminal.impl.jni.freebsd", - "org.jline.terminal.impl.jni.linux", - "org.jline.terminal.impl.jni.osx", - "org.jline.terminal.impl.jni.solaris", - "org.jline.terminal.impl.jni.win" - ], "org.ow2.asm:asm-debug-all": [ "org.objectweb.asm", "org.objectweb.asm.commons", @@ -3263,7 +3260,6 @@ "org.jacoco:org.jacoco.core:jar:sources", "org.jctools:jctools-core", "org.jctools:jctools-core:jar:sources", - "org.jline:jline", "org.jline:jline-native", "org.jline:jline-native:jar:sources", "org.jline:jline-reader", @@ -3272,6 +3268,7 @@ "org.jline:jline-terminal-jni", "org.jline:jline-terminal-jni:jar:sources", "org.jline:jline-terminal:jar:sources", + "org.jline:jline:jar:jdk8", "org.jline:jline:jar:sources", "org.ow2.asm:asm-debug-all", "org.ow2.asm:asm-debug-all:jar:sources", @@ -3576,7 +3573,6 @@ "org.jacoco:org.jacoco.core:jar:sources", "org.jctools:jctools-core", "org.jctools:jctools-core:jar:sources", - "org.jline:jline", "org.jline:jline-native", "org.jline:jline-native:jar:sources", "org.jline:jline-reader", @@ -3585,6 +3581,7 @@ "org.jline:jline-terminal-jni", "org.jline:jline-terminal-jni:jar:sources", "org.jline:jline-terminal:jar:sources", + "org.jline:jline:jar:jdk8", "org.jline:jline:jar:sources", "org.ow2.asm:asm-debug-all", "org.ow2.asm:asm-debug-all:jar:sources", @@ -3889,7 +3886,6 @@ "org.jacoco:org.jacoco.core:jar:sources", "org.jctools:jctools-core", "org.jctools:jctools-core:jar:sources", - "org.jline:jline", "org.jline:jline-native", "org.jline:jline-native:jar:sources", "org.jline:jline-reader", @@ -3898,6 +3894,7 @@ "org.jline:jline-terminal-jni", "org.jline:jline-terminal-jni:jar:sources", "org.jline:jline-terminal:jar:sources", + "org.jline:jline:jar:jdk8", "org.jline:jline:jar:sources", "org.ow2.asm:asm-debug-all", "org.ow2.asm:asm-debug-all:jar:sources", @@ -4094,27 +4091,6 @@ "org.codehaus.groovy.ast.builder.AstBuilderTransformation" ] }, - "org.jline:jline": { - "org/": [], - "org/jline/": [], - "org/jline/terminal/": [], - "org/jline/terminal/provider/": [], - "org/jline/terminal/provider/exec": [ - "class=org.jline.terminal.impl.exec.ExecTerminalProvider" - ], - "org/jline/terminal/provider/ffm": [ - "class=org.jline.terminal.impl.ffm.FfmTerminalProvider" - ], - "org/jline/terminal/provider/jansi": [ - "class=org.jline.terminal.impl.jansi.JansiTerminalProvider" - ], - "org/jline/terminal/provider/jna": [ - "class=org.jline.terminal.impl.jna.JnaTerminalProvider" - ], - "org/jline/terminal/provider/jni": [ - "class=org.jline.terminal.impl.jni.JniTerminalProvider" - ] - }, "org.jline:jline-terminal": { "org/": [], "org/jline/": [], @@ -4151,6 +4127,27 @@ "class=org.jline.terminal.impl.exec.ExecTerminalProvider" ] }, + "org.jline:jline:jar:jdk8": { + "org/": [], + "org/jline/": [], + "org/jline/terminal/": [], + "org/jline/terminal/provider/": [], + "org/jline/terminal/provider/exec": [ + "class=org.jline.terminal.impl.exec.ExecTerminalProvider" + ], + "org/jline/terminal/provider/ffm": [ + "class=org.jline.terminal.impl.ffm.FfmTerminalProvider" + ], + "org/jline/terminal/provider/jansi": [ + "class=org.jline.terminal.impl.jansi.JansiTerminalProvider" + ], + "org/jline/terminal/provider/jna": [ + "class=org.jline.terminal.impl.jna.JnaTerminalProvider" + ], + "org/jline/terminal/provider/jni": [ + "class=org.jline.terminal.impl.jni.JniTerminalProvider" + ] + }, "org.jline:jline:jar:sources": { "org/": [], "org/jline/": [], @@ -4177,6 +4174,11 @@ "scala.tools.nsc.interpreter.shell.Scripted$Factory" ] }, + "org.scala-lang:scala-compiler:jar:sources": { + "javax.script.ScriptEngineFactory": [ + "scala.tools.nsc.interpreter.shell.Scripted$Factory" + ] + }, "org.scala-lang:scala3-compiler_3": { "javax.script.ScriptEngineFactory": [ "dotty.tools.repl.ScriptEngine$Factory" diff --git a/rules/scala/versions.bzl b/rules/scala/versions.bzl index b480e7f3..dafd157c 100644 --- a/rules/scala/versions.bzl +++ b/rules/scala/versions.bzl @@ -2,7 +2,7 @@ # `/tests/MODULE.bazel`, and `/MODULE.bazel`. Unfortunately, `MODULE.bazel` files can't call `load`, # so we have to copy them here. scala_2_12_version = "2.12.19" -scala_2_13_version = "2.13.15" +scala_2_13_version = "2.13.16" scala_3_version = "3.3.5" scalapb_version = "0.11.17" -zinc_version = "1.10.7" +zinc_version = "1.10.8" diff --git a/rules/scala_proto/private/ScalaProtoWorker.scala b/rules/scala_proto/private/ScalaProtoWorker.scala index d4d29be7..aaac1659 100644 --- a/rules/scala_proto/private/ScalaProtoWorker.scala +++ b/rules/scala_proto/private/ScalaProtoWorker.scala @@ -6,7 +6,7 @@ import higherkindness.rules_scala.common.args.implicits.* import higherkindness.rules_scala.common.interrupt.InterruptUtil import higherkindness.rules_scala.common.error.AnnexWorkerError import higherkindness.rules_scala.common.sandbox.SandboxUtil -import higherkindness.rules_scala.common.worker.WorkerMain +import higherkindness.rules_scala.common.worker.{WorkerMain, WorkTask} import java.io.{File, PrintStream} import java.nio.file.{Files, Path, Paths} import java.util.Collections @@ -72,9 +72,12 @@ object ScalaProtoWorker extends WorkerMain[Unit] { override def init(args: Option[Array[String]]): Unit = () - protected def work(ctx: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = { - val workRequest = ScalaProtoRequest(workDir, ArgsUtil.parseArgsOrFailSafe(args, argParser, out)) - InterruptUtil.throwIfInterrupted() + protected def work(task: WorkTask[Unit]): Unit = { + val workRequest = ScalaProtoRequest( + task.workDir, + ArgsUtil.parseArgsOrFailSafe(task.args, argParser, task.output), + ) + InterruptUtil.throwIfInterrupted(task.isCancelled) val scalaOut = workRequest.outputDir Files.createDirectories(scalaOut) @@ -93,7 +96,7 @@ object ScalaProtoWorker extends WorkerMain[Unit] { } } - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) val exitCode = ProtocBridge.runWithGenerators( new MyProtocRunner, namedGenerators = List("scala" -> ScalaPbCodeGenerator), @@ -102,7 +105,7 @@ object ScalaProtoWorker extends WorkerMain[Unit] { if (exitCode != 0) { throw new AnnexWorkerError(exitCode) } - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) } } diff --git a/rules/scalafmt/BUILD b/rules/scalafmt/BUILD index c29bf981..9353aa7f 100644 --- a/rules/scalafmt/BUILD +++ b/rules/scalafmt/BUILD @@ -55,7 +55,7 @@ scala_binary( "//src/main/scala/higherkindness/rules_scala/common/worker", "//src/main/scala/higherkindness/rules_scala/workers/common", "@annex//:net_sourceforge_argparse4j_argparse4j", - "@annex_scalafmt//:com_geirsson_metaconfig_core_2_13", + "@annex_scalafmt//:org_scalameta_metaconfig_core_2_13", "@annex_scalafmt//:org_scalameta_parsers_2_13", "@annex_scalafmt//:org_scalameta_scalafmt_core_2_13", ], diff --git a/rules/scalafmt/scalafmt/ScalafmtRunner.scala b/rules/scalafmt/scalafmt/ScalafmtRunner.scala index b6e2d00c..6cc1b7c7 100644 --- a/rules/scalafmt/scalafmt/ScalafmtRunner.scala +++ b/rules/scalafmt/scalafmt/ScalafmtRunner.scala @@ -4,7 +4,7 @@ import higherkindness.rules_scala.common.args.ArgsUtil import higherkindness.rules_scala.common.args.ArgsUtil.PathArgumentType import higherkindness.rules_scala.common.interrupt.InterruptUtil import higherkindness.rules_scala.common.sandbox.SandboxUtil -import higherkindness.rules_scala.common.worker.WorkerMain +import higherkindness.rules_scala.common.worker.{WorkTask, WorkerMain} import higherkindness.rules_scala.workers.common.Color import java.io.{File, PrintStream} import java.nio.file.{Files, Path} @@ -45,16 +45,19 @@ object ScalafmtRunner extends WorkerMain[Unit] { protected def init(args: Option[Array[String]]): Unit = {} - protected def work(worker: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = { - val workRequest = ScalafmtRequest(workDir, ArgsUtil.parseArgsOrFailSafe(args, argParser, out)) - InterruptUtil.throwIfInterrupted() + protected def work(task: WorkTask[Unit]): Unit = { + val workRequest = ScalafmtRequest( + task.workDir, + ArgsUtil.parseArgsOrFailSafe(task.args, argParser, task.output), + ) + InterruptUtil.throwIfInterrupted(task.isCancelled) val source = FileOps.readFile(workRequest.inputFile)(Codec.UTF8) val config = ScalafmtConfig.fromHoconFile(workRequest.configFile).get @tailrec def format(code: String): String = { - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) val formatted = Scalafmt.format(code, config).get if (code == formatted) code else format(formatted) } @@ -65,18 +68,18 @@ object ScalafmtRunner extends WorkerMain[Unit] { } catch { case e @ (_: org.scalafmt.Error | _: scala.meta.parsers.ParseException) => { if (config.runner.fatalWarnings) { - System.err.println(Color.Error("Exception thrown by Scalafmt and fatalWarnings is enabled")) + task.output.println(Color.Error("Exception thrown by Scalafmt and fatalWarnings is enabled")) throw e } else { - System.err.println(Color.Warning("Unable to format file due to bug in scalafmt")) - System.err.println(Color.Warning(e.toString)) + task.output.println(Color.Warning("Unable to format file due to bug in scalafmt")) + task.output.println(Color.Warning(e.toString)) source } } } Files.write(workRequest.outputFile, output.getBytes) - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) } } diff --git a/scripts/bzlmod-update.sh b/scripts/bzlmod-update.sh new file mode 100755 index 00000000..00fb387e --- /dev/null +++ b/scripts/bzlmod-update.sh @@ -0,0 +1,9 @@ +#!/bin/env bash +set -euxo pipefail + +bazel mod deps --lockfile_mode=update +bazel mod tidy + +cd "$(dirname "$0")/../tests" +bazel mod deps --lockfile_mode=update +bazel mod tidy diff --git a/src/main/scala/higherkindness/rules_scala/common/interrupt/InterruptUtil.scala b/src/main/scala/higherkindness/rules_scala/common/interrupt/InterruptUtil.scala index e170f4e8..11eb4150 100644 --- a/src/main/scala/higherkindness/rules_scala/common/interrupt/InterruptUtil.scala +++ b/src/main/scala/higherkindness/rules_scala/common/interrupt/InterruptUtil.scala @@ -1,10 +1,14 @@ package higherkindness.rules_scala package common.interrupt +import java.util.concurrent.CancellationException + object InterruptUtil { - def throwIfInterrupted(): Unit = { + def throwIfInterrupted(isCancelled: Function0[Boolean]): Unit = { if (Thread.interrupted()) { - throw new InterruptedException("WorkRequest was cancelled.") + throw new InterruptedException("WorkRequest was cancelled via Thread interruption.") + } else if (isCancelled()) { + throw new CancellationException("WorkRequest was cancelled via FutureTask cancellation.") } } } diff --git a/src/main/scala/higherkindness/rules_scala/common/worker/CancellableTask.scala b/src/main/scala/higherkindness/rules_scala/common/worker/CancellableTask.scala index b9c2ba37..d364b898 100644 --- a/src/main/scala/higherkindness/rules_scala/common/worker/CancellableTask.scala +++ b/src/main/scala/higherkindness/rules_scala/common/worker/CancellableTask.scala @@ -16,12 +16,12 @@ import scala.util.Try * Heavily inspired by the following: https://github.com/NthPortal/cancellable-task/tree/master * https://stackoverflow.com/a/39986418/6442597 */ -class CancellableTask[S] private (fn: => S) { +class CancellableTask[S] private (fn: Function1[Function0[Boolean], S]) { private val promise = Promise[S]() val future: Future[S] = promise.future private val fnCallable = new Callable[S]() { - def call(): S = fn + def call(): S = fn(isCancelled) } private val task = new FutureTaskWaitOnCancel[S](fnCallable) { @@ -39,10 +39,16 @@ class CancellableTask[S] private (fn: => S) { def cancel(mayInterruptIfRunning: Boolean): Boolean = task.cancel(mayInterruptIfRunning) def execute(executionContext: ExecutionContext): Unit = executionContext.execute(task) + + def isCancelled(): Boolean = task.isCancelled() } object CancellableTask { def apply[S](fn: => S): CancellableTask[S] = { + new CancellableTask((_: Function0[Boolean]) => fn) + } + + def apply[S](fn: Function1[Function0[Boolean], S]): CancellableTask[S] = { new CancellableTask(fn) } } diff --git a/src/main/scala/higherkindness/rules_scala/common/worker/WorkTask.scala b/src/main/scala/higherkindness/rules_scala/common/worker/WorkTask.scala new file mode 100644 index 00000000..675b00e3 --- /dev/null +++ b/src/main/scala/higherkindness/rules_scala/common/worker/WorkTask.scala @@ -0,0 +1,14 @@ +package higherkindness.rules_scala +package common.worker + +import java.io.PrintStream +import java.nio.file.Path + +case class WorkTask[S]( + context: S, + args: Array[String], + output: PrintStream, + workDir: Path, + verbosity: Int, + isCancelled: Function0[Boolean], +) diff --git a/src/main/scala/higherkindness/rules_scala/common/worker/WorkerMain.scala b/src/main/scala/higherkindness/rules_scala/common/worker/WorkerMain.scala index 7501b89e..09a399b3 100644 --- a/src/main/scala/higherkindness/rules_scala/common/worker/WorkerMain.scala +++ b/src/main/scala/higherkindness/rules_scala/common/worker/WorkerMain.scala @@ -4,20 +4,39 @@ package common.worker import common.error.{AnnexDuplicateActiveRequestException, AnnexWorkerError} import com.google.devtools.build.lib.worker.WorkerProtocol import java.io.{ByteArrayInputStream, ByteArrayOutputStream, InputStream, OutputStream, PrintStream} +import java.nio.channels.ClosedByInterruptException import java.nio.file.{Path, Paths} import java.util.concurrent.{Callable, CancellationException, ConcurrentHashMap, ForkJoinPool, FutureTask} import scala.annotation.tailrec import scala.concurrent.{ExecutionContext, ExecutionException, Future} import scala.util.{Failure, Success, Using} +import java.time.{ZoneId, ZonedDateTime} abstract class WorkerMain[S](stdin: InputStream = System.in, stdout: PrintStream = System.out) { protected def init(args: Option[Array[String]]): S - protected def work(ctx: S, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit - + /** + * isCancelled is used to determine whether the FutureTask that is executing this work request has been cancelled. If + * it is safe to Thread.interrupt a process, then that is done and can be checked. Not all workers can be + * Thread.interrupted safely. + * + * TODO(James): document the rest of this function + */ + protected def work(workRequest: WorkTask[S]): Unit + + /** + * Indicates whether this program is being executed as a worker or as a regular process. It is a var because we won't + * know until runtime which one it is. + */ protected var isWorker = false + /** + * Used to determine whether to interrupt the FutureTasks being executed by this worker using Thread.interrupt or not. + * It's safe to interrupt many things with Thread.interrupt, but not all things. + */ + protected val mayInterruptWorkerTasks = true + final def main(args: Array[String]): Unit = { args.toList match { case "--persistent_worker" :: args => @@ -92,26 +111,34 @@ abstract class WorkerMain[S](stdin: InputStream = System.in, stdout: PrintStream val verbosity = request.getVerbosity() def logVerbose(message: String) = { if (verbosity >= 10) { - System.err.println(message) + val now = ZonedDateTime.now(ZoneId.of("UTC")) + System.err.println(s"${now}: ${message}") } } // If this is a cancel request, we need to cancel a previously sent WorkRequest // Arguments and inputs fields on cancel requests "must be empty and should be ignored" if (request.getCancel()) { - logVerbose(s"Cancellation WorkRequest received for request id: $requestId") + // TODO: Cancellation requests when worker_verbose is set don't set verbosity = 10, so + // this is unlikely to ever log. See this issue for more info: + // https://github.com/bazelbuild/bazel/issues/25803 + logVerbose( + s"Cancellation WorkRequest received for request id: $requestId", + ) // From the Bazel doc: "The server may send cancel requests for requests that the worker // has already responded to, in which case the cancel request must be ignored." Option(activeRequests.get(requestId)).foreach { activeRequest => // Cancel will wait for the thread to complete or be interrupted, so we do it in a future // to prevent blocking the worker from processing more requests - Future(activeRequest.cancel(mayInterruptIfRunning = true))(scala.concurrent.ExecutionContext.global) + Future(activeRequest.cancel(mayInterruptIfRunning = mayInterruptWorkerTasks))( + scala.concurrent.ExecutionContext.global, + ) } } else { val args = request.getArgumentsList.toArray(Array.empty[String]) val sandboxDir = Path.of(request.getSandboxDir()) - logVerbose(s"WorkRequest $requestId received with args: ${request.getArgumentsList}") + logVerbose(s"WorkRequest received with id: $requestId and args: ${request.getArgumentsList}") // We go through this hullabaloo with output streams being defined out here, so we can // close them after the async work in the Future is all done. @@ -124,13 +151,13 @@ abstract class WorkerMain[S](stdin: InputStream = System.in, stdout: PrintStream maybeOut.map(_.flush()) } - val workTask = CancellableTask { + def doWork(isCancelled: Function0[Boolean]) = { val outStream = new ByteArrayOutputStream() val out = new PrintStream(outStream) maybeOutStream = Some(outStream) maybeOut = Some(out) try { - work(ctx, args, out, sandboxDir, verbosity) + work(WorkTask(ctx, args, out, sandboxDir, verbosity, isCancelled)) 0 } catch { case e @ AnnexWorkerError(code, _, _) => @@ -139,13 +166,15 @@ abstract class WorkerMain[S](stdin: InputStream = System.in, stdout: PrintStream } } + val workTask = CancellableTask(doWork) + workTask.future .andThen { // Work task succeeded or failed in an expected way case Success(code) => flushOut() writeResponse(requestId, maybeOutStream, Some(code)) - logVerbose(s"WorkResponse $requestId sent with code $code") + logVerbose(s"WorkResponse for request id: $requestId sent with code $code") case Failure(e: ExecutionException) => e.getCause() match { @@ -164,19 +193,19 @@ abstract class WorkerMain[S](stdin: InputStream = System.in, stdout: PrintStream writeResponse(requestId, maybeOutStream, Some(-1)) logVerbose( "Encountered an uncaught exception that was wrapped in an ExecutionException while" + - s" proccessing the Future for WorkRequest $requestId. This usually means a non-fatal" + + s" proccessing the Future for WorkRequest id: $requestId. This usually means a non-fatal" + " error was thrown in the Future.", ) e.printStackTrace(System.err) } // Task successfully cancelled - case Failure(e: CancellationException) => + case Failure(e @ (_: CancellationException | _: ClosedByInterruptException)) => flushOut() writeResponse(requestId, None, None, wasCancelled = true) logVerbose( - s"Cancellation WorkResponse sent for request id: $requestId in response to a" + - " CancellationException", + s"Cancellation WorkResponse sent for request id: $requestId in response to a " + + e.getClass.getCanonicalName, ) // Work task threw an uncaught exception @@ -184,7 +213,9 @@ abstract class WorkerMain[S](stdin: InputStream = System.in, stdout: PrintStream maybeOut.map(e.printStackTrace(_)) flushOut() writeResponse(requestId, maybeOutStream, Some(-1)) - logVerbose(s"Uncaught exception in Future while proccessing WorkRequest $requestId:") + logVerbose( + s"Uncaught exception in Future while proccessing WorkRequest id: $requestId\nType: ${e.getClass.getCanonicalName}", + ) e.printStackTrace(System.err) }(scala.concurrent.ExecutionContext.global) .andThen { case _ => @@ -197,7 +228,9 @@ abstract class WorkerMain[S](stdin: InputStream = System.in, stdout: PrintStream // two active requests with the same ID. Either of which is not good and something we // should just crash on. if (activeRequests.putIfAbsent(requestId, workTask) != null) { - throw new AnnexDuplicateActiveRequestException("Received a WorkRequest with an already active requestId.") + throw new AnnexDuplicateActiveRequestException( + s"Received a WorkRequest with an already active request id: ${requestId}", + ) } else { workTask.execute(ec) } @@ -224,11 +257,14 @@ abstract class WorkerMain[S](stdin: InputStream = System.in, stdout: PrintStream val returnCode = try { work( - init(args = None), - args.toArray, - out, - workDir = Path.of(""), - verbosity = 0, + WorkTask( + init(args = None), + args.toArray, + out, + workDir = Path.of(""), + verbosity = 0, + isCancelled = () => false, + ), ) 0 diff --git a/src/main/scala/higherkindness/rules_scala/workers/bloop/compile/BloopRunner.scala b/src/main/scala/higherkindness/rules_scala/workers/bloop/compile/BloopRunner.scala index 4ecf6fd8..fef01f52 100644 --- a/src/main/scala/higherkindness/rules_scala/workers/bloop/compile/BloopRunner.scala +++ b/src/main/scala/higherkindness/rules_scala/workers/bloop/compile/BloopRunner.scala @@ -1,7 +1,7 @@ package higherkindness.rules_scala package workers.bloop.compile -import common.worker.WorkerMain +import common.worker.{WorkTask, WorkerMain} import bloop.Bloop import java.io.PrintStream @@ -9,5 +9,5 @@ import java.nio.file.Path object BloopRunner extends WorkerMain[Unit] { override def init(args: Option[Array[String]]): Unit = () - override def work(ctx: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = Bloop + override def work(workRequest: WorkTask[Unit]): Unit = Bloop } diff --git a/src/main/scala/higherkindness/rules_scala/workers/common/AnnexScalaInstance.scala b/src/main/scala/higherkindness/rules_scala/workers/common/AnnexScalaInstance.scala index 2ddc9489..193a3d15 100644 --- a/src/main/scala/higherkindness/rules_scala/workers/common/AnnexScalaInstance.scala +++ b/src/main/scala/higherkindness/rules_scala/workers/common/AnnexScalaInstance.scala @@ -2,23 +2,41 @@ package higherkindness.rules_scala package workers.common import xsbti.compile.ScalaInstance -import java.io.File +import java.io.{File, IOException} import java.net.URLClassLoader -import java.nio.file.{FileAlreadyExistsException, Files, Path, Paths} +import java.nio.file.{AtomicMoveNotSupportedException, FileAlreadyExistsException, Files, Path, Paths, StandardCopyOption} import java.util.Properties import java.util.concurrent.ConcurrentHashMap import scala.collection.immutable.TreeMap +import scala.util.control.NonFatal object AnnexScalaInstance { // See the comment on getAnnexScalaInstance as to why this is necessary private val instanceCache: ConcurrentHashMap[Set[Path], AnnexScalaInstance] = new ConcurrentHashMap[Set[Path], AnnexScalaInstance]() + /** + * The worker will use this directory to store temp files in order to better perform atomic file copies. + */ + private val tmpWorkerJarDir = Paths.get("annex-tmp-worker-jars") + Files.createDirectories(tmpWorkerJarDir) + + /** + * The worker will store compiler classpath jars in this directory to enable sharing of classloaders used by the Scala + * compiler across compilation requests. + */ + private val workerJarDir = Paths.get("work-request-jars") + Files.createDirectories(workerJarDir) + /** * We only need to care about minimizing the number of AnnexScalaInstances we create if things are being run as a * worker. Otherwise just create the AnnexScalaInstance and be done with it because the process won't be long lived. */ - def getAnnexScalaInstance(allJars: Array[File], workDir: Path, isWorker: Boolean): AnnexScalaInstance = { + def getAnnexScalaInstance( + allJars: Array[File], + workDir: Path, + isWorker: Boolean, + ): AnnexScalaInstance = { if (isWorker) { getAnnexScalaInstance(allJars, workDir) } else { @@ -81,7 +99,7 @@ object AnnexScalaInstance { absoluteWorkDir.relativize(absoluteJarPath), replaceExternal = false, ) - mapBuilder.addOne(jar.toPath -> comparablePath) + mapBuilder.addOne(jar.toPath -> workerJarDir.resolve(comparablePath)) keyBuilder.addOne(comparablePath) } val workRequestJarToWorkerJar = mapBuilder.result() @@ -101,40 +119,80 @@ object AnnexScalaInstance { val key = keyBuilder.result() Option(instanceCache.get(key)).getOrElse { - // Copy all the jars to the worker's directory because in a sandboxed world the - // jars can go away after the work request, so we can't rely on them sticking around. - // This should only happen once per compiler version, so it shouldn't happen often. - workRequestJarToWorkerJar.foreach { case (workRequestJar, workerJar) => - this.synchronized { - // Check for existence of the file just in case another request is also writing these jars - // Copying a file is not atomic, so we don't want to end up in a funky state where two - // copies of the same file happen at the same time and cause something bad to happen. - if (!Files.exists(workerJar)) { - try { - Files.createDirectories(workerJar.getParent()) - Files.copy(workRequestJar, workerJar) - } catch { - // We do not care if the file already exists - case _: FileAlreadyExistsException => {} - case e: Throwable => throw new Exception("Error adding file to instance cache", e) + this.synchronized { + // Requests that need the same Scala instance will likely race to this point to create + // the same Scala instance. This is especially true as the worker is first starting up. + // Considering that, we first check if the desired instance now exists to avoid duplicate work. + Option(instanceCache.get(key)).getOrElse { + // Copy all the jars to the worker's directory because in a sandboxed world the + // jars can go away after the work request, so we can't rely on them sticking around. + // This should only happen once per compiler version, so it shouldn't happen often. + workRequestJarToWorkerJar.foreach { case (workRequestJar, workerJar) => + // Do a more atomic copy of a file by creating a temp file and then moving + // the temp file to the destination. We can do a move atomically, but cannot do + // a copy atomically. Copying directly to the destination file risks the file existing + // at the destination in a partially completed state. + if (Files.notExists(workerJar)) { + var tmpWorkerJar: Option[Path] = None + + try { + tmpWorkerJar = Some(Files.createTempFile(tmpWorkerJarDir, workerJar.getFileName.toString, "tmp")) + + Files.copy( + workRequestJar, + tmpWorkerJar.get, + StandardCopyOption.REPLACE_EXISTING, + StandardCopyOption.COPY_ATTRIBUTES, + ) + Files.createDirectories(workerJar.getParent()) + + try { + Files.move(tmpWorkerJar.get, workerJar, StandardCopyOption.ATOMIC_MOVE) + } catch { + case e: AtomicMoveNotSupportedException => + // Fall back to regular move when ATOMIC_MOVE isn't supported. + // Because it's not atomic, there's a risk the file may already exist. + try { + Files.move(tmpWorkerJar.get, workerJar) + } catch { + case e: FileAlreadyExistsException => {} + } + } + } catch { + case e @ (_: IOException | _: InterruptedException) => + // An error occurred which may have left a partially written file, so we delete the + // file to be safe. + // Note that this could be a ClosedByInterruptException, which is a subtype of + // IOException and indicates the operation was interrupted (very likely because + // the Bazel request was cancelled). + Files.deleteIfExists(workerJar) + throw e + case NonFatal(e) => + throw new Exception(s"Error copying worker jar: ${workerJar}", e) + } finally { + tmpWorkerJar.foreach { tmpWorkerJar => + Files.deleteIfExists(tmpWorkerJar) + } + } + } else if (!Files.exists(workerJar)) { + // Files.exists is not the complement of Files.notExists because both return false + // when the existence of the file cannot be determined. + throw new Exception(s"Cannot determine existence of worker jar: ${workerJar}") } } - } - } - val instance = new AnnexScalaInstance(Array.from(workRequestJarToWorkerJar.values.map(_.toFile()))) - val instanceInsertedByOtherThreadOrNull = instanceCache.putIfAbsent(key, instance) + val instance = new AnnexScalaInstance(Array.from(workRequestJarToWorkerJar.values.map(_.toFile()))) + val instanceInsertedByOtherThreadOrNull = instanceCache.putIfAbsent(key, instance) - // putIfAbsent is atomic, but there exists time between the get and the putIfAbsent. - // This handles the scenario in which the AnnexScalaInstance is created and inserted - // by another thread after we ran our .get. - // We could also handle this by generating the AnnexScalaInstance every time and only - // using a putIfAbsent, but that's likely more expensive because of all the classloaders - // that get constructed when creating an AnnexScalaInstance. - if (instanceInsertedByOtherThreadOrNull == null) { - instance - } else { - instanceInsertedByOtherThreadOrNull + // putIfAbsent is atomic, but there could exist a time between the get and the putIfAbsent + // in which the AnnexScalaInstance is created and inserted by another thread. Depends on + // how things are synchronized. + if (instanceInsertedByOtherThreadOrNull == null) { + instance + } else { + instanceInsertedByOtherThreadOrNull + } + } } } } diff --git a/src/main/scala/higherkindness/rules_scala/workers/deps/DepsRunner.scala b/src/main/scala/higherkindness/rules_scala/workers/deps/DepsRunner.scala index a505c5fa..d02901cd 100644 --- a/src/main/scala/higherkindness/rules_scala/workers/deps/DepsRunner.scala +++ b/src/main/scala/higherkindness/rules_scala/workers/deps/DepsRunner.scala @@ -7,7 +7,7 @@ import common.args.implicits.* import common.error.AnnexWorkerError import common.interrupt.InterruptUtil import common.sandbox.SandboxUtil -import common.worker.WorkerMain +import common.worker.{WorkTask, WorkerMain} import workers.common.AnnexMapper import workers.common.FileUtil import java.io.{File, PrintStream} @@ -111,9 +111,12 @@ object DepsRunner extends WorkerMain[Unit] { override def init(args: Option[Array[String]]): Unit = () - override def work(ctx: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = { - val workRequest = DepsRunnerRequest(workDir, ArgsUtil.parseArgsOrFailSafe(args, argParser, out)) - InterruptUtil.throwIfInterrupted() + override def work(task: WorkTask[Unit]): Unit = { + val workRequest = DepsRunnerRequest( + task.workDir, + ArgsUtil.parseArgsOrFailSafe(task.args, argParser, task.output), + ) + InterruptUtil.throwIfInterrupted(task.isCancelled) val groupLabelToJarPaths = workRequest.groups.map { group => group.label -> group.jars @@ -133,10 +136,10 @@ object DepsRunner extends WorkerMain[Unit] { potentialLabels.collect(groupLabelToJarPaths).flatten } - val readWriteMappers = AnnexMapper.mappers(workDir, isIncremental = false) + val readWriteMappers = AnnexMapper.mappers(task.workDir, isIncremental = false) val readMapper = readWriteMappers.getReadMapper() - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) val usedPaths = Files .readAllLines(workRequest.usedDepsFile) .asScala @@ -165,13 +168,15 @@ object DepsRunner extends WorkerMain[Unit] { Nil } - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) val labelsToAdd = if (workRequest.checkDirect) { (usedPaths -- (workRequest.directDepLabels :++ workRequest.unusedDepWhitelist).flatMap(pathsForLabel)) .flatMap { path => groupLabelToJarPaths.collectFirst { case (myLabel, paths) if paths(path) => myLabel }.orElse { - System.err - .println(s"Warning: There is a reference to $path, but no dependency of ${workRequest.label} provides it") + task.output + .println( + s"Warning: There is a reference to $path, but no dependency of ${workRequest.label} provides it", + ) None } } @@ -198,6 +203,6 @@ object DepsRunner extends WorkerMain[Unit] { throw new AnnexWorkerError(1, errorMessage.result()) } - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) } } diff --git a/src/main/scala/higherkindness/rules_scala/workers/jacoco/instrumenter/JacocoInstrumenter.scala b/src/main/scala/higherkindness/rules_scala/workers/jacoco/instrumenter/JacocoInstrumenter.scala index 5c04cb76..afbc6fb4 100644 --- a/src/main/scala/higherkindness/rules_scala/workers/jacoco/instrumenter/JacocoInstrumenter.scala +++ b/src/main/scala/higherkindness/rules_scala/workers/jacoco/instrumenter/JacocoInstrumenter.scala @@ -5,7 +5,7 @@ import common.args.ArgsUtil import common.error.AnnexWorkerError import common.interrupt.InterruptUtil import common.sandbox.SandboxUtil -import common.worker.WorkerMain +import common.worker.{WorkTask, WorkerMain} import java.io.{BufferedInputStream, BufferedOutputStream, PrintStream} import java.net.URI import java.nio.file.Files @@ -68,14 +68,17 @@ object JacocoInstrumenter extends WorkerMain[Unit] { override def init(args: Option[Array[String]]): Unit = () - override def work(ctx: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = { - val workRequest = JacocoRequest(workDir, ArgsUtil.parseArgsOrFailSafe(args, argParser, out)) + override def work(task: WorkTask[Unit]): Unit = { + val workRequest = JacocoRequest( + task.workDir, + ArgsUtil.parseArgsOrFailSafe(task.args, argParser, task.output), + ) val jacoco = new Instrumenter(new OfflineInstrumentationAccessGenerator) workRequest.jars.foreach { case (inPath, outPath) => Using.Manager { use => - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) val inFS = use(FileSystems.newFileSystem(inPath, null: ClassLoader)) val outFS = @@ -107,6 +110,6 @@ object JacocoInstrumenter extends WorkerMain[Unit] { }.get } - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) } } diff --git a/src/main/scala/higherkindness/rules_scala/workers/zinc/compile/ZincRunner.scala b/src/main/scala/higherkindness/rules_scala/workers/zinc/compile/ZincRunner.scala index 1e326dd3..e46ef3d7 100644 --- a/src/main/scala/higherkindness/rules_scala/workers/zinc/compile/ZincRunner.scala +++ b/src/main/scala/higherkindness/rules_scala/workers/zinc/compile/ZincRunner.scala @@ -4,7 +4,7 @@ package workers.zinc.compile import common.args.ArgsUtil import common.interrupt.InterruptUtil import common.error.AnnexWorkerError -import common.worker.WorkerMain +import common.worker.{WorkTask, WorkerMain} import workers.common.{AnalysisUtil, AnnexLogger, AnnexMapper, AnnexScalaInstance, CommonArguments, FileUtil, LoggedReporter} import com.google.devtools.build.buildjar.jarhelper.JarCreator import java.io.{File, PrintStream, PrintWriter} @@ -76,6 +76,14 @@ object ZincRunnerWorkerConfig { */ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { + // Using Thread.interrupt to interrupt concurrent Zinc/Scala compilations that use a shared ScalaInstance (and thus + // shared classloaders) can cause strange concurrency errors. To avoid those strange concurrency errors we only + // cancel the FutureTask for the work task instead of cancel + Thread.interrupt. This makes cancellation more + // cooperative. The work task can still check its cancellation status using isCancelled. + // If you want to start using Thread.interrupt again, please make sure to test it very, very thoroughly using + // dynamic execution. The concurrency error happens very rarely, so it's hard to reproduce. + override protected val mayInterruptWorkerTasks = false + private val classloaderCache = new ClassLoaderCache(new URLClassLoader(Array())) private val compilerCache = CompilerCache.fresh @@ -101,25 +109,22 @@ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { CommonArguments.add(parser) } - protected def work( - workerConfig: ZincRunnerWorkerConfig, - args: Array[String], - out: PrintStream, - workDir: Path, - verbosity: Int, - ): Unit = { - val workRequest = CommonArguments(ArgsUtil.parseArgsOrFailSafe(args, parser, out), workDir) - InterruptUtil.throwIfInterrupted() + protected def work(task: WorkTask[ZincRunnerWorkerConfig]): Unit = { + val workRequest = CommonArguments( + ArgsUtil.parseArgsOrFailSafe(task.args, parser, task.output), + task.workDir, + ) + InterruptUtil.throwIfInterrupted(task.isCancelled) // These two paths must only be used when persistence is enabled because they escape the sandbox. // Sandboxing is disabled if persistence is enabled. - val (persistenceDir, extractedFileCache) = if (workerConfig.usePersistence) { - (workerConfig.persistenceDir, workerConfig.extractedFileCache) + val (persistenceDir, extractedFileCache) = if (task.context.usePersistence) { + (task.context.persistenceDir, task.context.extractedFileCache) } else { (None, None) } - val logger = new AnnexLogger(workRequest.logLevel, workDir, out) + val logger = new AnnexLogger(workRequest.logLevel, task.workDir, task.output) val tmpDir = workRequest.tmpDir @@ -141,7 +146,7 @@ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { val deps = { val analyses: Map[Path, (Path, Path)] = { - if (workerConfig.usePersistence) { + if (task.context.usePersistence) { workRequest.analyses.flatMap { analysis => analysis.jars.map(jar => jar -> ( @@ -156,11 +161,11 @@ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { } Dep.create(extractedFileCache, workRequest.classpath, analyses) } - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) val debug = workRequest.debug val analysisStorePath = workRequest.outputAnalysisStore - val readWriteMappers = AnnexMapper.mappers(workDir, workerConfig.usePersistence) + val readWriteMappers = AnnexMapper.mappers(task.workDir, task.context.usePersistence) val analysisStore: AnalysisStore = AnalysisUtil.getAnalysisStore(analysisStorePath.toFile, debug, readWriteMappers) val persistence = persistenceDir.fold[ZincPersistence](NullPersistence) { rootDir => @@ -203,7 +208,7 @@ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { val scalaInstance = AnnexScalaInstance.getAnnexScalaInstance( workRequest.compilerClasspath.view.map(_.toFile).toArray, - workDir, + task.workDir, isWorker, ) @@ -224,7 +229,15 @@ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { .scalaCompiler(scalaInstance, workRequest.compilerBridge) .withClassLoaderCache(classloaderCache) lastCompiler = scalaCompiler - ZincUtil.compilers(scalaInstance, ClasspathOptionsUtil.boot, None, scalaCompiler) + ZincUtil.compilers( + scalaInstance, + // This doesn't use -bootclasspath for Scala 2.13 and 3.x. It does use it for older versions. + // The newer versions no longer need that option. See this commit for more info: + // https://github.com/sbt/zinc/commit/8e4186a55dbe63df57e72cc37a1e8e92aa3b4bcd + ClasspathOptionsUtil.noboot(scalaInstance.actualVersion), + None, + scalaCompiler, + ) } val lookup = { @@ -277,28 +290,37 @@ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { val inputs = Inputs.of(compilers, compileOptions, setup, previousResult) - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) // compile val incrementalCompiler = new IncrementalCompilerImpl() val compileResult = - try incrementalCompiler.compile(inputs, logger) - catch { - case _: CompileFailed => throw new AnnexWorkerError(-1) + try { + incrementalCompiler.compile(inputs, logger) + } catch { + // The thread running this may have been interrupted during compilation due to a cancel request. + // It's possible that the interruption contribute to the error. We should check if we were + // interrupted, so we can respond with a cancellation rather than erroring and failing the build. + case _: CompileFailed => + InterruptUtil.throwIfInterrupted(task.isCancelled) + throw new AnnexWorkerError(-1) case e: ClassFormatError => - throw new Exception("You may be missing a `macro = True` attribute.", e) - throw new AnnexWorkerError(1) - case e: StackOverflowError => { + InterruptUtil.throwIfInterrupted(task.isCancelled) + throw new AnnexWorkerError(1, "You may be missing a `macro = True` attribute.", e) + case e: StackOverflowError => // Downgrade to NonFatal error. // The JVM is not guaranteed to free shared resources correctly when unwinding the stack to catch a StackOverflowError, // but since we don't share resources between work threads, this should be mostly safe for us for now. // If Bazel could better handle the worker shutting down suddenly, we could allow this to be caught by // the UncaughtExceptionHandler in WorkerMain, and exit the entire process to be safe. - throw new Error("StackOverflowError", e) - } + InterruptUtil.throwIfInterrupted(task.isCancelled) + throw new AnnexWorkerError(1, "StackOverflowError", e) + case NonFatal(e) => + InterruptUtil.throwIfInterrupted(task.isCancelled) + throw e } - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) // create analyses val pathString = analysisStorePath.toAbsolutePath().normalize().toString() @@ -314,7 +336,7 @@ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { } // This will be true if the `--worker_verbose` Bazel flag is set - if (verbosity >= 10) { + if (task.verbosity >= 10) { val analysisStoreText = AnalysisUtil.getAnalysisStore( new File(pathString.substring(0, pathString.length() - 3) + ".text.gz"), true, @@ -357,8 +379,11 @@ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { .sorted val pw = new PrintWriter(workRequest.mainManifest.toFile) - try mains.foreach(pw.println) - finally pw.close() + try { + mains.foreach(pw.println) + } finally { + pw.close() + } val jarCreator = new JarCreator(outputJar) jarCreator.addDirectory(classesOutputDir) @@ -375,9 +400,10 @@ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { jarCreator.execute() // save persisted files - if (workerConfig.usePersistence) { - try persistence.save() - catch { + if (task.context.usePersistence) { + try { + persistence.save() + } catch { case NonFatal(e) => logger.warn(() => s"Failed to save cached analysis: $e") } } @@ -386,7 +412,7 @@ object ZincRunner extends WorkerMain[ZincRunnerWorkerConfig] { FileUtil.delete(tmpDir) Files.createDirectory(tmpDir) - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) } } diff --git a/src/main/scala/higherkindness/rules_scala/workers/zinc/doc/DocRunner.scala b/src/main/scala/higherkindness/rules_scala/workers/zinc/doc/DocRunner.scala index 449f199a..d2bb4fe6 100644 --- a/src/main/scala/higherkindness/rules_scala/workers/zinc/doc/DocRunner.scala +++ b/src/main/scala/higherkindness/rules_scala/workers/zinc/doc/DocRunner.scala @@ -5,7 +5,7 @@ import common.args.ArgsUtil import common.args.ArgsUtil.PathArgumentType import common.args.implicits.* import common.interrupt.InterruptUtil -import common.worker.WorkerMain +import common.worker.{WorkTask, WorkerMain} import common.sandbox.SandboxUtil import workers.common.{AnnexLogger, AnnexScalaInstance, FileUtil, LogLevel, LoggedReporter} import java.io.{File, PrintStream} @@ -115,9 +115,12 @@ object DocRunner extends WorkerMain[Unit] { override def init(args: Option[Array[String]]): Unit = () - override def work(ctx: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = { - val workRequest = DocRequest(workDir, ArgsUtil.parseArgsOrFailSafe(args, argParser, out)) - InterruptUtil.throwIfInterrupted() + override def work(task: WorkTask[Unit]): Unit = { + val workRequest = DocRequest( + task.workDir, + ArgsUtil.parseArgsOrFailSafe(task.args, argParser, task.output), + ) + InterruptUtil.throwIfInterrupted(task.isCancelled) val tmpDir = workRequest.tmpDir try { @@ -136,17 +139,17 @@ object DocRunner extends WorkerMain[Unit] { val scalaInstance = AnnexScalaInstance.getAnnexScalaInstance( workRequest.compilerClasspath.view.map(_.toFile).toArray, - workDir, + task.workDir, isWorker, ) - val logger = new AnnexLogger(workRequest.logLevel, workDir, out) + val logger = new AnnexLogger(workRequest.logLevel, task.workDir, task.output) val scalaCompiler = ZincUtil .scalaCompiler(scalaInstance, workRequest.compilerBridge) .withClassLoaderCache(classloaderCache) - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) val outputDir = workRequest.outputDir Files.createDirectories(outputDir) @@ -167,6 +170,6 @@ object DocRunner extends WorkerMain[Unit] { case _: NoSuchFileException => {} } Files.createDirectory(tmpDir) - InterruptUtil.throwIfInterrupted() + InterruptUtil.throwIfInterrupted(task.isCancelled) } } diff --git a/tests/.bazelversion b/tests/.bazelversion index 1140becc..797ed2e2 100644 --- a/tests/.bazelversion +++ b/tests/.bazelversion @@ -1 +1 @@ -lucidsoftware/8.1.999 +8.2.1 \ No newline at end of file diff --git a/tests/MODULE.bazel b/tests/MODULE.bazel index c59daade..797d16bc 100644 --- a/tests/MODULE.bazel +++ b/tests/MODULE.bazel @@ -2,7 +2,7 @@ module(name = "rules_scala_annex_tests") bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "protobuf", version = "29.3") -bazel_dep(name = "rules_java", version = "8.9.0") +bazel_dep(name = "rules_java", version = "8.11.0") bazel_dep(name = "rules_jvm_external", version = "6.5") bazel_dep(name = "rules_scala_annex") local_path_override( @@ -32,13 +32,13 @@ register_toolchains( # so we have to copy them here. scala_2_12_version = "2.12.19" -scala_2_13_version = "2.13.15" +scala_2_13_version = "2.13.16" scala_3_version = "3.3.5" scalapb_version = "0.11.17" -zinc_version = "1.10.7" +zinc_version = "1.10.8" specs2_version = "4.20.9" diff --git a/tests/MODULE.bazel.lock b/tests/MODULE.bazel.lock index cb887ec6..46562ad9 100644 --- a/tests/MODULE.bazel.lock +++ b/tests/MODULE.bazel.lock @@ -88,9 +88,8 @@ "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", "https://bcr.bazel.build/modules/rules_java/7.3.2/MODULE.bazel": "50dece891cfdf1741ea230d001aa9c14398062f2b7c066470accace78e412bc2", "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", - "https://bcr.bazel.build/modules/rules_java/8.6.1/MODULE.bazel": "f4808e2ab5b0197f094cabce9f4b006a27766beb6a9975931da07099560ca9c2", - "https://bcr.bazel.build/modules/rules_java/8.9.0/MODULE.bazel": "e17c876cb53dcd817b7b7f0d2985b710610169729e8c371b2221cacdcd3dce4a", - "https://bcr.bazel.build/modules/rules_java/8.9.0/source.json": "fcf9537bfd741f6b7d74ec00898b8a79c1bc76335690943d412bc32fe1e64d03", + "https://bcr.bazel.build/modules/rules_java/8.11.0/MODULE.bazel": "c3d280bc5ff1038dcb3bacb95d3f6b83da8dd27bba57820ec89ea4085da767ad", + "https://bcr.bazel.build/modules/rules_java/8.11.0/source.json": "302b52a39259a85aa06ca3addb9787864ca3e03b432a5f964ea68244397e7544", "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", @@ -337,7 +336,7 @@ }, "@@rules_python+//python/private/pypi:pip.bzl%pip_internal": { "general": { - "bzlTransitiveDigest": "UT27gbYR4rXUHlRTZenxY7C2WW8iKjlj00ldj987Kyc=", + "bzlTransitiveDigest": "sCGUUdVOVATRPlKd1IJea1kfLmtsYsAZdVI5HkdAUQo=", "usagesDigest": "OLoIStnzNObNalKEMRq99FqenhPGLFZ5utVLV4sz7OI=", "recordedFileInputs": { "@@rules_python+//tools/publish/requirements_darwin.txt": "2994136eab7e57b083c3de76faf46f70fad130bc8e7360a7fed2b288b69e79dc", diff --git a/tests/annex_test_2_12_install.json b/tests/annex_test_2_12_install.json index e0bb862f..23e8b3d3 100644 --- a/tests/annex_test_2_12_install.json +++ b/tests/annex_test_2_12_install.json @@ -1,7 +1,7 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -967928601, - "__RESOLVED_ARTIFACTS_HASH": 1487980026, + "__INPUT_ARTIFACTS_HASH": 431406884, + "__RESOLVED_ARTIFACTS_HASH": -1180621667, "conflict_resolution": { "org.scala-lang:scala-library:2.12.19": "org.scala-lang:scala-library:2.12.20", "org.scala-lang:scala-reflect:2.12.19": "org.scala-lang:scala-reflect:2.12.20" @@ -51,17 +51,17 @@ }, "org.scala-sbt:compiler-bridge_2.12": { "shasums": { - "jar": "f7500d7550d1a4ba1ecb4c8d2bf0ece8f8734d5286249205915a1a942dd3c647", - "sources": "debc50f2d3ce476f4fefc6598d93714973d8194c444cb563e0cde1acc92a630e" + "jar": "4c2c2d9c34c19fe98e17ede35f329b97d8af077c7aa0f5fa9ae6a141c926df3f", + "sources": "fe144cee719f373355ae96d160b53cf6e3512aa3ee7a093b10c38572c5235a5e" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:compiler-interface": { "shasums": { - "jar": "2bacc5761e03920a228e5c9d20b33d9c51d43aaf2f52e8f839ece630966eb880", - "sources": "6bf753fba3afad192b1837858a2e68d5969976375c27b8e2969cdea952efb47f" + "jar": "b7569d4e2513391c11d14561013923841a6d7ece3b1d556bb054c3e3cc9d28e9", + "sources": "ff7dbe4ebf7c8d198490e2a2797adfca633cc9fd7248b300273e853a45888429" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:test-interface": { "shasums": { diff --git a/tests/annex_test_install.json b/tests/annex_test_install.json index 526b5f0c..4e27edb1 100644 --- a/tests/annex_test_install.json +++ b/tests/annex_test_install.json @@ -1,7 +1,7 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -1393298680, - "__RESOLVED_ARTIFACTS_HASH": -2075188162, + "__INPUT_ARTIFACTS_HASH": 2006429193, + "__RESOLVED_ARTIFACTS_HASH": 931147684, "artifacts": { "com.eed3si9n:shaded-jawn-parser_2.13": { "shasums": { @@ -75,10 +75,10 @@ }, "io.github.java-diff-utils:java-diff-utils": { "shasums": { - "jar": "9990a2039778f6b4cc94790141c2868864eacee0620c6c459451121a901cd5b5", - "sources": "fa24217b6eaa115a05d4a8f0003fe913c62716ca2184d2e4f17de4a7d42a8822" + "jar": "964c69e3a23a892db2778ae6806aa1d42f81230032bd8e4982dc8620582ee6b7", + "sources": "85e4ed33a7688be204d36d48a244cf815c05b54c626c6297ec4cf75be2af922f" }, - "version": "4.12" + "version": "4.15" }, "junit:junit": { "shasums": { @@ -87,13 +87,6 @@ }, "version": "4.12" }, - "net.java.dev.jna:jna": { - "shasums": { - "jar": "34ed1e1f27fa896bca50dbc4e99cf3732967cec387a7a0d5e3486c09673fe8c6", - "sources": "ebd774c761215676cda059fd68240628ef99f4aafa6d355ae00d184855aef134" - }, - "version": "5.14.0" - }, "net.openhft:zero-allocation-hashing": { "shasums": { "jar": "3bc39c640cc8314575de4ebcb1a0bca540516d3c60d49f8de7d638b09868553d", @@ -131,10 +124,10 @@ }, "org.jline:jline": { "shasums": { - "jar": "f23116c349314658cdebaa6caf6d0067733cc9e5b852cad2a29e643d32bd52bd", - "sources": "f64a28d3e00bc975c7711d6b8b1682a6ed0fc3e8eb9bdbf8f599590e8ac38208" + "jdk8": "9d165aff3d714a455de2e711dc90df09fdb0a0969a1cd4d52aa72a44cb545db0", + "sources": "6ca4d8eacb00f9c99a86732f99087ce1f8f2b94294651b042cb6fdcfbf73e136" }, - "version": "3.26.3" + "version": "3.27.1" }, "org.jline:jline-native": { "shasums": { @@ -208,24 +201,24 @@ }, "org.scala-lang:scala-compiler": { "shasums": { - "jar": "4c200cd193c082bec14a2a2dffe6a1ba5f8130b1b27c79ee54c936dfcafc8ed9", - "sources": "118383733de3aa7152dc80617c26dca74d1be2f2fc85b400073d1e2de947673e" + "jar": "f59982714591e321ba9c087af2c8666e2f5fb92b11a0cef72c2c5e9b342152d3", + "sources": "e922dc2f97d545fdc083f2fcf2915eb00c7647f3770b95489de0bc9ef7b54a3e" }, - "version": "2.13.15" + "version": "2.13.16" }, "org.scala-lang:scala-library": { "shasums": { - "jar": "8e4dbc3becf70d59c787118f6ad06fab6790136a0699cd6412bc9da3d336944e", - "sources": "d2fc9d93d6e0915e8244846c8ecfc9ce89a79b2571a3c2d479d906af3a8888df" + "jar": "1ebb2b6f9e4eb4022497c19b1e1e825019c08514f962aaac197145f88ed730f1", + "sources": "c02edc324e7db59c52115214a6ef36e2d78d0a50dff635eda4dcee5502b1dea5" }, - "version": "2.13.15" + "version": "2.13.16" }, "org.scala-lang:scala-reflect": { "shasums": { - "jar": "78d0cc350e1ee42d87c6e11cf5b0dc7bf0b70829c00aa38f27bfb019d439dc11", - "sources": "2257237d06321ec3f2a5833de4f37b35b8ee6d5089813487a6cfb77515894090" + "jar": "fb49ccd9cac7464486ab993cda20a3c1569d8ef26f052e897577ad2a4970fb1d", + "sources": "11c15fbf9ee203e262049fdd54d8b8472e1601970fba655678c237629815117e" }, - "version": "2.13.15" + "version": "2.13.16" }, "org.scala-lang:scala3-compiler_3": { "shasums": { @@ -271,38 +264,38 @@ }, "org.scala-sbt:collections_2.13": { "shasums": { - "jar": "8591617224e4f66ee2a40c6190b64de496d63ee2a9e01b8358fc529738b24c39", - "sources": "656b8801ec1aa6a20472eb091f6ce522ea9b2028ac53a01b6ab87b2daa123c97" + "jar": "6abfc9bb5919555492a8631f2e9120814d0abd6bb000deed74c0850e5a845392", + "sources": "c3e912f85542841a18fa3ab569ccf113d042c4643f32d08b2128848b7ed354b9" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:compiler-bridge_2.13": { "shasums": { - "jar": "e26978868d84ada21f73d26b3ed475dd9607e5707d28cab14ceb0ea8cece10e2", - "sources": "79785687394a722cca53fa4fac4a36593eba44aa6bf2af36213b8808d0fa3778" + "jar": "bd2ba7aa5848010d6393873d060d40638d3a36729ee85f8c3615196a672095ea", + "sources": "0e50062b0da124ebb9ac868f91dd50bcefa8c981aea4dfb5dd2921ab30c9230a" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:compiler-interface": { "shasums": { - "jar": "2bacc5761e03920a228e5c9d20b33d9c51d43aaf2f52e8f839ece630966eb880", - "sources": "6bf753fba3afad192b1837858a2e68d5969976375c27b8e2969cdea952efb47f" + "jar": "b7569d4e2513391c11d14561013923841a6d7ece3b1d556bb054c3e3cc9d28e9", + "sources": "ff7dbe4ebf7c8d198490e2a2797adfca633cc9fd7248b300273e853a45888429" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:core-macros_2.13": { "shasums": { - "jar": "cfde9f2e7d885e7b3ea81b54b8cb579f10a599cf0802a06f1899243fee2b2189", - "sources": "739fc8b4ab7cc0ec4987655f605ac5267ba8fa2ef04ad41c799946ef5bb7e5f4" + "jar": "8555d9e405cba6d891939773aa6c774250a011bca2774373d622e2a091854d2c", + "sources": "fdf75d93b60e16a0349c4578cba2b868179b49ad199b9e9726baa5ba1fd8a90d" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:io_2.13": { "shasums": { - "jar": "251b451307efac3270569fa61a6a2cb5436fdfa651c477ffc2e79a7a7ab9647c", - "sources": "3989f4dc2b79c8032f2f3825469a064102ce94fcb0639ada488c6a5e6f77815e" + "jar": "d53e2733b35854751760f98250a86599f4c10f7b18af27df409023335b573b0b", + "sources": "cc0d78158318ed92a2ac65a0c391eb2bed2a1063421b40297984905b6c47887f" }, - "version": "1.10.3" + "version": "1.10.4" }, "org.scala-sbt:launcher-interface": { "shasums": { @@ -334,24 +327,24 @@ }, "org.scala-sbt:util-interface": { "shasums": { - "jar": "1d6b91efa42b70fc064caed6d62962374e13b27737f885a87c84c667b30be625", - "sources": "6ac907710f3bb66a94e2a5d5703aef5d16ddc1bbaf35185e9f6aca1354956b12" + "jar": "c5619c3106ffbb29b5e266ba1c96a7c20e2e5a685c916cf5e1e8b699f90671bd", + "sources": "a960af9d1d0af7f176122926e704ee965b6ce656b84c42588d62804031aafc52" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:util-logging_2.13": { "shasums": { - "jar": "f9704d98f8b137cb6758bcf99c8f4d12731dd9a97567e4689993c9020c709908", - "sources": "0691080593d86a9607bef146ede9388fc28a1ed905110811accb0f3500e22130" + "jar": "592dafd15ba8f11bdff52d70c3ee3dcd26e38033c3626cc1e9a2da6be40ad771", + "sources": "06fe3e364651dda83fbbfe1b1453dd9f56a6cf1fea09c5dc3af7664c9627ec58" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:util-position_2.13": { "shasums": { - "jar": "c64d48ad306a5e4de4a3b3fe3655d71a27024e5ae4bd8dc1a6cb736a7710ae64", - "sources": "4af1d0e60c107c14e6e24cb134889acfed270033c4bdca8ef1fef6544849cdbb" + "jar": "6de32f75a0c05002df4b4d28f57062e13ebd35a0f398f6066402f59d38ad0d9b", + "sources": "4346e77b286c8d8909b68dcff4881bf6abbee214aac1f5e09af71f55250c1a6e" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:util-relation_2.13": { "shasums": { @@ -362,52 +355,52 @@ }, "org.scala-sbt:zinc-apiinfo_2.13": { "shasums": { - "jar": "7189b99c7c01053f32487da6ca18815e6bedac24af065e8534b8a4f77bdc53a4", - "sources": "0b797818a19241da56fb20b2b2172a90eb0f30bee9cbe5822fbd83652dd36f11" + "jar": "aee40c0c4887eb10e9c985f4604ea04a744d200ab0b4d9dcf92c76a04fc8c719", + "sources": "98e12b92bc90a1b791ccb9fc34bae6f65e6c3dc12c47077ec9a24b0edb1504d8" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-classfile_2.13": { "shasums": { - "jar": "9e717932f0e32ba943f0508673ce3209b5e25b6592f577ce9e6804fffc54efbd", - "sources": "3062530eb56b891f2958f51493a650e3898ada6137be6ab842b280455ad7e09e" + "jar": "56957af56262bf98b87034e311d85126998d98c02a35ad1813c12a9929eb1c13", + "sources": "53e0d15dadbec4416c06cb055f68d57149eeb6c38e1542097c7ee63aedf9e452" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-classpath_2.13": { "shasums": { - "jar": "b6ec35309459458355119ef3ab9e0abdb9245ecd072bbda5a41b9d57bc32993a", - "sources": "b8878a8bfc4766e9250e88d8622b77858fb4516c870a766450562a6058c533d0" + "jar": "226053c5392e1e4ab696cf43759d242444b4f334de1bec85293afa9e482f3b57", + "sources": "7549c1edf0161639c9efdf1262e7f18534f1926cfd493d0a4762f2da63809ada" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-compile-core_2.13": { "shasums": { - "jar": "927b0cadcebe0688cba289648ea938175e39904ac0e501fd83316879c2793560", - "sources": "fc97b3bf40e12b1a02d4a016b741130c7a99ccd83c952e618361537a86e7645a" + "jar": "40aecf9875adc1b7960a0fb473b03d29f5b3f772ffb268766bce100c2b83bac7", + "sources": "b04dcf8b58de01a2efbcdf77a47b510b2757a2c7ae9d99c1b68a8da1242d6ff1" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-core_2.13": { "shasums": { - "jar": "406ba11be36923b299b8dfd46ddd2974ca869f7a962705353d9d25172a98be2f", - "sources": "4bf6f5e826fdceb1b5557e51351cf94ff8dee2ea438585bd9f835f0f439a0e1c" + "jar": "59c7a5fe1a6940f5b19fb92ca9cd53d75f85b4b0d5fe67efc22988be2f456122", + "sources": "d3f680dc63dcf8c445d009755c93ff291642aaf8d3d075566b932e2cae6e5cac" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-persist-core-assembly": { "shasums": { - "jar": "38cd882751c37531b38159084c91f07f7367e3368dc30dad20d0a57c34ff1a42", - "sources": "21de6c8632af63d44d0a23f3085618fe8cc8596d09925356c3fe031d5b78c9dc" + "jar": "821cc1b9be6a03025ed0aaf52f4a03bb45c34d3e87ecc1a4d69514a565c65d1b", + "sources": "9d52c6d2ccc204f65fa0aa77d6d7c2ba6a38dfec3f5444d7a632103f1727bc64" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scala-sbt:zinc-persist_2.13": { "shasums": { - "jar": "a6854a428b403c3070872fa64ed8c346933e1af6c1fc2923975e71d27c3e0f31", - "sources": "4a6d8cfcc238603c6bc0e080c239daad7c77048b427c0c98938535f72079d259" + "jar": "f194266a20c540f70110a2e08b4435dec2285220269df71e033da5cd30e3d924", + "sources": "31aa61c0a83bceec8881abbbda0aff06a9624024654abe9c93a0c73b3ae710e3" }, - "version": "1.10.7" + "version": "1.10.8" }, "org.scalacheck:scalacheck_2.13": { "shasums": { @@ -634,8 +627,7 @@ ], "org.scala-lang:scala-compiler": [ "io.github.java-diff-utils:java-diff-utils", - "net.java.dev.jna:jna", - "org.jline:jline", + "org.jline:jline:jar:jdk8", "org.scala-lang:scala-library", "org.scala-lang:scala-reflect" ], @@ -981,12 +973,6 @@ "org.junit.runners.parameterized", "org.junit.validator" ], - "net.java.dev.jna:jna": [ - "com.sun.jna", - "com.sun.jna.internal", - "com.sun.jna.ptr", - "com.sun.jna.win32" - ], "net.openhft:zero-allocation-hashing": [ "net.openhft.hashing" ], @@ -1064,7 +1050,32 @@ "org.hamcrest.core", "org.hamcrest.internal" ], - "org.jline:jline": [ + "org.jline:jline-native": [ + "org.jline.nativ" + ], + "org.jline:jline-reader": [ + "org.jline.keymap", + "org.jline.reader", + "org.jline.reader.impl", + "org.jline.reader.impl.completer", + "org.jline.reader.impl.history" + ], + "org.jline:jline-terminal": [ + "org.jline.terminal", + "org.jline.terminal.impl", + "org.jline.terminal.impl.exec", + "org.jline.terminal.spi", + "org.jline.utils" + ], + "org.jline:jline-terminal-jni": [ + "org.jline.terminal.impl.jni", + "org.jline.terminal.impl.jni.freebsd", + "org.jline.terminal.impl.jni.linux", + "org.jline.terminal.impl.jni.osx", + "org.jline.terminal.impl.jni.solaris", + "org.jline.terminal.impl.jni.win" + ], + "org.jline:jline:jar:jdk8": [ "org.jline.builtins", "org.jline.builtins.ssh", "org.jline.builtins.telnet", @@ -1082,7 +1093,6 @@ "org.jline.terminal", "org.jline.terminal.impl", "org.jline.terminal.impl.exec", - "org.jline.terminal.impl.ffm", "org.jline.terminal.impl.jansi", "org.jline.terminal.impl.jansi.freebsd", "org.jline.terminal.impl.jansi.linux", @@ -1105,31 +1115,6 @@ "org.jline.utils", "org.jline.widget" ], - "org.jline:jline-native": [ - "org.jline.nativ" - ], - "org.jline:jline-reader": [ - "org.jline.keymap", - "org.jline.reader", - "org.jline.reader.impl", - "org.jline.reader.impl.completer", - "org.jline.reader.impl.history" - ], - "org.jline:jline-terminal": [ - "org.jline.terminal", - "org.jline.terminal.impl", - "org.jline.terminal.impl.exec", - "org.jline.terminal.spi", - "org.jline.utils" - ], - "org.jline:jline-terminal-jni": [ - "org.jline.terminal.impl.jni", - "org.jline.terminal.impl.jni.freebsd", - "org.jline.terminal.impl.jni.linux", - "org.jline.terminal.impl.jni.osx", - "org.jline.terminal.impl.jni.solaris", - "org.jline.terminal.impl.jni.win" - ], "org.portable-scala:portable-scala-reflect_2.13": [ "org.portablescala.reflect", "org.portablescala.reflect.annotation", @@ -1749,8 +1734,6 @@ "io.github.java-diff-utils:java-diff-utils:jar:sources", "junit:junit", "junit:junit:jar:sources", - "net.java.dev.jna:jna", - "net.java.dev.jna:jna:jar:sources", "net.openhft:zero-allocation-hashing", "net.openhft:zero-allocation-hashing:jar:sources", "org.apache.logging.log4j:log4j-api", @@ -1761,7 +1744,6 @@ "org.fusesource.jansi:jansi:jar:sources", "org.hamcrest:hamcrest-core", "org.hamcrest:hamcrest-core:jar:sources", - "org.jline:jline", "org.jline:jline-native", "org.jline:jline-native:jar:sources", "org.jline:jline-reader", @@ -1770,6 +1752,7 @@ "org.jline:jline-terminal-jni", "org.jline:jline-terminal-jni:jar:sources", "org.jline:jline-terminal:jar:sources", + "org.jline:jline:jar:jdk8", "org.jline:jline:jar:sources", "org.portable-scala:portable-scala-reflect_2.13", "org.portable-scala:portable-scala-reflect_2.13:jar:sources", @@ -1913,8 +1896,6 @@ "io.github.java-diff-utils:java-diff-utils:jar:sources", "junit:junit", "junit:junit:jar:sources", - "net.java.dev.jna:jna", - "net.java.dev.jna:jna:jar:sources", "net.openhft:zero-allocation-hashing", "net.openhft:zero-allocation-hashing:jar:sources", "org.apache.logging.log4j:log4j-api", @@ -1925,7 +1906,6 @@ "org.fusesource.jansi:jansi:jar:sources", "org.hamcrest:hamcrest-core", "org.hamcrest:hamcrest-core:jar:sources", - "org.jline:jline", "org.jline:jline-native", "org.jline:jline-native:jar:sources", "org.jline:jline-reader", @@ -1934,6 +1914,7 @@ "org.jline:jline-terminal-jni", "org.jline:jline-terminal-jni:jar:sources", "org.jline:jline-terminal:jar:sources", + "org.jline:jline:jar:jdk8", "org.jline:jline:jar:sources", "org.portable-scala:portable-scala-reflect_2.13", "org.portable-scala:portable-scala-reflect_2.13:jar:sources", @@ -2077,8 +2058,6 @@ "io.github.java-diff-utils:java-diff-utils:jar:sources", "junit:junit", "junit:junit:jar:sources", - "net.java.dev.jna:jna", - "net.java.dev.jna:jna:jar:sources", "net.openhft:zero-allocation-hashing", "net.openhft:zero-allocation-hashing:jar:sources", "org.apache.logging.log4j:log4j-api", @@ -2089,7 +2068,6 @@ "org.fusesource.jansi:jansi:jar:sources", "org.hamcrest:hamcrest-core", "org.hamcrest:hamcrest-core:jar:sources", - "org.jline:jline", "org.jline:jline-native", "org.jline:jline-native:jar:sources", "org.jline:jline-reader", @@ -2098,6 +2076,7 @@ "org.jline:jline-terminal-jni", "org.jline:jline-terminal-jni:jar:sources", "org.jline:jline-terminal:jar:sources", + "org.jline:jline:jar:jdk8", "org.jline:jline:jar:sources", "org.portable-scala:portable-scala-reflect_2.13", "org.portable-scala:portable-scala-reflect_2.13:jar:sources", @@ -2258,27 +2237,6 @@ "org.apache.logging.log4j.core.impl.Log4jProvider" ] }, - "org.jline:jline": { - "org/": [], - "org/jline/": [], - "org/jline/terminal/": [], - "org/jline/terminal/provider/": [], - "org/jline/terminal/provider/exec": [ - "class=org.jline.terminal.impl.exec.ExecTerminalProvider" - ], - "org/jline/terminal/provider/ffm": [ - "class=org.jline.terminal.impl.ffm.FfmTerminalProvider" - ], - "org/jline/terminal/provider/jansi": [ - "class=org.jline.terminal.impl.jansi.JansiTerminalProvider" - ], - "org/jline/terminal/provider/jna": [ - "class=org.jline.terminal.impl.jna.JnaTerminalProvider" - ], - "org/jline/terminal/provider/jni": [ - "class=org.jline.terminal.impl.jni.JniTerminalProvider" - ] - }, "org.jline:jline-terminal": { "org/": [], "org/jline/": [], @@ -2315,6 +2273,27 @@ "class=org.jline.terminal.impl.exec.ExecTerminalProvider" ] }, + "org.jline:jline:jar:jdk8": { + "org/": [], + "org/jline/": [], + "org/jline/terminal/": [], + "org/jline/terminal/provider/": [], + "org/jline/terminal/provider/exec": [ + "class=org.jline.terminal.impl.exec.ExecTerminalProvider" + ], + "org/jline/terminal/provider/ffm": [ + "class=org.jline.terminal.impl.ffm.FfmTerminalProvider" + ], + "org/jline/terminal/provider/jansi": [ + "class=org.jline.terminal.impl.jansi.JansiTerminalProvider" + ], + "org/jline/terminal/provider/jna": [ + "class=org.jline.terminal.impl.jna.JnaTerminalProvider" + ], + "org/jline/terminal/provider/jni": [ + "class=org.jline.terminal.impl.jni.JniTerminalProvider" + ] + }, "org.jline:jline:jar:sources": { "org/": [], "org/jline/": [], @@ -2341,6 +2320,11 @@ "scala.tools.nsc.interpreter.shell.Scripted$Factory" ] }, + "org.scala-lang:scala-compiler:jar:sources": { + "javax.script.ScriptEngineFactory": [ + "scala.tools.nsc.interpreter.shell.Scripted$Factory" + ] + }, "org.scala-lang:scala3-compiler_3": { "javax.script.ScriptEngineFactory": [ "dotty.tools.repl.ScriptEngine$Factory" diff --git a/tests/cancellation/RunnerForCancelSpec.scala b/tests/cancellation/RunnerForCancelSpec.scala index e08a17c5..52c03d33 100644 --- a/tests/cancellation/RunnerForCancelSpec.scala +++ b/tests/cancellation/RunnerForCancelSpec.scala @@ -1,6 +1,6 @@ package anx.cancellation -import higherkindness.rules_scala.common.worker.WorkerMain +import higherkindness.rules_scala.common.worker.{WorkerMain, WorkTask} import higherkindness.rules_scala.common.sandbox.SandboxUtil import java.io.{InputStream, PrintStream} @@ -11,17 +11,17 @@ class RunnerForCancelSpec(stdin: InputStream, stdout: PrintStream) override def init(args: Option[Array[String]]): Unit = () - override def work(ctx: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = { - var interrupted = false - var i = 0 + override def work(task: WorkTask[Unit]): Unit = { + var interrupted = false + var i = 0 - while (i < 7 && !interrupted) { - Thread.sleep(1000) - if (Thread.interrupted()) { - interrupted = true - } - - i += 1 + while (i < 7 && !interrupted) { + Thread.sleep(1000) + if (Thread.interrupted()) { + interrupted = true } + + i += 1 + } } } diff --git a/tests/deployjar/expected b/tests/deployjar/expected index aba310f8..5aba10fb 100644 --- a/tests/deployjar/expected +++ b/tests/deployjar/expected @@ -98,6 +98,7 @@ -rw---- 2.0 fat 1049 bl 46% defN 20100101.000002 scala/collection/SortedSet$.class -rw---- 2.0 fat 10503 bl 65% defN 20100101.000002 scala/sys/process/ProcessImpl$PipedProcesses.class -rw---- 2.0 fat 1052 bl 50% defN 20100101.000002 scala/collection/mutable/ArrayBuffer$$anon$1.class +-rw---- 2.0 fat 1053 bl 32% defN 20100101.000002 scala/collection/generic/CommonErrors.class -rw---- 2.0 fat 1054 bl 51% defN 20100101.000002 scala/collection/immutable/Map$Map2$$anon$2.class -rw---- 2.0 fat 1054 bl 51% defN 20100101.000002 scala/collection/immutable/Map$Map3$$anon$5.class -rw---- 2.0 fat 1054 bl 51% defN 20100101.000002 scala/collection/immutable/Map$Map4$$anon$8.class @@ -131,7 +132,7 @@ -rw---- 2.0 fat 1085 bl 48% defN 20100101.000002 scala/collection/immutable/Set$Set4$$anon$3.class -rw---- 2.0 fat 1085 bl 48% defN 20100101.000002 scala/util/hashing/MurmurHash3$$anon$4.class -rw---- 2.0 fat 10880 bl 70% defN 20100101.000002 scala/collection/immutable/Vector$.class --rw---- 2.0 fat 10884 bl 67% defN 20100101.000002 scala/collection/mutable/ArrayBuffer$.class +-rw---- 2.0 fat 10891 bl 67% defN 20100101.000002 scala/collection/mutable/ArrayBuffer$.class -rw---- 2.0 fat 1089 bl 42% defN 20100101.000002 scala/collection/mutable/SortedSetOps.class -rw---- 2.0 fat 1090 bl 48% defN 20100101.000002 scala/collection/StepperShape$Shape.class -rw---- 2.0 fat 10929 bl 69% defN 20100101.000002 scala/collection/View$.class @@ -176,8 +177,8 @@ -rw---- 2.0 fat 1134 bl 34% defN 20100101.000002 scala/collection/Hashing.class -rw---- 2.0 fat 11357 bl 65% defN 20100101.000000 LICENSE -rw---- 2.0 fat 11359 bl 72% defN 20100101.000002 scala/util/Properties$.class +-rw---- 2.0 fat 11368 bl 54% defN 20100101.000002 scala/util/Failure.class -rw---- 2.0 fat 11375 bl 68% defN 20100101.000002 scala/collection/immutable/RedBlackTree$Tree.class --rw---- 2.0 fat 11376 bl 54% defN 20100101.000002 scala/util/Failure.class -rw---- 2.0 fat 1138 bl 55% defN 20100101.000002 scala/collection/convert/StreamExtensions$AccumulatorFactoryInfo$$anon$9.class -rw---- 2.0 fat 1139 bl 54% defN 20100101.000002 scala/Product14$.class -rw---- 2.0 fat 11407 bl 74% defN 20100101.000002 scala/math/Equiv$.class @@ -225,7 +226,7 @@ -rw---- 2.0 fat 11886 bl 63% defN 20100101.000002 scala/collection/mutable/IndexedBuffer.class -rw---- 2.0 fat 1189 bl 43% defN 20100101.000002 scala/runtime/ScalaRunTime$$anon$1.class -rw---- 2.0 fat 1190 bl 47% defN 20100101.000002 scala/collection/View$Single.class --rw---- 2.0 fat 11932 bl 53% defN 20100101.000002 scala/util/Success.class +-rw---- 2.0 fat 11920 bl 53% defN 20100101.000002 scala/util/Success.class -rw---- 2.0 fat 1194 bl 44% defN 20100101.000002 scala/math/Equiv$Boolean$.class -rw---- 2.0 fat 1194 bl 55% defN 20100101.000002 scala/collection/mutable/package$.class -rw---- 2.0 fat 1195 bl 55% defN 20100101.000002 scala/collection/JavaConverters$AsJavaEnumeration.class @@ -233,7 +234,7 @@ -rw---- 2.0 fat 11995 bl 78% defN 20100101.000002 scala/Tuple2$.class -rw---- 2.0 fat 1199 bl 46% defN 20100101.000002 scala/collection/immutable/StrictOptimizedSortedSetOps.class -rw---- 2.0 fat 1200 bl 53% defN 20100101.000002 scala/util/hashing/MurmurHash3$ArrayHashing$mcV$sp.class --rw---- 2.0 fat 12030 bl 66% defN 20100101.000002 scala/collection/convert/JavaCollectionWrappers$JMapWrapperLike.class +-rw---- 2.0 fat 12026 bl 66% defN 20100101.000002 scala/collection/convert/JavaCollectionWrappers$JMapWrapperLike.class -rw---- 2.0 fat 12035 bl 71% defN 20100101.000002 scala/collection/immutable/Set$Set3.class -rw---- 2.0 fat 1203 bl 56% defN 20100101.000002 scala/Product16$.class -rw---- 2.0 fat 1204 bl 46% defN 20100101.000002 scala/collection/Iterator$$anon$26.class @@ -242,6 +243,7 @@ -rw---- 2.0 fat 1207 bl 49% defN 20100101.000002 scala/collection/convert/impl/BitSetStepper$.class -rw---- 2.0 fat 1208 bl 44% defN 20100101.000002 scala/util/control/NonFatal$.class -rw---- 2.0 fat 1209 bl 54% defN 20100101.000002 scala/math/Fractional$Implicits$.class +-rw---- 2.0 fat 1212 bl 47% defN 20100101.000002 scala/collection/generic/CommonErrors$.class -rw---- 2.0 fat 1212 bl 50% defN 20100101.000002 scala/math/Numeric$BigDecimalIsConflicted$.class -rw---- 2.0 fat 1213 bl 46% defN 20100101.000002 scala/sys/Prop$IntProp$$anonfun$$lessinit$greater$3.class -rw---- 2.0 fat 1216 bl 52% defN 20100101.000002 scala/collection/convert/impl/IntChampStepper$.class @@ -314,9 +316,9 @@ -rw---- 2.0 fat 12871 bl 50% defN 20100101.000002 scala/collection/SeqView.class -rw---- 2.0 fat 12891 bl 67% defN 20100101.000002 scala/concurrent/duration/DurationConversions.class -rw---- 2.0 fat 1289 bl 47% defN 20100101.000002 scala/math/Equiv$Float$StrictEquiv$.class +-rw---- 2.0 fat 1292 bl 43% defN 20100101.000002 scala/util/Try$.class -rw---- 2.0 fat 1292 bl 47% defN 20100101.000002 scala/collection/Iterator$$anon$18.class -rw---- 2.0 fat 1292 bl 55% defN 20100101.000002 scala/runtime/VolatileObjectRef.class --rw---- 2.0 fat 1296 bl 43% defN 20100101.000002 scala/util/Try$.class -rw---- 2.0 fat 1296 bl 47% defN 20100101.000002 scala/math/Equiv$Double$StrictEquiv$.class -rw---- 2.0 fat 1296 bl 51% defN 20100101.000002 scala/collection/MapOps$$anon$1.class -rw---- 2.0 fat 1297 bl 55% defN 20100101.000002 scala/collection/mutable/AnyRefMap$$anon$1.class @@ -399,8 +401,8 @@ -rw---- 2.0 fat 1407 bl 33% defN 20100101.000002 scala/math/LowPriorityEquiv.class -rw---- 2.0 fat 14096 bl 62% defN 20100101.000002 scala/runtime/RichFloat.class -rw---- 2.0 fat 1409 bl 53% defN 20100101.000002 scala/runtime/AbstractPartialFunction$mcVJ$sp.class --rw---- 2.0 fat 14108 bl 50% defN 20100101.000002 scala/collection/mutable/ArrayBuilder.class -rw---- 2.0 fat 1410 bl 42% defN 20100101.000002 scala/jdk/javaapi/FutureConverters.class +-rw---- 2.0 fat 14118 bl 50% defN 20100101.000002 scala/collection/mutable/ArrayBuilder.class -rw---- 2.0 fat 1411 bl 52% defN 20100101.000002 scala/Float$.class -rw---- 2.0 fat 1412 bl 54% defN 20100101.000002 scala/runtime/AbstractPartialFunction$mcVF$sp.class -rw---- 2.0 fat 1413 bl 49% defN 20100101.000002 scala/util/Success$.class @@ -694,7 +696,7 @@ -rw---- 2.0 fat 1717 bl 41% defN 20100101.000002 scala/runtime/java8/JFunction1$mcFF$sp.class -rw---- 2.0 fat 1718 bl 56% defN 20100101.000002 scala/jdk/OptionShape$$anon$1.class -rw---- 2.0 fat 1721 bl 41% defN 20100101.000002 scala/runtime/java8/JFunction1$mcDD$sp.class --rw---- 2.0 fat 17228 bl 70% defN 20100101.000002 scala/sys/process/ProcessBuilderImpl$AbstractBuilder.class +-rw---- 2.0 fat 17224 bl 70% defN 20100101.000002 scala/sys/process/ProcessBuilderImpl$AbstractBuilder.class -rw---- 2.0 fat 1724 bl 54% defN 20100101.000002 scala/jdk/DurationConverters$ScalaDurationOps$.class -rw---- 2.0 fat 1724 bl 60% defN 20100101.000002 scala/collection/SortedMapOps$GenKeySortedSet.class -rw---- 2.0 fat 1725 bl 52% defN 20100101.000002 scala/reflect/ManifestFactory$NullManifest.class @@ -853,7 +855,6 @@ -rw---- 2.0 fat 1854 bl 44% defN 20100101.000002 scala/collection/immutable/SetReverseIterator.class -rw---- 2.0 fat 1854 bl 47% defN 20100101.000002 scala/ref/PhantomReferenceWithWrapper.class -rw---- 2.0 fat 1854 bl 55% defN 20100101.000002 scala/collection/LazyZip3$$anon$9.class --rw---- 2.0 fat 18550 bl 55% defN 20100101.000002 scala/util/hashing/MurmurHash3.class -rw---- 2.0 fat 1855 bl 36% defN 20100101.000002 scala/runtime/LazyFloat.class -rw---- 2.0 fat 1855 bl 37% defN 20100101.000002 scala/runtime/LazyShort.class -rw---- 2.0 fat 1855 bl 43% defN 20100101.000002 scala/runtime/java8/JFunction2$mcDII$sp.class @@ -878,8 +879,10 @@ -rw---- 2.0 fat 1860 bl 43% defN 20100101.000002 scala/runtime/java8/JFunction2$mcIDD$sp.class -rw---- 2.0 fat 1860 bl 43% defN 20100101.000002 scala/runtime/java8/JFunction2$mcZJJ$sp.class -rw---- 2.0 fat 1860 bl 48% defN 20100101.000002 scala/concurrent/Await.class +-rw---- 2.0 fat 18610 bl 75% defN 20100101.000002 scala/collection/SeqView$Take.class -rw---- 2.0 fat 1861 bl 36% defN 20100101.000002 scala/runtime/LazyDouble.class -rw---- 2.0 fat 1861 bl 57% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaBinaryOperator$.class +-rw---- 2.0 fat 18641 bl 55% defN 20100101.000002 scala/util/hashing/MurmurHash3.class -rw---- 2.0 fat 1864 bl 38% defN 20100101.000002 scala/collection/WithFilter.class -rw---- 2.0 fat 1864 bl 43% defN 20100101.000002 scala/runtime/java8/JFunction2$mcZDD$sp.class -rw---- 2.0 fat 1865 bl 57% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaLongFunction$.class @@ -912,7 +915,6 @@ -rw---- 2.0 fat 1885 bl 57% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaToLongFunction$.class -rw---- 2.0 fat 1888 bl 62% defN 20100101.000002 scala/collection/package$.class -rw---- 2.0 fat 1890 bl 58% defN 20100101.000002 scala/collection/LazyZip4$$anon$23.class --rw---- 2.0 fat 18917 bl 74% defN 20100101.000002 scala/collection/SeqView$Take.class -rw---- 2.0 fat 1893 bl 55% defN 20100101.000002 scala/jdk/FunctionWrappers$RichFunction1AsDoubleToLongFunction$.class -rw---- 2.0 fat 1893 bl 55% defN 20100101.000002 scala/jdk/FunctionWrappers$RichFunction1AsLongToDoubleFunction$.class -rw---- 2.0 fat 1893 bl 55% defN 20100101.000002 scala/jdk/FunctionWrappers$RichFunction2AsDoubleBinaryOperator$.class @@ -1232,7 +1234,6 @@ -rw---- 2.0 fat 2162 bl 58% defN 20100101.000002 scala/collection/convert/StreamExtensions$StreamUnboxer$$anon$6.class -rw---- 2.0 fat 2162 bl 58% defN 20100101.000002 scala/jdk/FunctionWrappers$RichFunction1AsUnaryOperator.class -rw---- 2.0 fat 2162 bl 59% defN 20100101.000002 scala/jdk/FunctionWrappers$RichToLongBiFunctionAsFunction2.class --rw---- 2.0 fat 2163 bl 68% defN 20100101.000002 scala/collection/generic/IsMap$.class -rw---- 2.0 fat 2165 bl 59% defN 20100101.000002 scala/collection/LazyZip4$$anon$23$$anon$24.class -rw---- 2.0 fat 2169 bl 58% defN 20100101.000002 scala/jdk/FunctionWrappers$RichLongFunctionAsFunction1$.class -rw---- 2.0 fat 21710 bl 53% defN 20100101.000002 scala/jdk/IntAccumulator.class @@ -1245,8 +1246,9 @@ -rw---- 2.0 fat 2177 bl 59% defN 20100101.000002 scala/jdk/FunctionWrappers$RichFunction1AsIntFunction.class -rw---- 2.0 fat 2179 bl 53% defN 20100101.000002 scala/collection/immutable/SortedMap$.class -rw---- 2.0 fat 2180 bl 58% defN 20100101.000002 scala/collection/convert/StreamExtensions$StreamUnboxer$$anon$7.class +-rw---- 2.0 fat 2182 bl 68% defN 20100101.000002 scala/collection/generic/IsMap$.class -rw---- 2.0 fat 2183 bl 59% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaDoubleSupplier$.class --rw---- 2.0 fat 21860 bl 63% defN 20100101.000002 scala/runtime/ScalaRunTime$.class +-rw---- 2.0 fat 21856 bl 63% defN 20100101.000002 scala/runtime/ScalaRunTime$.class -rw---- 2.0 fat 2186 bl 53% defN 20100101.000002 scala/collection/View$ZipAll.class -rw---- 2.0 fat 2186 bl 59% defN 20100101.000002 scala/jdk/FunctionWrappers$RichFunction2AsBinaryOperator.class -rw---- 2.0 fat 2188 bl 63% defN 20100101.000002 scala/collection/MapFactory$Delegate.class @@ -1598,7 +1600,7 @@ -rw---- 2.0 fat 2722 bl 43% defN 20100101.000002 scala/Product3.class -rw---- 2.0 fat 2723 bl 53% defN 20100101.000002 scala/collection/IndexedSeqView$IndexedSeqViewIterator.class -rw---- 2.0 fat 2725 bl 52% defN 20100101.000002 scala/jdk/DoubleAccumulator$SerializationProxy.class --rw---- 2.0 fat 27283 bl 60% defN 20100101.000002 scala/util/PropertiesTrait.class +-rw---- 2.0 fat 27292 bl 60% defN 20100101.000002 scala/util/PropertiesTrait.class -rw---- 2.0 fat 2729 bl 60% defN 20100101.000002 scala/runtime/RichByte$.class -rw---- 2.0 fat 2735 bl 63% defN 20100101.000002 scala/Tuple11$.class -rw---- 2.0 fat 2741 bl 56% defN 20100101.000002 scala/collection/View$Concat.class @@ -1690,7 +1692,7 @@ -rw---- 2.0 fat 3007 bl 65% defN 20100101.000002 scala/Tuple13$.class -rw---- 2.0 fat 300 bl 17% defN 20100101.000002 scala/Dynamic.class -rw---- 2.0 fat 30164 bl 57% defN 20100101.000002 scala/collection/convert/StreamExtensions.class --rw---- 2.0 fat 30166 bl 58% defN 20100101.000002 scala/collection/immutable/HashCollisionMapNode.class +-rw---- 2.0 fat 30173 bl 58% defN 20100101.000002 scala/collection/immutable/HashCollisionMapNode.class -rw---- 2.0 fat 3018 bl 56% defN 20100101.000002 scala/collection/LazyZip4$$anon$21$$anon$22.class -rw---- 2.0 fat 3021 bl 38% defN 20100101.000002 scala/sys/process/processInternal.class -rw---- 2.0 fat 3021 bl 55% defN 20100101.000002 scala/collection/mutable/ArrayBuilder$ofRef.class @@ -1713,7 +1715,6 @@ -rw---- 2.0 fat 3084 bl 52% defN 20100101.000002 scala/collection/immutable/StrictOptimizedSortedMapOps.class -rw---- 2.0 fat 3097 bl 39% defN 20100101.000002 scala/concurrent/SyncVar.class -rw---- 2.0 fat 3106 bl 64% defN 20100101.000002 scala/collection/BitSet$.class --rw---- 2.0 fat 3109 bl 48% defN 20100101.000002 scala/collection/Iterator$SliceIterator.class -rw---- 2.0 fat 3109 bl 62% defN 20100101.000002 scala/Array$UnapplySeqWrapper$.class -rw---- 2.0 fat 3117 bl 55% defN 20100101.000002 scala/jdk/AnyAccumulator$SerializationProxy.class -rw---- 2.0 fat 31184 bl 73% defN 20100101.000002 scala/collection/immutable/Nil.class @@ -1815,7 +1816,7 @@ -rw---- 2.0 fat 33818 bl 72% defN 20100101.000002 scala/util/Sorting$.class -rw---- 2.0 fat 33887 bl 62% defN 20100101.000002 scala/collection/mutable/PriorityQueue.class -rw---- 2.0 fat 3395 bl 60% defN 20100101.000002 scala/collection/Factory$ArrayFactory.class --rw---- 2.0 fat 34001 bl 60% defN 20100101.000002 scala/concurrent/Future.class +-rw---- 2.0 fat 33997 bl 60% defN 20100101.000002 scala/concurrent/Future.class -rw---- 2.0 fat 3401 bl 60% defN 20100101.000002 scala/collection/mutable/ArrayBuilder$ofUnit.class -rw---- 2.0 fat 3402 bl 44% defN 20100101.000002 scala/collection/convert/impl/VectorStepperBase.class -rw---- 2.0 fat 3413 bl 70% defN 20100101.000002 scala/collection/convert/StreamExtensions$MapHasParKeyValueStream.class @@ -1859,7 +1860,6 @@ -rw---- 2.0 fat 3541 bl 61% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaIntBinaryOperator.class -rw---- 2.0 fat 3541 bl 61% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaUnaryOperator.class -rw---- 2.0 fat 3548 bl 62% defN 20100101.000002 scala/collection/mutable/HashMap$.class --rw---- 2.0 fat 354 bl 43% defN 20100101.000000 library.properties -rw---- 2.0 fat 3551 bl 68% defN 20100101.000002 scala/Tuple17$.class -rw---- 2.0 fat 3552 bl 61% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaLongBinaryOperator.class -rw---- 2.0 fat 3560 bl 56% defN 20100101.000002 scala/sys/process/ProcessIO.class @@ -1880,6 +1880,7 @@ -rw---- 2.0 fat 3620 bl 65% defN 20100101.000002 scala/collection/immutable/HashMap$.class -rw---- 2.0 fat 3627 bl 59% defN 20100101.000002 scala/runtime/Tuple2Zipped$Ops$.class -rw---- 2.0 fat 3630 bl 61% defN 20100101.000002 scala/concurrent/Await$.class +-rw---- 2.0 fat 363 bl 41% defN 20100101.000000 library.properties -rw---- 2.0 fat 3647 bl 61% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaIntConsumer.class -rw---- 2.0 fat 3654 bl 53% defN 20100101.000002 scala/collection/StrictOptimizedLinearSeqOps.class -rw---- 2.0 fat 3658 bl 58% defN 20100101.000002 scala/PartialFunction$ElementWiseExtractor$.class @@ -1933,10 +1934,10 @@ -rw---- 2.0 fat 3668 bl 66% defN 20100101.000002 scala/collection/convert/ImplicitConversionsToScala.class -rw---- 2.0 fat 366 bl 15% defN 20100101.000002 scala/annotation/meta/package.class -rw---- 2.0 fat 366 bl 21% defN 20100101.000002 scala/annotation/StaticAnnotation.class +-rw---- 2.0 fat 36703 bl 53% defN 20100101.000002 scala/math/Ordering.class -rw---- 2.0 fat 3671 bl 61% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaIntFunction.class -rw---- 2.0 fat 3674 bl 64% defN 20100101.000002 scala/jdk/javaapi/OptionConverters$.class -rw---- 2.0 fat 3678 bl 61% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaDoubleConsumer.class --rw---- 2.0 fat 36804 bl 52% defN 20100101.000002 scala/math/Ordering.class -rw---- 2.0 fat 3682 bl 58% defN 20100101.000002 scala/collection/Iterator$ConcatIterator.class -rw---- 2.0 fat 3687 bl 68% defN 20100101.000002 scala/Tuple18$.class -rw---- 2.0 fat 36895 bl 62% defN 20100101.000002 scala/collection/mutable/HashSet.class @@ -1965,10 +1966,10 @@ -rw---- 2.0 fat 3736 bl 62% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaToDoubleFunction.class -rw---- 2.0 fat 3744 bl 58% defN 20100101.000002 scala/concurrent/duration/Duration$Infinite.class -rw---- 2.0 fat 3748 bl 60% defN 20100101.000002 scala/Function0.class --rw---- 2.0 fat 37568 bl 62% defN 20100101.000002 scala/collection/mutable/ListBuffer.class +-rw---- 2.0 fat 37605 bl 62% defN 20100101.000002 scala/collection/mutable/ListBuffer.class -rw---- 2.0 fat 3767 bl 56% defN 20100101.000002 scala/collection/mutable/ArraySeq$ofByte.class --rw---- 2.0 fat 37718 bl 50% defN 20100101.000002 scala/collection/immutable/BitmapIndexedMapNode.class -rw---- 2.0 fat 3771 bl 35% defN 20100101.000002 scala/collection/package.class +-rw---- 2.0 fat 37725 bl 50% defN 20100101.000002 scala/collection/immutable/BitmapIndexedMapNode.class -rw---- 2.0 fat 3772 bl 68% defN 20100101.000002 scala/collection/SeqFactory$UnapplySeqWrapper$.class -rw---- 2.0 fat 3776 bl 62% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaIntUnaryOperator.class -rw---- 2.0 fat 3777 bl 65% defN 20100101.000002 scala/runtime/RichLong$.class @@ -1999,21 +2000,21 @@ -rw---- 2.0 fat 3896 bl 62% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaToLongBiFunction.class -rw---- 2.0 fat 3896 bl 63% defN 20100101.000002 scala/collection/immutable/LongVectorStepper.class -rw---- 2.0 fat 3900 bl 57% defN 20100101.000002 scala/collection/mutable/ArraySeq$ofDouble.class --rw---- 2.0 fat 39024 bl 59% defN 20100101.000002 scala/collection/mutable/LongMap.class -rw---- 2.0 fat 3906 bl 60% defN 20100101.000002 scala/math/Equiv$Tuple6Equiv.class -rw---- 2.0 fat 390 bl 36% defN 20100101.000002 scala/util/Using$Releasable.class +-rw---- 2.0 fat 39103 bl 59% defN 20100101.000002 scala/collection/mutable/LongMap.class -rw---- 2.0 fat 3910 bl 47% defN 20100101.000002 scala/Product10.class -rw---- 2.0 fat 3914 bl 62% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaObjDoubleConsumer.class -rw---- 2.0 fat 3914 bl 62% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaToDoubleBiFunction.class -rw---- 2.0 fat 39176 bl 50% defN 20100101.000002 scala/collection/immutable/Vector6.class -rw---- 2.0 fat 3933 bl 62% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaConsumer.class +-rw---- 2.0 fat 39518 bl 64% defN 20100101.000002 scala/collection/mutable/UnrolledBuffer.class -rw---- 2.0 fat 3951 bl 64% defN 20100101.000002 scala/collection/immutable/DoubleVectorStepper.class -rw---- 2.0 fat 3957 bl 67% defN 20100101.000002 scala/collection/immutable/IntMap$Bin.class -rw---- 2.0 fat 3958 bl 65% defN 20100101.000002 scala/collection/immutable/LazyList$Deferrer.class -rw---- 2.0 fat 3959 bl 69% defN 20100101.000002 scala/Tuple20$.class -rw---- 2.0 fat 3960 bl 62% defN 20100101.000002 scala/collection/immutable/Stream$Deferrer.class -rw---- 2.0 fat 3966 bl 64% defN 20100101.000002 scala/collection/immutable/Map$.class --rw---- 2.0 fat 39758 bl 64% defN 20100101.000002 scala/collection/mutable/UnrolledBuffer.class -rw---- 2.0 fat 3987 bl 62% defN 20100101.000002 scala/collection/immutable/Stream$Deferrer$.class -rw---- 2.0 fat 3989 bl 66% defN 20100101.000002 scala/collection/immutable/LongMap$Bin.class -rw---- 2.0 fat 3996 bl 56% defN 20100101.000002 scala/jdk/Priority2FunctionExtensions.class @@ -2025,13 +2026,13 @@ -rw---- 2.0 fat 4029 bl 52% defN 20100101.000002 scala/Product2.class -rw---- 2.0 fat 4029 bl 63% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaBiFunction.class -rw---- 2.0 fat 40340 bl 66% defN 20100101.000002 scala/collection/mutable/BitSet.class --rw---- 2.0 fat 40518 bl 61% defN 20100101.000002 scala/collection/immutable/NumericRange.class --rw---- 2.0 fat 40622 bl 58% defN 20100101.000002 scala/collection/mutable/AnyRefMap.class +-rw---- 2.0 fat 40566 bl 61% defN 20100101.000002 scala/collection/immutable/NumericRange.class -rw---- 2.0 fat 4075 bl 34% defN 20100101.000002 scala/collection/SeqFactory.class -rw---- 2.0 fat 40861 bl 61% defN 20100101.000002 scala/collection/immutable/LongMap.class -rw---- 2.0 fat 4088 bl 52% defN 20100101.000002 scala/collection/mutable/MultiMap.class -rw---- 2.0 fat 4093 bl 47% defN 20100101.000002 scala/Product11.class -rw---- 2.0 fat 4095 bl 69% defN 20100101.000002 scala/Tuple21$.class +-rw---- 2.0 fat 40964 bl 58% defN 20100101.000002 scala/collection/mutable/AnyRefMap.class -rw---- 2.0 fat 409 bl 30% defN 20100101.000002 scala/jdk/package$.class -rw---- 2.0 fat 41020 bl 61% defN 20100101.000002 scala/collection/immutable/IntMap.class -rw---- 2.0 fat 4104 bl 63% defN 20100101.000002 scala/jdk/FunctionWrappers$AsJavaBiConsumer.class @@ -2061,7 +2062,6 @@ -rw---- 2.0 fat 422 bl 38% defN 20100101.000002 scala/sys/Prop$Creator.class -rw---- 2.0 fat 4231 bl 70% defN 20100101.000002 scala/Tuple22$.class -rw---- 2.0 fat 423 bl 16% defN 20100101.000002 scala/collection/mutable/Clearable.class --rw---- 2.0 fat 4240 bl 47% defN 20100101.000002 scala/collection/generic/IsMap.class -rw---- 2.0 fat 4253 bl 61% defN 20100101.000002 scala/runtime/Tuple3Zipped$Ops$.class -rw---- 2.0 fat 4255 bl 62% defN 20100101.000002 scala/collection/convert/StreamExtensions$StreamHasToScala.class -rw---- 2.0 fat 425 bl 32% defN 20100101.000002 scala/languageFeature$.class @@ -2082,6 +2082,7 @@ -rw---- 2.0 fat 4319 bl 64% defN 20100101.000002 scala/collection/immutable/LongMapUtils$.class -rw---- 2.0 fat 4319 bl 66% defN 20100101.000002 scala/collection/convert/JavaCollectionWrappers$ConcurrentMapWrapper.class -rw---- 2.0 fat 431 bl 32% defN 20100101.000002 scala/collection/LongStepper$.class +-rw---- 2.0 fat 43200 bl 64% defN 20100101.000002 scala/collection/mutable/ArrayBuffer.class -rw---- 2.0 fat 4326 bl 49% defN 20100101.000002 scala/collection/SortedMap.class -rw---- 2.0 fat 432 bl 31% defN 20100101.000002 scala/collection/IterableOps$.class -rw---- 2.0 fat 432 bl 39% defN 20100101.000002 scala/reflect/ScalaSignature.class @@ -2091,16 +2092,16 @@ -rw---- 2.0 fat 4340 bl 42% defN 20100101.000002 scala/collection/convert/impl/TableStepperBase.class -rw---- 2.0 fat 4345 bl 70% defN 20100101.000002 scala/math/Numeric$LongIsIntegral.class -rw---- 2.0 fat 4353 bl 53% defN 20100101.000002 scala/collection/SetOps$SubsetsItr.class --rw---- 2.0 fat 43572 bl 64% defN 20100101.000002 scala/collection/mutable/ArrayBuffer.class -rw---- 2.0 fat 435 bl 32% defN 20100101.000002 scala/collection/DoubleStepper$.class +-rw---- 2.0 fat 4365 bl 46% defN 20100101.000002 scala/collection/generic/IsMap.class +-rw---- 2.0 fat 43679 bl 64% defN 20100101.000002 scala/collection/immutable/Vector.class -rw---- 2.0 fat 436 bl 32% defN 20100101.000002 scala/jdk/FunctionWrappers$.class -rw---- 2.0 fat 4373 bl 56% defN 20100101.000002 scala/io/Codec$.class -rw---- 2.0 fat 4378 bl 70% defN 20100101.000002 scala/collection/convert/ImplicitConversionsToJava.class --rw---- 2.0 fat 43796 bl 60% defN 20100101.000002 scala/collection/immutable/Range.class --rw---- 2.0 fat 43810 bl 64% defN 20100101.000002 scala/collection/immutable/Vector.class -rw---- 2.0 fat 4381 bl 53% defN 20100101.000002 scala/collection/SortedMapFactoryDefaults.class -rw---- 2.0 fat 4382 bl 60% defN 20100101.000002 scala/PartialFunction$.class -rw---- 2.0 fat 4386 bl 55% defN 20100101.000002 scala/collection/MapFactoryDefaults.class +-rw---- 2.0 fat 43885 bl 60% defN 20100101.000002 scala/collection/immutable/Range.class -rw---- 2.0 fat 438 bl 44% defN 20100101.000002 scala/collection/convert/StreamExtensions$AccumulatorFactoryInfo.class -rw---- 2.0 fat 4392 bl 57% defN 20100101.000002 scala/collection/immutable/BitSet$BitSet2.class -rw---- 2.0 fat 439 bl 32% defN 20100101.000002 scala/collection/generic/package$.class @@ -2127,6 +2128,7 @@ -rw---- 2.0 fat 4459 bl 63% defN 20100101.000002 scala/jdk/FunctionWrappers$FromJavaBooleanSupplier.class -rw---- 2.0 fat 4462 bl 48% defN 20100101.000002 scala/Product13.class -rw---- 2.0 fat 4464 bl 68% defN 20100101.000002 scala/math/Numeric$DoubleIsFractional.class +-rw---- 2.0 fat 4475 bl 52% defN 20100101.000002 scala/collection/Iterator$SliceIterator.class -rw---- 2.0 fat 447 bl 32% defN 20100101.000002 scala/io/AnsiColor$.class -rw---- 2.0 fat 4480 bl 57% defN 20100101.000002 scala/sys/package$.class -rw---- 2.0 fat 4493 bl 75% defN 20100101.000002 scala/jdk/Accumulator$AccumulatorFactoryShape$.class @@ -2184,10 +2186,10 @@ -rw---- 2.0 fat 4878 bl 69% defN 20100101.000002 scala/math/Ordering$Short$.class -rw---- 2.0 fat 487 bl 44% defN 20100101.000002 scala/concurrent/duration/DurationConversions$Classifier.class -rw---- 2.0 fat 4892 bl 69% defN 20100101.000002 scala/math/Ordering$Boolean$.class +-rw---- 2.0 fat 48967 bl 63% defN 20100101.000002 scala/collection/immutable/List.class -rw---- 2.0 fat 4899 bl 52% defN 20100101.000002 scala/Console.class -rw---- 2.0 fat 48 b- 0% stor 20100101.000000 META-INF/MANIFEST.MF -rw---- 2.0 fat 4902 bl 59% defN 20100101.000002 scala/collection/immutable/SetOps.class --rw---- 2.0 fat 49050 bl 63% defN 20100101.000002 scala/collection/immutable/List.class -rw---- 2.0 fat 4905 bl 59% defN 20100101.000002 scala/collection/immutable/VectorStepperBase.class -rw---- 2.0 fat 4906 bl 70% defN 20100101.000002 scala/collection/Stepper$UnboxingIntStepper.class -rw---- 2.0 fat 4910 bl 70% defN 20100101.000002 scala/math/Ordering$String$.class @@ -2202,8 +2204,8 @@ -rw---- 2.0 fat 4932 bl 38% defN 20100101.000002 scala/concurrent/BatchingExecutor.class -rw---- 2.0 fat 4944 bl 55% defN 20100101.000002 scala/Function7.class -rw---- 2.0 fat 4947 bl 69% defN 20100101.000002 scala/collection/mutable/AnyRefMap$AnyRefMapBuilder.class +-rw---- 2.0 fat 4948 bl 34% defN 20100101.000002 scala/util/control/TailCalls.class -rw---- 2.0 fat 494 bl 36% defN 20100101.000002 scala/sys/process/ProcessBuilder$.class --rw---- 2.0 fat 4952 bl 34% defN 20100101.000002 scala/util/control/TailCalls.class -rw---- 2.0 fat 4955 bl 70% defN 20100101.000002 scala/collection/Stepper$UnboxingDoubleStepper.class -rw---- 2.0 fat 4963 bl 70% defN 20100101.000002 scala/collection/immutable/Set$EmptySet$.class -rw---- 2.0 fat 4966 bl 69% defN 20100101.000002 scala/collection/Stepper$UnboxingByteStepper.class @@ -2236,9 +2238,9 @@ -rw---- 2.0 fat 5045 bl 60% defN 20100101.000002 scala/ref/SoftReference.class -rw---- 2.0 fat 5045 bl 60% defN 20100101.000002 scala/ref/WeakReference.class -rw---- 2.0 fat 5057 bl 68% defN 20100101.000002 scala/collection/mutable/LongMap$LongMapBuilder.class +-rw---- 2.0 fat 50585 bl 61% defN 20100101.000002 scala/collection/immutable/HashMap.class -rw---- 2.0 fat 505 bl 18% defN 20100101.000002 scala/util/package.class -rw---- 2.0 fat 5060 bl 71% defN 20100101.000002 scala/concurrent/duration/Deadline$DeadlineIsOrdered$.class --rw---- 2.0 fat 50663 bl 61% defN 20100101.000002 scala/collection/immutable/HashMap.class -rw---- 2.0 fat 506 bl 15% defN 20100101.000002 scala/concurrent/CanAwait.class -rw---- 2.0 fat 5070 bl 72% defN 20100101.000002 scala/sys/process/ProcessBuilderImpl$FileImpl.class -rw---- 2.0 fat 5080 bl 46% defN 20100101.000002 scala/collection/MapFactory.class @@ -2325,15 +2327,15 @@ -rw---- 2.0 fat 542 bl 46% defN 20100101.000002 scala/collection/immutable/LazyList$State.class -rw---- 2.0 fat 5439 bl 51% defN 20100101.000002 scala/collection/AnyStepper.class -rw---- 2.0 fat 543 bl 35% defN 20100101.000002 scala/annotation/nowarn$.class +-rw---- 2.0 fat 54412 bl 64% defN 20100101.000002 scala/collection/mutable/ArrayDeque.class -rw---- 2.0 fat 5444 bl 70% defN 20100101.000002 scala/collection/mutable/TreeSet$$anon$1.class -rw---- 2.0 fat 5447 bl 65% defN 20100101.000002 scala/collection/immutable/LazyList$WithFilter.class -rw---- 2.0 fat 5449 bl 63% defN 20100101.000002 scala/collection/immutable/RedBlackTree$TreeIterator.class -rw---- 2.0 fat 544 bl 26% defN 20100101.000002 scala/annotation/Annotation.class -rw---- 2.0 fat 5450 bl 63% defN 20100101.000002 scala/collection/mutable/GrowableBuilder.class --rw---- 2.0 fat 54514 bl 67% defN 20100101.000002 scala/collection/StringOps$.class --rw---- 2.0 fat 54532 bl 64% defN 20100101.000002 scala/collection/mutable/ArrayDeque.class -rw---- 2.0 fat 545 bl 35% defN 20100101.000002 scala/package$$anon$1.class -rw---- 2.0 fat 5461 bl 62% defN 20100101.000002 scala/collection/convert/impl/AnyIndexedSeqStepper.class +-rw---- 2.0 fat 54670 bl 67% defN 20100101.000002 scala/collection/StringOps$.class -rw---- 2.0 fat 5470 bl 52% defN 20100101.000002 scala/collection/immutable/VectorStatics.class -rw---- 2.0 fat 5490 bl 61% defN 20100101.000002 scala/util/Properties.class -rw---- 2.0 fat 5506 bl 68% defN 20100101.000002 scala/collection/immutable/IntMap$.class @@ -2457,6 +2459,7 @@ -rw---- 2.0 fat 5990 bl 62% defN 20100101.000002 scala/collection/convert/impl/LongVectorStepper.class -rw---- 2.0 fat 600 bl 28% defN 20100101.000002 scala/noinline.class -rw---- 2.0 fat 6011 bl 61% defN 20100101.000002 scala/collection/immutable/ArraySeq$ofLong.class +-rw---- 2.0 fat 6021 bl 50% defN 20100101.000002 scala/collection/immutable/StrictOptimizedSeqOps.class -rw---- 2.0 fat 6031 bl 64% defN 20100101.000002 scala/collection/convert/impl/IntNumericRangeStepper.class -rw---- 2.0 fat 6038 bl 69% defN 20100101.000002 scala/runtime/RichChar$.class -rw---- 2.0 fat 6041 bl 62% defN 20100101.000002 scala/collection/convert/impl/DoubleVectorStepper.class @@ -2505,7 +2508,7 @@ -rw---- 2.0 fat 6343 bl 62% defN 20100101.000002 scala/reflect/AnyValManifest.class -rw---- 2.0 fat 6345 bl 56% defN 20100101.000002 scala/collection/StrictOptimizedSeqFactory.class -rw---- 2.0 fat 6347 bl 64% defN 20100101.000002 scala/jdk/LongAccumulator$.class --rw---- 2.0 fat 6352 bl 50% defN 20100101.000002 scala/collection/immutable/StrictOptimizedSeqOps.class +-rw---- 2.0 fat 634 bl 37% defN 20100101.000000 NOTICE -rw---- 2.0 fat 6352 bl 70% defN 20100101.000002 scala/reflect/ManifestFactory$AbstractTypeManifest.class -rw---- 2.0 fat 6353 bl 41% defN 20100101.000002 scala/jdk/OptionConverters.class -rw---- 2.0 fat 636 bl 29% defN 20100101.000002 scala/annotation/meta/getter.class @@ -2527,7 +2530,6 @@ -rw---- 2.0 fat 645 bl 29% defN 20100101.000002 scala/collection/immutable/SeqOps.class -rw---- 2.0 fat 645 bl 41% defN 20100101.000002 scala/io/Source$RelaxedPosition$.class -rw---- 2.0 fat 6465 bl 61% defN 20100101.000002 scala/collection/mutable/TreeSet$TreeSetProjection.class --rw---- 2.0 fat 646 bl 39% defN 20100101.000000 NOTICE -rw---- 2.0 fat 6482 bl 62% defN 20100101.000002 scala/collection/convert/impl/IntIteratorStepper.class -rw---- 2.0 fat 648 bl 44% defN 20100101.000002 scala/collection/immutable/LazyList$LazyBuilder$.class -rw---- 2.0 fat 6503 bl 62% defN 20100101.000002 scala/collection/convert/impl/LongIteratorStepper.class @@ -2587,7 +2589,7 @@ -rw---- 2.0 fat 6814 bl 51% defN 20100101.000002 scala/collection/immutable/MapNode.class -rw---- 2.0 fat 6816 bl 65% defN 20100101.000002 scala/collection/immutable/TreeSet$.class -rw---- 2.0 fat 682 bl 45% defN 20100101.000002 scala/Specializable$Group.class --rw---- 2.0 fat 6836 bl 51% defN 20100101.000002 scala/util/Try.class +-rw---- 2.0 fat 6832 bl 51% defN 20100101.000002 scala/util/Try.class -rw---- 2.0 fat 6837 bl 49% defN 20100101.000002 scala/Double.class -rw---- 2.0 fat 6853 bl 74% defN 20100101.000002 scala/collection/StepperShape$.class -rw---- 2.0 fat 6862 bl 76% defN 20100101.000002 scala/collection/mutable/CheckedIndexedSeqView$Id.class @@ -2611,8 +2613,8 @@ -rw---- 2.0 fat 6970 bl 76% defN 20100101.000002 scala/collection/mutable/CheckedIndexedSeqView$Map.class -rw---- 2.0 fat 6971 bl 62% defN 20100101.000002 scala/collection/generic/BitOperations$Int.class -rw---- 2.0 fat 697 bl 32% defN 20100101.000002 scala/annotation/unchecked/uncheckedVariance.class +-rw---- 2.0 fat 6998 bl 61% defN 20100101.000002 scala/util/control/TailCalls$TailRec.class -rw---- 2.0 fat 7004 bl 77% defN 20100101.000002 scala/collection/mutable/CheckedIndexedSeqView$Concat.class --rw---- 2.0 fat 7061 bl 61% defN 20100101.000002 scala/util/control/TailCalls$TailRec.class -rw---- 2.0 fat 7068 bl 76% defN 20100101.000002 scala/collection/mutable/CheckedIndexedSeqView$Reverse.class -rw---- 2.0 fat 7116 bl 47% defN 20100101.000002 scala/sys/process/BasicIO.class -rw---- 2.0 fat 713 b- 23% defN 20100101.000002 foo/TestBinary.class @@ -2687,7 +2689,7 @@ -rw---- 2.0 fat 7770 bl 69% defN 20100101.000002 scala/collection/immutable/TreeMap$TreeMapBuilder.class -rw---- 2.0 fat 780 bl 31% defN 20100101.000002 scala/DummyImplicit.class -rw---- 2.0 fat 780 bl 41% defN 20100101.000002 scala/runtime/DoubleRef.class --rw---- 2.0 fat 7826 bl 68% defN 20100101.000002 scala/math/Ordering$Tuple6Ordering.class +-rw---- 2.0 fat 7826 bl 69% defN 20100101.000002 scala/math/Ordering$Tuple6Ordering.class -rw---- 2.0 fat 7826 bl 70% defN 20100101.000002 scala/jdk/FunctionWrappers$FromJavaIntPredicate.class -rw---- 2.0 fat 7829 bl 68% defN 20100101.000002 scala/collection/mutable/CollisionProofHashMap$.class -rw---- 2.0 fat 78337 bl 63% defN 20100101.000002 scala/collection/immutable/LazyList.class @@ -2780,17 +2782,17 @@ -rw---- 2.0 fat 8420 bl 49% defN 20100101.000002 scala/Int.class -rw---- 2.0 fat 844 bl 50% defN 20100101.000002 scala/collection/AnyStepper$$anon$3.class -rw---- 2.0 fat 845 bl 45% defN 20100101.000002 scala/collection/JavaConverters$AsScala.class --rw---- 2.0 fat 8468 bl 65% defN 20100101.000002 scala/collection/mutable/AnyRefMap$.class -rw---- 2.0 fat 846 b- 38% defN 20100101.000002 foo/TestBinary$.class -rw---- 2.0 fat 846 bl 42% defN 20100101.000002 scala/reflect/NoManifest$.class -rw---- 2.0 fat 8474 bl 59% defN 20100101.000002 scala/collection/immutable/ListMapBuilder.class -rw---- 2.0 fat 8481 bl 55% defN 20100101.000002 scala/collection/LazyZip4.class +-rw---- 2.0 fat 8487 bl 65% defN 20100101.000002 scala/collection/mutable/AnyRefMap$.class -rw---- 2.0 fat 8519 bl 50% defN 20100101.000002 scala/Byte.class -rw---- 2.0 fat 8529 bl 65% defN 20100101.000002 scala/collection/mutable/TreeMap$TreeMapProjection.class +-rw---- 2.0 fat 85615 bl 69% defN 20100101.000002 scala/collection/ArrayOps$.class -rw---- 2.0 fat 8566 bl 56% defN 20100101.000002 scala/jdk/AnyAccumulatorStepper.class -rw---- 2.0 fat 856 bl 45% defN 20100101.000002 scala/Product5$.class -rw---- 2.0 fat 8574 bl 62% defN 20100101.000002 scala/collection/immutable/MapBuilderImpl.class --rw---- 2.0 fat 85753 bl 69% defN 20100101.000002 scala/collection/ArrayOps$.class -rw---- 2.0 fat 8577 bl 56% defN 20100101.000002 scala/collection/StrictOptimizedSortedMapOps.class -rw---- 2.0 fat 8578 bl 66% defN 20100101.000002 scala/collection/mutable/Seq.class -rw---- 2.0 fat 857 bl 45% defN 20100101.000002 scala/collection/SortedSetOps$.class @@ -2808,7 +2810,7 @@ -rw---- 2.0 fat 8691 bl 66% defN 20100101.000002 scala/collection/mutable/IndexedSeq.class -rw---- 2.0 fat 8724 bl 57% defN 20100101.000002 scala/jdk/DoubleAccumulatorStepper.class -rw---- 2.0 fat 872 bl 57% defN 20100101.000002 scala/sys/process/ProcessBuilder$FileBuilder.class --rw---- 2.0 fat 8744 bl 51% defN 20100101.000002 scala/collection/mutable/ArrayDequeOps.class +-rw---- 2.0 fat 8745 bl 51% defN 20100101.000002 scala/collection/mutable/ArrayDequeOps.class -rw---- 2.0 fat 874 bl 45% defN 20100101.000002 scala/util/DynamicVariable$$anon$1.class -rw---- 2.0 fat 8760 bl 54% defN 20100101.000002 scala/runtime/ScalaRunTime.class -rw---- 2.0 fat 8767 bl 67% defN 20100101.000002 scala/collection/convert/ToScalaImplicits.class @@ -2854,7 +2856,7 @@ -rw---- 2.0 fat 9183 bl 73% defN 20100101.000002 scala/PartialFunction$$anon$1.class -rw---- 2.0 fat 91865 bl 63% defN 20100101.000002 scala/collection/StringOps.class -rw---- 2.0 fat 919 bl 47% defN 20100101.000002 scala/math/Equiv$Float$IeeeEquiv.class --rw---- 2.0 fat 9204 bl 62% defN 20100101.000002 scala/collection/convert/JavaCollectionWrappers$JConcurrentMapWrapper.class +-rw---- 2.0 fat 9200 bl 62% defN 20100101.000002 scala/collection/convert/JavaCollectionWrappers$JConcurrentMapWrapper.class -rw---- 2.0 fat 9214 bl 68% defN 20100101.000002 scala/concurrent/BatchingExecutor$AsyncBatch.class -rw---- 2.0 fat 921 bl 46% defN 20100101.000002 scala/concurrent/Future$$anon$3.class -rw---- 2.0 fat 9246 bl 69% defN 20100101.000002 scala/reflect/ClassManifestFactory$.class diff --git a/tests/worker-error/RunnerThatThrowsError.scala b/tests/worker-error/RunnerThatThrowsError.scala index 527ccfbb..e912b27c 100644 --- a/tests/worker-error/RunnerThatThrowsError.scala +++ b/tests/worker-error/RunnerThatThrowsError.scala @@ -1,6 +1,6 @@ package anx.cancellation -import higherkindness.rules_scala.common.worker.WorkerMain +import higherkindness.rules_scala.common.worker.{WorkerMain, WorkTask} import higherkindness.rules_scala.common.sandbox.SandboxUtil import java.io.{InputStream, PrintStream} @@ -11,7 +11,7 @@ class RunnerThatThrowsError(stdin: InputStream, stdout: PrintStream) override def init(args: Option[Array[String]]): Unit = () - override def work(ctx: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = { - throw new Error() + override def work(task: WorkTask[Unit]): Unit = { + throw new Error() } } diff --git a/tests/worker-error/RunnerThatThrowsException.scala b/tests/worker-error/RunnerThatThrowsException.scala index 30511d6d..991321be 100644 --- a/tests/worker-error/RunnerThatThrowsException.scala +++ b/tests/worker-error/RunnerThatThrowsException.scala @@ -1,6 +1,6 @@ package anx.cancellation -import higherkindness.rules_scala.common.worker.WorkerMain +import higherkindness.rules_scala.common.worker.{WorkerMain, WorkTask} import higherkindness.rules_scala.common.sandbox.SandboxUtil import java.io.{InputStream, PrintStream} @@ -11,7 +11,7 @@ class RunnerThatThrowsException(stdin: InputStream, stdout: PrintStream) override def init(args: Option[Array[String]]): Unit = () - override def work(ctx: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = { - throw new Exception() + override def work(task: WorkTask[Unit]): Unit = { + throw new Exception() } } diff --git a/tests/worker-error/RunnerThatThrowsFatalError.scala b/tests/worker-error/RunnerThatThrowsFatalError.scala index 9c564af9..8894717c 100644 --- a/tests/worker-error/RunnerThatThrowsFatalError.scala +++ b/tests/worker-error/RunnerThatThrowsFatalError.scala @@ -1,6 +1,6 @@ package anx.cancellation -import higherkindness.rules_scala.common.worker.WorkerMain +import higherkindness.rules_scala.common.worker.{WorkerMain, WorkTask} import higherkindness.rules_scala.common.sandbox.SandboxUtil import java.io.{InputStream, PrintStream} @@ -11,7 +11,7 @@ class RunnerThatThrowsFatalError(stdin: InputStream, stdout: PrintStream) override def init(args: Option[Array[String]]): Unit = () - override def work(ctx: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = { - throw new OutOfMemoryError() + override def work(task: WorkTask[Unit]): Unit = { + throw new OutOfMemoryError() } } diff --git a/tests/worker-error/WorkerThrowingAnnexWorkerError.scala b/tests/worker-error/WorkerThrowingAnnexWorkerError.scala index 176d1568..8b4a2999 100644 --- a/tests/worker-error/WorkerThrowingAnnexWorkerError.scala +++ b/tests/worker-error/WorkerThrowingAnnexWorkerError.scala @@ -1,17 +1,14 @@ package anx.cancellation import higherkindness.rules_scala.common.error.AnnexWorkerError -import higherkindness.rules_scala.common.worker.WorkerMain +import higherkindness.rules_scala.common.worker.{WorkerMain, WorkTask} import java.io.PrintStream import java.nio.file.Path object WorkerThrowingAnnexWorkerError extends WorkerMain[Unit] { override def init(arguments: Option[Array[String]]): Unit = {} - override def work( - context: Unit, - arguments: Array[String], - output: PrintStream, - workingDirectory: Path, - verbosity: Int, - ): Unit = throw new AnnexWorkerError(1) + + override def work(task: WorkTask[Unit]): Unit = { + throw new AnnexWorkerError(1) + } } diff --git a/tests/worker-verbosity/RunnerThatPrintsVerbosity.scala b/tests/worker-verbosity/RunnerThatPrintsVerbosity.scala index 66b7e82a..11ddd4e4 100644 --- a/tests/worker-verbosity/RunnerThatPrintsVerbosity.scala +++ b/tests/worker-verbosity/RunnerThatPrintsVerbosity.scala @@ -1,6 +1,6 @@ package anx.cancellation -import higherkindness.rules_scala.common.worker.WorkerMain +import higherkindness.rules_scala.common.worker.{WorkerMain, WorkTask} import higherkindness.rules_scala.common.sandbox.SandboxUtil import java.io.{InputStream, PrintStream} @@ -8,8 +8,9 @@ import java.nio.file.{Files, Path, Paths} object RunnerThatPrintsVerbosity extends WorkerMain[Unit] { override def init(args: Option[Array[String]]): Unit = () - override def work(ctx: Unit, args: Array[String], out: PrintStream, workDir: Path, verbosity: Int): Unit = { - out.println(s"Verbosity: ${verbosity}") - Files.createFile(SandboxUtil.getSandboxPath(workDir, Paths.get(args(0)))) + + override def work(task: WorkTask[Unit]): Unit = { + task.output.println(s"Verbosity: ${task.verbosity}") + Files.createFile(SandboxUtil.getSandboxPath(task.workDir, Paths.get(task.args(0)))) } }