code_ownership 2.1.3 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config +2 -2
  3. data/Cargo.lock +6 -59
  4. data/ext/cargo-vendor/aho-corasick-1.1.3/.cargo-checksum.json +1 -1
  5. data/ext/cargo-vendor/anstream-0.6.21/.cargo-checksum.json +1 -1
  6. data/ext/cargo-vendor/anstyle-1.0.13/.cargo-checksum.json +1 -1
  7. data/ext/cargo-vendor/anstyle-parse-0.2.7/.cargo-checksum.json +1 -1
  8. data/ext/cargo-vendor/anstyle-query-1.1.4/.cargo-checksum.json +1 -1
  9. data/ext/cargo-vendor/anstyle-wincon-3.0.10/.cargo-checksum.json +1 -1
  10. data/ext/cargo-vendor/anyhow-1.0.100/.cargo-checksum.json +1 -1
  11. data/ext/cargo-vendor/arrayvec-0.7.6/.cargo-checksum.json +1 -1
  12. data/ext/cargo-vendor/bindgen-0.69.5/.cargo-checksum.json +1 -1
  13. data/ext/cargo-vendor/bitflags-2.9.4/.cargo-checksum.json +1 -1
  14. data/ext/cargo-vendor/bstr-1.12.0/.cargo-checksum.json +1 -1
  15. data/ext/cargo-vendor/cexpr-0.6.0/.cargo-checksum.json +1 -1
  16. data/ext/cargo-vendor/cfg-if-1.0.3/.cargo-checksum.json +1 -1
  17. data/ext/cargo-vendor/clang-sys-1.8.1/.cargo-checksum.json +1 -1
  18. data/ext/cargo-vendor/clap-4.5.49/.cargo-checksum.json +1 -1
  19. data/ext/cargo-vendor/clap_builder-4.5.49/.cargo-checksum.json +1 -1
  20. data/ext/cargo-vendor/clap_derive-4.5.49/.cargo-checksum.json +1 -1
  21. data/ext/cargo-vendor/clap_lex-0.7.6/.cargo-checksum.json +1 -1
  22. data/ext/cargo-vendor/codeowners-0.5.0/.cargo-checksum.json +1 -0
  23. data/ext/cargo-vendor/codeowners-0.5.0/.github/workflows/audit.yml +31 -0
  24. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/.github/workflows/ci.yml +11 -0
  25. data/ext/cargo-vendor/codeowners-0.5.0/.github/workflows/codeql.yml +21 -0
  26. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/Cargo.lock +27 -115
  27. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/Cargo.toml +44 -3
  28. data/ext/cargo-vendor/codeowners-0.5.0/perf/README.md +204 -0
  29. data/ext/cargo-vendor/codeowners-0.5.0/perf/compare.sh +23 -0
  30. data/ext/cargo-vendor/codeowners-0.5.0/perf/run.sh +28 -0
  31. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/rust-toolchain.toml +1 -1
  32. data/ext/cargo-vendor/codeowners-0.5.0/src/bin/codeowners-perf.rs +719 -0
  33. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/cache/file.rs +9 -9
  34. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/cache/mod.rs +4 -4
  35. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/cache/noop.rs +4 -4
  36. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/cli.rs +7 -7
  37. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/main.rs +3 -3
  38. data/ext/cargo-vendor/codeowners-0.5.0/src/ownership/file_owner_resolver.rs +829 -0
  39. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/validator.rs +108 -15
  40. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership.rs +22 -3
  41. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/project.rs +4 -4
  42. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/project_builder.rs +40 -14
  43. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/project_file_builder.rs +2 -2
  44. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/runner/api.rs +8 -5
  45. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/runner/types.rs +1 -2
  46. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/runner.rs +39 -29
  47. data/ext/cargo-vendor/codeowners-0.5.0/tests/annotation_in_unowned_team_glob_test.rs +64 -0
  48. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/common/mod.rs +1 -1
  49. data/ext/cargo-vendor/codeowners-0.5.0/tests/directory_codeowner_github_team_test.rs +22 -0
  50. data/ext/cargo-vendor/codeowners-0.5.0/tests/empty_directory_codeowner_test.rs +26 -0
  51. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/annotation_in_unowned_team_glob/.github/CODEOWNERS +18 -0
  52. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/annotation_in_unowned_team_glob/config/code_ownership.yml +4 -0
  53. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/annotation_in_unowned_team_glob/config/teams/alpha.yml +7 -0
  54. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/annotation_in_unowned_team_glob/config/teams/beta.yml +3 -0
  55. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/annotation_in_unowned_team_glob/ruby/app/services/alpha_owned.rb +2 -0
  56. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/annotation_in_unowned_team_glob/ruby/app/services/beta_owned.rb +4 -0
  57. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/directory-codeowner-github-team/.github/CODEOWNERS +15 -0
  58. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/directory-codeowner-github-team/app/by_handle/.codeowner +1 -0
  59. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/directory-codeowner-github-team/app/by_handle/handled.rb +2 -0
  60. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/directory-codeowner-github-team/app/by_name/named.rb +2 -0
  61. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/empty-directory-codeowner/.github/CODEOWNERS +14 -0
  62. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/empty-directory-codeowner/app/services/.codeowner +1 -0
  63. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/empty-directory-codeowner/app/services/nested/.codeowner +1 -0
  64. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/empty-directory-codeowner/app/services/nested/nested_file.rb +2 -0
  65. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/empty-directory-codeowner/config/code_ownership.yml +10 -0
  66. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/empty-directory-codeowner/config/teams/foo.yml +5 -0
  67. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/invalid-directory-codeowner/.github/CODEOWNERS +14 -0
  68. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/invalid-directory-codeowner/app/services/.codeowner +1 -0
  69. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/invalid-directory-codeowner/app/services/nested/.codeowner +1 -0
  70. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/invalid-directory-codeowner/app/services/nested/nested_file.rb +2 -0
  71. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/invalid-directory-codeowner/config/code_ownership.yml +10 -0
  72. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/invalid-directory-codeowner/config/teams/foo.yml +5 -0
  73. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/multiple-directory-owners/app/services/.codeowner +1 -0
  74. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +10 -0
  75. data/ext/cargo-vendor/codeowners-0.5.0/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +5 -0
  76. data/ext/cargo-vendor/codeowners-0.5.0/tests/global_gitignore_test.rs +50 -0
  77. data/ext/cargo-vendor/codeowners-0.5.0/tests/invalid_directory_codeowner_test.rs +26 -0
  78. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/invalid_project_test.rs +9 -9
  79. data/ext/cargo-vendor/codeowners-0.5.0/tests/perf_harness_test.rs +245 -0
  80. data/ext/cargo-vendor/codeowners-0.5.0/tests/untracked_new_file_test.rs +63 -0
  81. data/ext/cargo-vendor/codeowners-0.5.0/tests/untracked_source_file_test.rs +40 -0
  82. data/ext/cargo-vendor/colorchoice-1.0.4/.cargo-checksum.json +1 -1
  83. data/ext/cargo-vendor/crossbeam-channel-0.5.15/.cargo-checksum.json +1 -1
  84. data/ext/cargo-vendor/crossbeam-deque-0.8.6/.cargo-checksum.json +1 -1
  85. data/ext/cargo-vendor/crossbeam-epoch-0.9.18/.cargo-checksum.json +1 -1
  86. data/ext/cargo-vendor/crossbeam-utils-0.8.21/.cargo-checksum.json +1 -1
  87. data/ext/cargo-vendor/either-1.15.0/.cargo-checksum.json +1 -1
  88. data/ext/cargo-vendor/enum_dispatch-0.3.13/.cargo-checksum.json +1 -1
  89. data/ext/cargo-vendor/equivalent-1.0.2/.cargo-checksum.json +1 -1
  90. data/ext/cargo-vendor/errno-0.3.14/.cargo-checksum.json +1 -1
  91. data/ext/cargo-vendor/error-stack-0.8.0/.cargo-checksum.json +1 -0
  92. data/ext/cargo-vendor/error-stack-0.8.0/.cargo_vcs_info.json +6 -0
  93. data/ext/cargo-vendor/error-stack-0.8.0/.justfile +16 -0
  94. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/CHANGELOG.md +50 -1
  95. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/Cargo.lock +253 -310
  96. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/Cargo.toml +107 -52
  97. data/ext/cargo-vendor/error-stack-0.8.0/Cargo.toml.orig +109 -0
  98. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/README.md +16 -18
  99. data/ext/cargo-vendor/error-stack-0.8.0/build.rs +28 -0
  100. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/examples/demo.rs +21 -19
  101. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/examples/detect.rs +6 -6
  102. data/ext/cargo-vendor/error-stack-0.8.0/examples/exit_code.rs +25 -0
  103. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/examples/parse_config.rs +5 -5
  104. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/compat/anyhow.rs +7 -7
  105. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/compat/eyre.rs +7 -6
  106. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/compat/mod.rs +7 -9
  107. data/ext/cargo-vendor/error-stack-0.8.0/src/context.rs +52 -0
  108. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/error.rs +2 -9
  109. data/ext/cargo-vendor/error-stack-0.8.0/src/ext/iter.rs +286 -0
  110. data/ext/cargo-vendor/error-stack-0.8.0/src/ext/mod.rs +19 -0
  111. data/ext/cargo-vendor/error-stack-0.8.0/src/ext/stream.rs +212 -0
  112. data/ext/cargo-vendor/error-stack-0.8.0/src/ext/tuple.rs +218 -0
  113. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/fmt/charset.rs +12 -12
  114. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/fmt/color.rs +30 -30
  115. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/fmt/config.rs +1 -1
  116. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/fmt/hook.rs +23 -24
  117. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/fmt/location.rs +3 -3
  118. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/fmt/mod.rs +62 -52
  119. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/frame/frame_impl.rs +12 -15
  120. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/frame/kind.rs +11 -10
  121. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/frame/mod.rs +8 -10
  122. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/future.rs +57 -63
  123. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/hook/context.rs +18 -20
  124. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/hook/mod.rs +16 -15
  125. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/iter.rs +12 -57
  126. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/lib.rs +99 -87
  127. data/ext/cargo-vendor/error-stack-0.8.0/src/macros.rs +212 -0
  128. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/report.rs +525 -207
  129. data/ext/cargo-vendor/error-stack-0.8.0/src/result.rs +137 -0
  130. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/serde.rs +53 -38
  131. data/ext/cargo-vendor/error-stack-0.8.0/src/sink.rs +672 -0
  132. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/common.rs +36 -24
  133. data/ext/cargo-vendor/error-stack-0.8.0/tests/compiletest.rs +22 -0
  134. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__charset_ascii.snap +1 -1
  135. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__charset_utf8.snap +1 -1
  136. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__diagnostics_add.snap +1 -1
  137. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__doc.snap +1 -1
  138. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__emit.snap +1 -1
  139. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__emit_alt.snap +1 -1
  140. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__hookcontext_cast.snap +1 -1
  141. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__hookcontext_decrement.snap +1 -1
  142. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__hookcontext_emit.snap +1 -1
  143. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__hookcontext_increment.snap +1 -1
  144. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__hookcontext_storage.snap +1 -1
  145. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__preference_color.snap +1 -1
  146. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__preference_emphasis.snap +1 -1
  147. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt__preference_none.snap +1 -1
  148. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/fmt_doc_alt.snap +1 -1
  149. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/hook__debug_hook.snap +1 -1
  150. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/hook__debug_hook_provide.snap +1 -1
  151. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/lib__suggestion.snap +2 -2
  152. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/report_debug__doc.snap +3 -3
  153. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__complex.snap +1 -1
  154. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__hook_location.snap +1 -1
  155. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__linear.snap +2 -2
  156. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__linear_ext.snap +2 -2
  157. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__multiline_context.snap +3 -3
  158. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__sources.snap +1 -1
  159. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__sources_transparent.snap +1 -1
  160. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__sources_nested.snap +10 -10
  161. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__sources_nested@spantrace-backtrace.snap +10 -10
  162. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__sources_nested_alternate.snap +10 -10
  163. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__sources_nested_alternate@spantrace-backtrace.snap +10 -10
  164. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_serialize__attachment.snap +1 -1
  165. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_serialize__context.snap +1 -1
  166. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_serialize__multiple_sources.snap +2 -2
  167. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_serialize__multiple_sources_at_root.snap +2 -2
  168. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_attach.rs +41 -15
  169. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_attach_printable.rs +14 -15
  170. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_backtrace.rs +0 -1
  171. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_change_context.rs +31 -9
  172. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_compatibility.rs +8 -17
  173. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_conversion.rs +25 -3
  174. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_debug.rs +91 -91
  175. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_display.rs +8 -9
  176. data/ext/cargo-vendor/error-stack-0.8.0/tests/test_downcast.rs +101 -0
  177. data/ext/cargo-vendor/error-stack-0.8.0/tests/test_extend.rs +99 -0
  178. data/ext/cargo-vendor/error-stack-0.8.0/tests/test_frame.rs +136 -0
  179. data/ext/cargo-vendor/error-stack-0.8.0/tests/test_iter.rs +132 -0
  180. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_macros.rs +5 -31
  181. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_provision.rs +3 -2
  182. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_serialize.rs +14 -14
  183. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/test_span_trace.rs +10 -11
  184. data/ext/cargo-vendor/error-stack-0.8.0/tests/ui/attach_diagnostics.rs +21 -0
  185. data/ext/cargo-vendor/error-stack-0.8.0/tests/ui/attach_diagnostics.stderr +23 -0
  186. data/ext/cargo-vendor/error-stack-0.8.0/tests/ui/frames_mut_escape.rs +28 -0
  187. data/ext/cargo-vendor/error-stack-0.8.0/tests/ui/frames_mut_escape.stderr +13 -0
  188. data/ext/cargo-vendor/error-stack-0.8.0/tests/ui/macro_invalid_args.rs +32 -0
  189. data/ext/cargo-vendor/error-stack-0.8.0/tests/ui/macro_invalid_args.stderr +132 -0
  190. data/ext/cargo-vendor/error-stack-0.8.0/tests/ui/missing_args.rs +32 -0
  191. data/ext/cargo-vendor/error-stack-0.8.0/tests/ui/missing_args.stderr +35 -0
  192. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/ui/must_use.rs +3 -3
  193. data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/ui/must_use.stderr +1 -1
  194. data/ext/cargo-vendor/fast-glob-1.0.0/.cargo-checksum.json +1 -1
  195. data/ext/cargo-vendor/fastrand-2.3.0/.cargo-checksum.json +1 -1
  196. data/ext/cargo-vendor/getrandom-0.3.4/.cargo-checksum.json +1 -1
  197. data/ext/cargo-vendor/glob-0.3.3/.cargo-checksum.json +1 -1
  198. data/ext/cargo-vendor/globset-0.4.16/.cargo-checksum.json +1 -1
  199. data/ext/cargo-vendor/hashbrown-0.16.0/.cargo-checksum.json +1 -1
  200. data/ext/cargo-vendor/heck-0.5.0/.cargo-checksum.json +1 -1
  201. data/ext/cargo-vendor/ignore-0.4.23/.cargo-checksum.json +1 -1
  202. data/ext/cargo-vendor/indexmap-2.11.4/.cargo-checksum.json +1 -1
  203. data/ext/cargo-vendor/is_terminal_polyfill-1.70.1/.cargo-checksum.json +1 -1
  204. data/ext/cargo-vendor/itertools-0.12.1/.cargo-checksum.json +1 -1
  205. data/ext/cargo-vendor/itertools-0.14.0/.cargo-checksum.json +1 -1
  206. data/ext/cargo-vendor/itoa-1.0.15/.cargo-checksum.json +1 -1
  207. data/ext/cargo-vendor/lazy_static-1.5.0/.cargo-checksum.json +1 -1
  208. data/ext/cargo-vendor/lazycell-1.3.0/.cargo-checksum.json +1 -1
  209. data/ext/cargo-vendor/libc-0.2.177/.cargo-checksum.json +1 -1
  210. data/ext/cargo-vendor/libloading-0.8.9/.cargo-checksum.json +1 -1
  211. data/ext/cargo-vendor/linux-raw-sys-0.11.0/.cargo-checksum.json +1 -1
  212. data/ext/cargo-vendor/log-0.4.28/.cargo-checksum.json +1 -1
  213. data/ext/cargo-vendor/magnus-0.8.2/.cargo-checksum.json +1 -1
  214. data/ext/cargo-vendor/magnus-macros-0.8.0/.cargo-checksum.json +1 -1
  215. data/ext/cargo-vendor/matchers-0.2.0/.cargo-checksum.json +1 -1
  216. data/ext/cargo-vendor/memchr-2.7.6/.cargo-checksum.json +1 -1
  217. data/ext/cargo-vendor/memoize-0.5.1/.cargo-checksum.json +1 -1
  218. data/ext/cargo-vendor/memoize-inner-0.5.1/.cargo-checksum.json +1 -1
  219. data/ext/cargo-vendor/minimal-lexical-0.2.1/.cargo-checksum.json +1 -1
  220. data/ext/cargo-vendor/nom-7.1.3/.cargo-checksum.json +1 -1
  221. data/ext/cargo-vendor/nu-ansi-term-0.50.3/.cargo-checksum.json +1 -1
  222. data/ext/cargo-vendor/once_cell-1.21.3/.cargo-checksum.json +1 -1
  223. data/ext/cargo-vendor/once_cell_polyfill-1.70.1/.cargo-checksum.json +1 -1
  224. data/ext/cargo-vendor/path-clean-1.0.1/.cargo-checksum.json +1 -1
  225. data/ext/cargo-vendor/pin-project-lite-0.2.16/.cargo-checksum.json +1 -1
  226. data/ext/cargo-vendor/proc-macro2-1.0.101/.cargo-checksum.json +1 -1
  227. data/ext/cargo-vendor/quote-1.0.41/.cargo-checksum.json +1 -1
  228. data/ext/cargo-vendor/r-efi-5.3.0/.cargo-checksum.json +1 -1
  229. data/ext/cargo-vendor/rayon-1.11.0/.cargo-checksum.json +1 -1
  230. data/ext/cargo-vendor/rayon-core-1.13.0/.cargo-checksum.json +1 -1
  231. data/ext/cargo-vendor/rb-sys-0.9.117/.cargo-checksum.json +1 -1
  232. data/ext/cargo-vendor/rb-sys-build-0.9.117/.cargo-checksum.json +1 -1
  233. data/ext/cargo-vendor/rb-sys-env-0.2.2/.cargo-checksum.json +1 -1
  234. data/ext/cargo-vendor/regex-1.12.2/.cargo-checksum.json +1 -1
  235. data/ext/cargo-vendor/regex-automata-0.4.13/.cargo-checksum.json +1 -1
  236. data/ext/cargo-vendor/regex-syntax-0.8.8/.cargo-checksum.json +1 -1
  237. data/ext/cargo-vendor/rustc-hash-1.1.0/.cargo-checksum.json +1 -1
  238. data/ext/cargo-vendor/rustc_version-0.4.1/.cargo-checksum.json +1 -1
  239. data/ext/cargo-vendor/rustix-1.1.2/.cargo-checksum.json +1 -1
  240. data/ext/cargo-vendor/ryu-1.0.20/.cargo-checksum.json +1 -1
  241. data/ext/cargo-vendor/same-file-1.0.6/.cargo-checksum.json +1 -1
  242. data/ext/cargo-vendor/semver-1.0.27/.cargo-checksum.json +1 -1
  243. data/ext/cargo-vendor/seq-macro-0.3.6/.cargo-checksum.json +1 -1
  244. data/ext/cargo-vendor/serde-1.0.228/.cargo-checksum.json +1 -1
  245. data/ext/cargo-vendor/serde_core-1.0.228/.cargo-checksum.json +1 -1
  246. data/ext/cargo-vendor/serde_derive-1.0.228/.cargo-checksum.json +1 -1
  247. data/ext/cargo-vendor/serde_json-1.0.145/.cargo-checksum.json +1 -1
  248. data/ext/cargo-vendor/serde_magnus-0.10.0/.cargo-checksum.json +1 -1
  249. data/ext/cargo-vendor/serde_yaml-0.9.34+deprecated/.cargo-checksum.json +1 -1
  250. data/ext/cargo-vendor/sharded-slab-0.1.7/.cargo-checksum.json +1 -1
  251. data/ext/cargo-vendor/shell-words-1.1.0/.cargo-checksum.json +1 -1
  252. data/ext/cargo-vendor/shlex-1.3.0/.cargo-checksum.json +1 -1
  253. data/ext/cargo-vendor/similar-2.7.0/.cargo-checksum.json +1 -1
  254. data/ext/cargo-vendor/smallvec-1.15.1/.cargo-checksum.json +1 -1
  255. data/ext/cargo-vendor/strsim-0.11.1/.cargo-checksum.json +1 -1
  256. data/ext/cargo-vendor/syn-1.0.109/.cargo-checksum.json +1 -1
  257. data/ext/cargo-vendor/syn-2.0.106/.cargo-checksum.json +1 -1
  258. data/ext/cargo-vendor/tap-1.0.1/.cargo-checksum.json +1 -1
  259. data/ext/cargo-vendor/tempfile-3.23.0/.cargo-checksum.json +1 -1
  260. data/ext/cargo-vendor/thread_local-1.1.9/.cargo-checksum.json +1 -1
  261. data/ext/cargo-vendor/tracing-0.1.41/.cargo-checksum.json +1 -1
  262. data/ext/cargo-vendor/tracing-attributes-0.1.30/.cargo-checksum.json +1 -1
  263. data/ext/cargo-vendor/tracing-core-0.1.34/.cargo-checksum.json +1 -1
  264. data/ext/cargo-vendor/tracing-log-0.2.0/.cargo-checksum.json +1 -1
  265. data/ext/cargo-vendor/tracing-subscriber-0.3.20/.cargo-checksum.json +1 -1
  266. data/ext/cargo-vendor/unicode-ident-1.0.19/.cargo-checksum.json +1 -1
  267. data/ext/cargo-vendor/unsafe-libyaml-0.2.11/.cargo-checksum.json +1 -1
  268. data/ext/cargo-vendor/utf8parse-0.2.2/.cargo-checksum.json +1 -1
  269. data/ext/cargo-vendor/valuable-0.1.1/.cargo-checksum.json +1 -1
  270. data/ext/cargo-vendor/walkdir-2.5.0/.cargo-checksum.json +1 -1
  271. data/ext/cargo-vendor/wasip2-1.0.1+wasi-0.2.4/.cargo-checksum.json +1 -1
  272. data/ext/cargo-vendor/winapi-util-0.1.11/.cargo-checksum.json +1 -1
  273. data/ext/cargo-vendor/windows-link-0.2.1/.cargo-checksum.json +1 -1
  274. data/ext/cargo-vendor/windows-sys-0.60.2/.cargo-checksum.json +1 -1
  275. data/ext/cargo-vendor/windows-sys-0.61.2/.cargo-checksum.json +1 -1
  276. data/ext/cargo-vendor/windows-targets-0.53.5/.cargo-checksum.json +1 -1
  277. data/ext/cargo-vendor/windows_aarch64_gnullvm-0.53.1/.cargo-checksum.json +1 -1
  278. data/ext/cargo-vendor/windows_aarch64_msvc-0.53.1/.cargo-checksum.json +1 -1
  279. data/ext/cargo-vendor/windows_i686_gnu-0.53.1/.cargo-checksum.json +1 -1
  280. data/ext/cargo-vendor/windows_i686_gnullvm-0.53.1/.cargo-checksum.json +1 -1
  281. data/ext/cargo-vendor/windows_i686_msvc-0.53.1/.cargo-checksum.json +1 -1
  282. data/ext/cargo-vendor/windows_x86_64_gnu-0.53.1/.cargo-checksum.json +1 -1
  283. data/ext/cargo-vendor/windows_x86_64_gnullvm-0.53.1/.cargo-checksum.json +1 -1
  284. data/ext/cargo-vendor/windows_x86_64_msvc-0.53.1/.cargo-checksum.json +1 -1
  285. data/ext/cargo-vendor/wit-bindgen-0.46.0/.cargo-checksum.json +1 -1
  286. data/ext/code_ownership/Cargo.toml +1 -1
  287. data/ext/code_ownership/src/lib.rs +13 -1
  288. data/lib/code_ownership/private/team_finder.rb +3 -3
  289. data/lib/code_ownership/version.rb +1 -1
  290. data/lib/code_ownership.rb +9 -1
  291. metadata +341 -432
  292. data/ext/cargo-vendor/ahash-0.7.8/.cargo-checksum.json +0 -1
  293. data/ext/cargo-vendor/ahash-0.7.8/.cargo_vcs_info.json +0 -6
  294. data/ext/cargo-vendor/ahash-0.7.8/.github/workflows/rust.yml +0 -151
  295. data/ext/cargo-vendor/ahash-0.7.8/Cargo.toml +0 -149
  296. data/ext/cargo-vendor/ahash-0.7.8/Cargo.toml.orig +0 -96
  297. data/ext/cargo-vendor/ahash-0.7.8/FAQ.md +0 -118
  298. data/ext/cargo-vendor/ahash-0.7.8/LICENSE-APACHE +0 -201
  299. data/ext/cargo-vendor/ahash-0.7.8/LICENSE-MIT +0 -25
  300. data/ext/cargo-vendor/ahash-0.7.8/README.md +0 -110
  301. data/ext/cargo-vendor/ahash-0.7.8/build.rs +0 -47
  302. data/ext/cargo-vendor/ahash-0.7.8/rustfmt.toml +0 -1
  303. data/ext/cargo-vendor/ahash-0.7.8/src/aes_hash.rs +0 -440
  304. data/ext/cargo-vendor/ahash-0.7.8/src/convert.rs +0 -167
  305. data/ext/cargo-vendor/ahash-0.7.8/src/fallback_hash.rs +0 -392
  306. data/ext/cargo-vendor/ahash-0.7.8/src/hash_map.rs +0 -371
  307. data/ext/cargo-vendor/ahash-0.7.8/src/hash_quality_test.rs +0 -517
  308. data/ext/cargo-vendor/ahash-0.7.8/src/hash_set.rs +0 -313
  309. data/ext/cargo-vendor/ahash-0.7.8/src/lib.rs +0 -263
  310. data/ext/cargo-vendor/ahash-0.7.8/src/operations.rs +0 -330
  311. data/ext/cargo-vendor/ahash-0.7.8/src/random_state.rs +0 -363
  312. data/ext/cargo-vendor/ahash-0.7.8/src/specialize.rs +0 -239
  313. data/ext/cargo-vendor/ahash-0.7.8/tests/bench.rs +0 -154
  314. data/ext/cargo-vendor/ahash-0.7.8/tests/map_tests.rs +0 -203
  315. data/ext/cargo-vendor/ahash-0.7.8/tests/nopanic.rs +0 -72
  316. data/ext/cargo-vendor/codeowners-0.3.3/.cargo-checksum.json +0 -1
  317. data/ext/cargo-vendor/codeowners-0.3.3/.github/workflows/audit.yml +0 -19
  318. data/ext/cargo-vendor/codeowners-0.3.3/src/ownership/file_owner_resolver.rs +0 -416
  319. data/ext/cargo-vendor/error-stack-0.5.0/.cargo-checksum.json +0 -1
  320. data/ext/cargo-vendor/error-stack-0.5.0/.cargo_vcs_info.json +0 -6
  321. data/ext/cargo-vendor/error-stack-0.5.0/.justfile +0 -58
  322. data/ext/cargo-vendor/error-stack-0.5.0/Cargo.toml.orig +0 -87
  323. data/ext/cargo-vendor/error-stack-0.5.0/build.rs +0 -29
  324. data/ext/cargo-vendor/error-stack-0.5.0/examples/exit_code.rs +0 -24
  325. data/ext/cargo-vendor/error-stack-0.5.0/rust-toolchain.toml +0 -4
  326. data/ext/cargo-vendor/error-stack-0.5.0/src/context.rs +0 -132
  327. data/ext/cargo-vendor/error-stack-0.5.0/src/macros.rs +0 -253
  328. data/ext/cargo-vendor/error-stack-0.5.0/src/result.rs +0 -267
  329. data/ext/cargo-vendor/error-stack-0.5.0/tests/compiletest.rs +0 -7
  330. data/ext/cargo-vendor/error-stack-0.5.0/tests/snapshots/test_debug__sources_nested@backtrace.snap +0 -104
  331. data/ext/cargo-vendor/error-stack-0.5.0/tests/snapshots/test_debug__sources_nested@spantrace.snap +0 -104
  332. data/ext/cargo-vendor/error-stack-0.5.0/tests/snapshots/test_debug__sources_nested_alternate@backtrace.snap +0 -104
  333. data/ext/cargo-vendor/error-stack-0.5.0/tests/snapshots/test_debug__sources_nested_alternate@spantrace.snap +0 -104
  334. data/ext/cargo-vendor/error-stack-0.5.0/tests/test_downcast.rs +0 -41
  335. data/ext/cargo-vendor/error-stack-0.5.0/tests/test_extend.rs +0 -78
  336. data/ext/cargo-vendor/error-stack-0.5.0/tests/test_frame.rs +0 -126
  337. data/ext/cargo-vendor/error-stack-0.5.0/tests/test_iter.rs +0 -99
  338. data/ext/cargo-vendor/error-stack-0.5.0/tests/ui/macro_invalid_args.rs +0 -60
  339. data/ext/cargo-vendor/error-stack-0.5.0/tests/ui/macro_invalid_args.stderr +0 -101
  340. data/ext/cargo-vendor/getrandom-0.2.16/.cargo-checksum.json +0 -1
  341. data/ext/cargo-vendor/getrandom-0.2.16/.cargo_vcs_info.json +0 -6
  342. data/ext/cargo-vendor/getrandom-0.2.16/CHANGELOG.md +0 -498
  343. data/ext/cargo-vendor/getrandom-0.2.16/Cargo.lock +0 -354
  344. data/ext/cargo-vendor/getrandom-0.2.16/Cargo.toml +0 -121
  345. data/ext/cargo-vendor/getrandom-0.2.16/Cargo.toml.orig +0 -67
  346. data/ext/cargo-vendor/getrandom-0.2.16/LICENSE-APACHE +0 -201
  347. data/ext/cargo-vendor/getrandom-0.2.16/LICENSE-MIT +0 -26
  348. data/ext/cargo-vendor/getrandom-0.2.16/README.md +0 -81
  349. data/ext/cargo-vendor/getrandom-0.2.16/SECURITY.md +0 -13
  350. data/ext/cargo-vendor/getrandom-0.2.16/benches/buffer.rs +0 -71
  351. data/ext/cargo-vendor/getrandom-0.2.16/src/apple-other.rs +0 -24
  352. data/ext/cargo-vendor/getrandom-0.2.16/src/custom.rs +0 -105
  353. data/ext/cargo-vendor/getrandom-0.2.16/src/error.rs +0 -189
  354. data/ext/cargo-vendor/getrandom-0.2.16/src/error_impls.rs +0 -15
  355. data/ext/cargo-vendor/getrandom-0.2.16/src/espidf.rs +0 -18
  356. data/ext/cargo-vendor/getrandom-0.2.16/src/fuchsia.rs +0 -13
  357. data/ext/cargo-vendor/getrandom-0.2.16/src/getentropy.rs +0 -21
  358. data/ext/cargo-vendor/getrandom-0.2.16/src/getrandom.rs +0 -25
  359. data/ext/cargo-vendor/getrandom-0.2.16/src/hermit.rs +0 -29
  360. data/ext/cargo-vendor/getrandom-0.2.16/src/js.rs +0 -155
  361. data/ext/cargo-vendor/getrandom-0.2.16/src/lazy.rs +0 -56
  362. data/ext/cargo-vendor/getrandom-0.2.16/src/lib.rs +0 -407
  363. data/ext/cargo-vendor/getrandom-0.2.16/src/linux_android.rs +0 -7
  364. data/ext/cargo-vendor/getrandom-0.2.16/src/linux_android_with_fallback.rs +0 -33
  365. data/ext/cargo-vendor/getrandom-0.2.16/src/netbsd.rs +0 -46
  366. data/ext/cargo-vendor/getrandom-0.2.16/src/rdrand.rs +0 -121
  367. data/ext/cargo-vendor/getrandom-0.2.16/src/solaris.rs +0 -34
  368. data/ext/cargo-vendor/getrandom-0.2.16/src/solid.rs +0 -18
  369. data/ext/cargo-vendor/getrandom-0.2.16/src/use_file.rs +0 -120
  370. data/ext/cargo-vendor/getrandom-0.2.16/src/util.rs +0 -35
  371. data/ext/cargo-vendor/getrandom-0.2.16/src/util_libc.rs +0 -162
  372. data/ext/cargo-vendor/getrandom-0.2.16/src/vxworks.rs +0 -29
  373. data/ext/cargo-vendor/getrandom-0.2.16/src/wasi.rs +0 -17
  374. data/ext/cargo-vendor/getrandom-0.2.16/src/windows.rs +0 -59
  375. data/ext/cargo-vendor/getrandom-0.2.16/tests/common/mod.rs +0 -100
  376. data/ext/cargo-vendor/getrandom-0.2.16/tests/custom.rs +0 -54
  377. data/ext/cargo-vendor/getrandom-0.2.16/tests/normal.rs +0 -11
  378. data/ext/cargo-vendor/getrandom-0.2.16/tests/rdrand.rs +0 -22
  379. data/ext/cargo-vendor/hashbrown-0.12.3/.cargo-checksum.json +0 -1
  380. data/ext/cargo-vendor/hashbrown-0.12.3/.cargo_vcs_info.json +0 -6
  381. data/ext/cargo-vendor/hashbrown-0.12.3/CHANGELOG.md +0 -402
  382. data/ext/cargo-vendor/hashbrown-0.12.3/Cargo.toml +0 -113
  383. data/ext/cargo-vendor/hashbrown-0.12.3/Cargo.toml.orig +0 -60
  384. data/ext/cargo-vendor/hashbrown-0.12.3/LICENSE-APACHE +0 -201
  385. data/ext/cargo-vendor/hashbrown-0.12.3/LICENSE-MIT +0 -25
  386. data/ext/cargo-vendor/hashbrown-0.12.3/README.md +0 -126
  387. data/ext/cargo-vendor/hashbrown-0.12.3/benches/bench.rs +0 -331
  388. data/ext/cargo-vendor/hashbrown-0.12.3/benches/insert_unique_unchecked.rs +0 -32
  389. data/ext/cargo-vendor/hashbrown-0.12.3/clippy.toml +0 -1
  390. data/ext/cargo-vendor/hashbrown-0.12.3/src/external_trait_impls/mod.rs +0 -4
  391. data/ext/cargo-vendor/hashbrown-0.12.3/src/external_trait_impls/rayon/helpers.rs +0 -27
  392. data/ext/cargo-vendor/hashbrown-0.12.3/src/external_trait_impls/rayon/map.rs +0 -734
  393. data/ext/cargo-vendor/hashbrown-0.12.3/src/external_trait_impls/rayon/mod.rs +0 -4
  394. data/ext/cargo-vendor/hashbrown-0.12.3/src/external_trait_impls/rayon/raw.rs +0 -231
  395. data/ext/cargo-vendor/hashbrown-0.12.3/src/external_trait_impls/rayon/set.rs +0 -659
  396. data/ext/cargo-vendor/hashbrown-0.12.3/src/external_trait_impls/serde.rs +0 -201
  397. data/ext/cargo-vendor/hashbrown-0.12.3/src/lib.rs +0 -150
  398. data/ext/cargo-vendor/hashbrown-0.12.3/src/macros.rs +0 -70
  399. data/ext/cargo-vendor/hashbrown-0.12.3/src/map.rs +0 -8408
  400. data/ext/cargo-vendor/hashbrown-0.12.3/src/raw/alloc.rs +0 -73
  401. data/ext/cargo-vendor/hashbrown-0.12.3/src/raw/bitmask.rs +0 -122
  402. data/ext/cargo-vendor/hashbrown-0.12.3/src/raw/generic.rs +0 -154
  403. data/ext/cargo-vendor/hashbrown-0.12.3/src/raw/mod.rs +0 -2460
  404. data/ext/cargo-vendor/hashbrown-0.12.3/src/raw/sse2.rs +0 -146
  405. data/ext/cargo-vendor/hashbrown-0.12.3/src/rustc_entry.rs +0 -630
  406. data/ext/cargo-vendor/hashbrown-0.12.3/src/scopeguard.rs +0 -74
  407. data/ext/cargo-vendor/hashbrown-0.12.3/src/set.rs +0 -2790
  408. data/ext/cargo-vendor/hashbrown-0.12.3/tests/hasher.rs +0 -65
  409. data/ext/cargo-vendor/hashbrown-0.12.3/tests/rayon.rs +0 -533
  410. data/ext/cargo-vendor/hashbrown-0.12.3/tests/serde.rs +0 -65
  411. data/ext/cargo-vendor/hashbrown-0.12.3/tests/set.rs +0 -34
  412. data/ext/cargo-vendor/lru-0.7.8/.cargo-checksum.json +0 -1
  413. data/ext/cargo-vendor/lru-0.7.8/.cargo_vcs_info.json +0 -6
  414. data/ext/cargo-vendor/lru-0.7.8/.github/workflows/main.yml +0 -54
  415. data/ext/cargo-vendor/lru-0.7.8/CHANGELOG.md +0 -194
  416. data/ext/cargo-vendor/lru-0.7.8/Cargo.toml +0 -42
  417. data/ext/cargo-vendor/lru-0.7.8/Cargo.toml.orig +0 -22
  418. data/ext/cargo-vendor/lru-0.7.8/LICENSE +0 -21
  419. data/ext/cargo-vendor/lru-0.7.8/README.md +0 -62
  420. data/ext/cargo-vendor/lru-0.7.8/src/lib.rs +0 -1872
  421. data/ext/cargo-vendor/version_check-0.9.5/.cargo-checksum.json +0 -1
  422. data/ext/cargo-vendor/version_check-0.9.5/.cargo_vcs_info.json +0 -6
  423. data/ext/cargo-vendor/version_check-0.9.5/.github/workflows/ci.yml +0 -42
  424. data/ext/cargo-vendor/version_check-0.9.5/.travis.yml +0 -6
  425. data/ext/cargo-vendor/version_check-0.9.5/Cargo.toml +0 -38
  426. data/ext/cargo-vendor/version_check-0.9.5/Cargo.toml.orig +0 -13
  427. data/ext/cargo-vendor/version_check-0.9.5/LICENSE-APACHE +0 -201
  428. data/ext/cargo-vendor/version_check-0.9.5/LICENSE-MIT +0 -19
  429. data/ext/cargo-vendor/version_check-0.9.5/README.md +0 -80
  430. data/ext/cargo-vendor/version_check-0.9.5/src/channel.rs +0 -195
  431. data/ext/cargo-vendor/version_check-0.9.5/src/date.rs +0 -203
  432. data/ext/cargo-vendor/version_check-0.9.5/src/lib.rs +0 -528
  433. data/ext/cargo-vendor/version_check-0.9.5/src/version.rs +0 -316
  434. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/.cargo-checksum.json +0 -1
  435. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/.cargo_vcs_info.json +0 -6
  436. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/.github/workflows/main.yml +0 -44
  437. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/.gitmodules +0 -3
  438. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/CODE_OF_CONDUCT.md +0 -49
  439. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/CONTRIBUTING.md +0 -8
  440. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/Cargo.lock +0 -23
  441. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/Cargo.toml +0 -59
  442. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/Cargo.toml.orig +0 -29
  443. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/LICENSE-APACHE +0 -201
  444. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/LICENSE-Apache-2.0_WITH_LLVM-exception +0 -220
  445. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/LICENSE-MIT +0 -23
  446. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/ORG_CODE_OF_CONDUCT.md +0 -143
  447. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/README.md +0 -94
  448. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/SECURITY.md +0 -29
  449. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/src/lib.rs +0 -47
  450. data/ext/cargo-vendor/wasi-0.11.1+wasi-snapshot-preview1/src/lib_generated.rs +0 -2366
  451. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/.github/CODEOWNERS +0 -0
  452. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/.github/workflows/dotslash-config.json +0 -0
  453. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/.rustfmt.toml +0 -0
  454. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/.rusty-hook.toml +0 -0
  455. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/AGENTS.md +0 -0
  456. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/CLAUDE.md +0 -0
  457. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/README.md +0 -0
  458. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/dev/run_benchmarks_for_file.sh +0 -0
  459. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/dev/run_benchmarks_for_gv.sh +0 -0
  460. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/common_test.rs +0 -0
  461. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/config.rs +0 -0
  462. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/crosscheck.rs +0 -0
  463. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/lib.rs +0 -0
  464. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/codeowners_file_parser.rs +0 -0
  465. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/codeowners_query.rs +0 -0
  466. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/file_generator.rs +0 -0
  467. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/file_owner_finder.rs +0 -0
  468. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/mapper/annotated_file_mapper.rs +0 -0
  469. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/mapper/directory_mapper.rs +0 -0
  470. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/mapper/escaper.rs +0 -0
  471. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/mapper/package_mapper.rs +0 -0
  472. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/mapper/team_gem_mapper.rs +0 -0
  473. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/mapper/team_glob_mapper.rs +0 -0
  474. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/mapper/team_yml_mapper.rs +0 -0
  475. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/ownership/mapper.rs +0 -0
  476. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/path_utils.rs +0 -0
  477. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/src/tracked_files.rs +0 -0
  478. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/cache_test.rs +0 -0
  479. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/codeowners_path_test.rs +0 -0
  480. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/crosscheck_owners_test.rs +0 -0
  481. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/executable_name_config_test.rs +10 -10
  482. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_codeowners_path/config/code_ownership.yml +0 -0
  483. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_codeowners_path/config/teams/test_team.yml +0 -0
  484. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_codeowners_path/docs/CODEOWNERS +3 -3
  485. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_codeowners_path/expected/CODEOWNERS +3 -3
  486. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_codeowners_path/ruby/app/models/test.rb +0 -0
  487. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_executable_name/.github/CODEOWNERS +0 -0
  488. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_executable_name/app/foo.rb +0 -0
  489. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_executable_name/config/code_ownership.yml +0 -0
  490. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_executable_name/config/teams/foo.yml +0 -0
  491. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_executable_name/config/teams/payments.yml +0 -0
  492. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/custom_executable_name/ruby/app/payments/foo.rb +0 -0
  493. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/default_executable_name/.github/CODEOWNERS +0 -0
  494. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/default_executable_name/app/bar.rb +0 -0
  495. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/default_executable_name/config/code_ownership.yml +0 -0
  496. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/default_executable_name/config/teams/bar.yml +0 -0
  497. data/ext/cargo-vendor/{codeowners-0.3.3/tests/fixtures/multiple-directory-owners/app/services → codeowners-0.5.0/tests/fixtures/directory-codeowner-github-team/app/by_name}/.codeowner +0 -0
  498. data/ext/cargo-vendor/{codeowners-0.3.3/tests/fixtures/multiple-directory-owners → codeowners-0.5.0/tests/fixtures/directory-codeowner-github-team}/config/code_ownership.yml +0 -0
  499. data/ext/cargo-vendor/{codeowners-0.3.3/tests/fixtures/multiple-directory-owners → codeowners-0.5.0/tests/fixtures/directory-codeowner-github-team}/config/teams/foo.yml +0 -0
  500. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
  501. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
  502. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
  503. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
  504. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
  505. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
  506. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
  507. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
  508. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
  509. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
  510. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
  511. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
  512. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
  513. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/javascript_only_project/.github/CODEOWNERS +0 -0
  514. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/javascript_only_project/.keep +0 -0
  515. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/javascript_only_project/config/code_ownership.yml +0 -0
  516. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/javascript_only_project/config/teams/design.yml +0 -0
  517. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/javascript_only_project/config/teams/frontend.yml +0 -0
  518. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +0 -0
  519. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +0 -0
  520. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/src/index.tsx +0 -0
  521. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +0 -0
  522. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/src/button.tsx +0 -0
  523. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/missing_github_team/.github/CODEOWNERS +0 -0
  524. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/missing_github_team/config/code_ownership.yml +0 -0
  525. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/missing_github_team/config/teams/bad_team.yml +0 -0
  526. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/missing_github_team/config/teams/good.yml +0 -0
  527. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/missing_github_team/gems/pets/dog.rb +0 -0
  528. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
  529. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
  530. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/multiple-directory-owners/app/consumers/deep/nesting/nestdir/deep_file.rb +0 -0
  531. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
  532. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
  533. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/multiple-directory-owners/app/services/exciting/some_other_file.rb +0 -0
  534. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
  535. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/.github/CODEOWNERS +9 -9
  536. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/.ignore +0 -0
  537. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/config/code_ownership.yml +0 -0
  538. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
  539. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
  540. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
  541. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
  542. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/gems/pets/dog.rb +0 -0
  543. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
  544. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
  545. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
  546. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
  547. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
  548. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
  549. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +0 -0
  550. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
  551. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -0
  552. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
  553. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/app/payments/foo/ownedby_payroll.rb +0 -0
  554. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
  555. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
  556. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
  557. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +0 -0
  558. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/app/views/foos/index.html.erb +0 -0
  559. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/app/views/foos/new.html.erb +0 -0
  560. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
  561. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
  562. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project/should_be_ignored/an_ignored_file.rb +0 -0
  563. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +12 -12
  564. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +0 -0
  565. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +0 -0
  566. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +0 -0
  567. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +0 -0
  568. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +0 -0
  569. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/package.json +0 -0
  570. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/src/picks/dp.tsx +0 -0
  571. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/package.json +0 -0
  572. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/src/item.tsx +0 -0
  573. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/package.json +0 -0
  574. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/field.tsx +0 -0
  575. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/fields/small.tsx +0 -0
  576. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/gems/apollo/lib/apollo.rb +0 -0
  577. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/gems/ivy/lib/ivy.rb +0 -0
  578. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/gems/lager/lib/lager.rb +0 -0
  579. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/gems/summit/lib/summit.rb +0 -0
  580. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/packs/games/app/services/stats.rb +0 -0
  581. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +0 -0
  582. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/packs/locations/app/services/capacity.rb +0 -0
  583. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +0 -0
  584. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/packs/schedule/app/services/date.rb +0 -0
  585. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +0 -0
  586. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/lib/util.rb +0 -0
  587. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/services/play.rb +0 -0
  588. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +0 -0
  589. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/.codeowner +0 -0
  590. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/db/price.rb +0 -0
  591. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/entertainment.rb +0 -0
  592. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/play.rb +0 -0
  593. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/ruby/app/giants/services/play.rb +0 -0
  594. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/fixtures/valid_project_with_overrides/ruby/app/rockies/services/play.rb +0 -0
  595. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/git_stage_test.rs +0 -0
  596. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/invalid_project_structure_test.rs +0 -0
  597. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/missing_github_team_test.rs +0 -0
  598. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/multiple_directory_owners_test.rs +0 -0
  599. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/run_config_executable_override_test.rs +0 -0
  600. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/runner_api.rs +0 -0
  601. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/untracked_files_test.rs +0 -0
  602. data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/valid_project_test.rs +6 -6
  603. /data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/valid_project_with_overrides_test.rs +0 -0
  604. /data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tests/validate_files_test.rs +0 -0
  605. /data/ext/cargo-vendor/{codeowners-0.3.3 → codeowners-0.5.0}/tmp/.gitkeep +0 -0
  606. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/LICENSE-APACHE.md +0 -0
  607. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/LICENSE-MIT.md +0 -0
  608. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/LICENSE.md +0 -0
  609. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/src/fmt/override.rs +0 -0
  610. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/hook__location_hook.snap +0 -0
  611. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/report_display__doc.snap +0 -0
  612. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/doc/report_display_alt__doc.snap +0 -0
  613. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__alt.snap +0 -0
  614. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__charset_ascii.snap +0 -0
  615. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__color_mode_color.snap +0 -0
  616. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__color_mode_emphasis.snap +0 -0
  617. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__hook.snap +0 -0
  618. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__hook_context.snap +0 -0
  619. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__hook_decr.snap +0 -0
  620. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__hook_for_context.snap +0 -0
  621. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__hook_incr.snap +0 -0
  622. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__hook_multiple.snap +0 -0
  623. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__hook_provider.snap +0 -0
  624. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__multiline.snap +0 -0
  625. /data/ext/cargo-vendor/{error-stack-0.5.0 → error-stack-0.8.0}/tests/snapshots/test_debug__full__norm.snap +0 -0
@@ -0,0 +1,829 @@
1
+ use std::{
2
+ collections::{HashMap, HashSet},
3
+ fs,
4
+ path::{Path, PathBuf},
5
+ sync::{Arc, LazyLock, Mutex, MutexGuard, PoisonError},
6
+ };
7
+
8
+ use fast_glob::glob_match;
9
+ use glob::glob;
10
+
11
+ use crate::{config::Config, project::Team, project_file_builder::build_project_file_without_cache};
12
+
13
+ use super::{FileOwner, mapper::Source};
14
+
15
+ pub fn find_file_owners(project_root: &Path, config: &Config, file_path: &Path) -> Result<Vec<FileOwner>, String> {
16
+ let absolute_file_path = if file_path.is_absolute() {
17
+ file_path.to_path_buf()
18
+ } else {
19
+ project_root.join(file_path)
20
+ };
21
+ let relative_file_path = crate::path_utils::relative_to_buf(project_root, &absolute_file_path);
22
+
23
+ let loaded = loaded_teams(teams_cache_root(project_root), config.team_file_glob.clone())?;
24
+ let teams = &loaded.teams;
25
+ let teams_by_name = &loaded.teams_by_name;
26
+
27
+ let mut sources_by_team: HashMap<String, Vec<Source>> = HashMap::new();
28
+
29
+ if let Some(team_name) = read_top_of_file_team(&absolute_file_path) {
30
+ // Only consider top-of-file annotations for files included by config.owned_globs and not excluded by config.unowned_globs
31
+ if let Some(rel_str) = relative_file_path.to_str() {
32
+ let is_config_owned = glob_list_matches(rel_str, &config.owned_globs);
33
+ let is_config_unowned = glob_list_matches(rel_str, &config.unowned_globs);
34
+ if is_config_owned
35
+ && !is_config_unowned
36
+ && let Some(team) = teams_by_name.get(&team_name)
37
+ {
38
+ sources_by_team.entry(team.name.clone()).or_default().push(Source::AnnotatedFile);
39
+ }
40
+ }
41
+ }
42
+
43
+ if let Some((owner_team_name, dir_source)) = most_specific_directory_owner(project_root, &relative_file_path, teams_by_name) {
44
+ sources_by_team.entry(owner_team_name).or_default().push(dir_source);
45
+ }
46
+
47
+ if let Some((owner_team_name, package_source)) = nearest_package_owner(project_root, &relative_file_path, config, teams_by_name) {
48
+ sources_by_team.entry(owner_team_name).or_default().push(package_source);
49
+ }
50
+
51
+ if let Some((owner_team_name, gem_source)) = vendored_gem_owner(&relative_file_path, config, teams) {
52
+ sources_by_team.entry(owner_team_name).or_default().push(gem_source);
53
+ }
54
+
55
+ if let Some(rel_str) = relative_file_path.to_str() {
56
+ for team in teams {
57
+ let subtracts: HashSet<&str> = team.subtracted_globs.iter().map(|s| s.as_str()).collect();
58
+ for owned_glob in &team.owned_globs {
59
+ if glob_match(owned_glob, rel_str) && !subtracts.iter().any(|sub| glob_match(sub, rel_str)) {
60
+ sources_by_team
61
+ .entry(team.name.clone())
62
+ .or_default()
63
+ .push(Source::TeamGlob(owned_glob.clone()));
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ for team in teams {
70
+ let team_rel = crate::path_utils::relative_to_buf(project_root, &team.path);
71
+ if team_rel == relative_file_path {
72
+ sources_by_team.entry(team.name.clone()).or_default().push(Source::TeamYml);
73
+ }
74
+ }
75
+
76
+ let mut file_owners: Vec<FileOwner> = Vec::new();
77
+ for (team_name, sources) in sources_by_team.into_iter() {
78
+ if let Some(team) = teams_by_name.get(&team_name) {
79
+ let relative_team_yml_path = crate::path_utils::relative_to(project_root, &team.path)
80
+ .to_string_lossy()
81
+ .to_string();
82
+ file_owners.push(FileOwner {
83
+ team: team.clone(),
84
+ team_config_file_path: relative_team_yml_path,
85
+ sources,
86
+ });
87
+ }
88
+ }
89
+
90
+ // TODO: remove this once we've verified the fast path is working
91
+ // This is simply matching the order of behavior of the original codeowners CLI
92
+ if file_owners.len() > 1 {
93
+ file_owners.sort_by(|a, b| {
94
+ let priority_a = a.sources.iter().map(source_priority).min().unwrap_or(u8::MAX);
95
+ let priority_b = b.sources.iter().map(source_priority).min().unwrap_or(u8::MAX);
96
+ priority_a.cmp(&priority_b).then_with(|| a.team.name.cmp(&b.team.name))
97
+ });
98
+ }
99
+
100
+ Ok(file_owners)
101
+ }
102
+
103
+ struct LoadedTeams {
104
+ teams: Vec<Team>,
105
+ teams_by_name: HashMap<String, Team>,
106
+ }
107
+
108
+ type TeamCacheKey = (PathBuf, Vec<String>);
109
+
110
+ // Parsing every team file dominates a lookup, so load them once per project root and glob list and share
111
+ // the result across threads for the life of the process.
112
+ static TEAM_CACHE: LazyLock<Mutex<TeamCache>> = LazyLock::new(Default::default);
113
+
114
+ #[derive(Default)]
115
+ struct TeamCache {
116
+ // Bumped by `clear_team_cache` so a load already running during a clear can't reinstate its stale result.
117
+ generation: u64,
118
+ loaded: HashMap<TeamCacheKey, Arc<LoadedTeams>>,
119
+ }
120
+
121
+ fn team_cache() -> MutexGuard<'static, TeamCache> {
122
+ TEAM_CACHE.lock().unwrap_or_else(PoisonError::into_inner)
123
+ }
124
+
125
+ fn loaded_teams(project_root: PathBuf, team_file_globs: Vec<String>) -> std::result::Result<Arc<LoadedTeams>, String> {
126
+ let key = (project_root, team_file_globs);
127
+ let generation = {
128
+ let cache = team_cache();
129
+ if let Some(loaded) = cache.loaded.get(&key) {
130
+ return Ok(Arc::clone(loaded));
131
+ }
132
+ cache.generation
133
+ };
134
+
135
+ let load = load_teams(&key.0, &key.1)?;
136
+ let teams_by_name = build_teams_by_name_map(&load.teams);
137
+ let loaded = Arc::new(LoadedTeams {
138
+ teams: load.teams,
139
+ teams_by_name,
140
+ });
141
+ // A load that skipped a team file isn't cached, so fixing the file takes effect on the next lookup.
142
+ if !load.skipped_team_file {
143
+ cache_teams(key, Arc::clone(&loaded), generation);
144
+ }
145
+ Ok(loaded)
146
+ }
147
+
148
+ fn cache_teams(key: TeamCacheKey, loaded: Arc<LoadedTeams>, generation: u64) {
149
+ let mut cache = team_cache();
150
+ if cache.generation == generation {
151
+ cache.loaded.insert(key, loaded);
152
+ }
153
+ }
154
+
155
+ // Keyed on the absolute root so a relative root isn't reused after the working directory changes.
156
+ fn teams_cache_root(project_root: &Path) -> PathBuf {
157
+ std::path::absolute(project_root).unwrap_or_else(|_| project_root.to_path_buf())
158
+ }
159
+
160
+ /// Drops the teams memoized by `find_file_owners`, for callers whose team files change within one process.
161
+ pub fn clear_team_cache() {
162
+ let mut cache = team_cache();
163
+ cache.generation += 1;
164
+ cache.loaded.clear();
165
+ }
166
+
167
+ fn build_teams_by_name_map(teams: &[Team]) -> HashMap<String, Team> {
168
+ let mut map = HashMap::with_capacity(teams.len() * 2);
169
+ for team in teams {
170
+ map.insert(team.name.clone(), team.clone());
171
+ map.insert(team.github_team.clone(), team.clone());
172
+ }
173
+ map
174
+ }
175
+
176
+ struct TeamLoad {
177
+ teams: Vec<Team>,
178
+ skipped_team_file: bool,
179
+ }
180
+
181
+ fn load_teams(project_root: &Path, team_file_globs: &[String]) -> std::result::Result<TeamLoad, String> {
182
+ let mut teams: Vec<Team> = Vec::new();
183
+ let mut skipped_team_file = false;
184
+ for glob_str in team_file_globs {
185
+ let absolute_glob = project_root.join(glob_str).to_string_lossy().into_owned();
186
+ let paths = glob(&absolute_glob).map_err(|e| e.to_string())?;
187
+ for entry in paths {
188
+ let path = match entry {
189
+ Ok(path) => path,
190
+ Err(e) => {
191
+ eprintln!("Error reading team file path: {e}");
192
+ skipped_team_file = true;
193
+ continue;
194
+ }
195
+ };
196
+ match Team::from_team_file_path(path.clone()) {
197
+ Ok(team) => teams.push(team),
198
+ Err(e) => {
199
+ eprintln!("Error parsing team file: {e:?}, path: {}", path.display());
200
+ skipped_team_file = true;
201
+ }
202
+ }
203
+ }
204
+ }
205
+ Ok(TeamLoad { teams, skipped_team_file })
206
+ }
207
+
208
+ fn read_top_of_file_team(path: &Path) -> Option<String> {
209
+ let project_file = build_project_file_without_cache(&path.to_path_buf());
210
+ if let Some(owner) = project_file.owner {
211
+ return Some(owner);
212
+ }
213
+
214
+ None
215
+ }
216
+
217
+ fn most_specific_directory_owner(
218
+ project_root: &Path,
219
+ relative_file_path: &Path,
220
+ teams_by_name: &HashMap<String, Team>,
221
+ ) -> Option<(String, Source)> {
222
+ let mut current = project_root.join(relative_file_path);
223
+ let mut best: Option<(String, Source)> = None;
224
+ loop {
225
+ if !current.pop() {
226
+ break;
227
+ }
228
+ let codeowner_path = current.join(".codeowner");
229
+ if let Ok(owner_str) = fs::read_to_string(&codeowner_path) {
230
+ let owner = owner_str.trim();
231
+ if let Some(team) = teams_by_name.get(owner) {
232
+ let relative_dir = crate::path_utils::relative_to(project_root, current.as_path())
233
+ .to_string_lossy()
234
+ .to_string();
235
+ let candidate = (team.name.clone(), Source::Directory(relative_dir));
236
+ match &best {
237
+ None => best = Some(candidate),
238
+ Some((_, existing_source)) => {
239
+ if candidate.1.len() > existing_source.len() {
240
+ best = Some(candidate);
241
+ }
242
+ }
243
+ }
244
+ }
245
+ }
246
+ if current == project_root {
247
+ break;
248
+ }
249
+ }
250
+ best
251
+ }
252
+
253
+ fn nearest_package_owner(
254
+ project_root: &Path,
255
+ relative_file_path: &Path,
256
+ config: &Config,
257
+ teams_by_name: &HashMap<String, Team>,
258
+ ) -> Option<(String, Source)> {
259
+ let mut current = project_root.join(relative_file_path);
260
+ loop {
261
+ if !current.pop() {
262
+ break;
263
+ }
264
+ let parent_rel = crate::path_utils::relative_to(project_root, current.as_path());
265
+ if let Some(rel_str) = parent_rel.to_str() {
266
+ if glob_list_matches(rel_str, &config.ruby_package_paths) {
267
+ let pkg_yml = current.join("package.yml");
268
+ if pkg_yml.exists() {
269
+ match crate::project_builder::ruby_package_owner(&pkg_yml) {
270
+ Ok(owner) => {
271
+ if let Some(team) = owner.and_then(|owner| teams_by_name.get(&owner)) {
272
+ let package_path = parent_rel.join("package.yml");
273
+ let package_glob = format!("{rel_str}/**/**");
274
+ return Some((
275
+ team.name.clone(),
276
+ Source::Package(package_path.to_string_lossy().to_string(), package_glob),
277
+ ));
278
+ }
279
+ }
280
+ // validate rejects this package, so don't fall through to an enclosing package's owner.
281
+ Err(e) => {
282
+ eprintln!("Error reading ruby package: {e:?}, path: {}", pkg_yml.display());
283
+ return None;
284
+ }
285
+ }
286
+ }
287
+ }
288
+ if glob_list_matches(rel_str, &config.javascript_package_paths) {
289
+ let pkg_json = current.join("package.json");
290
+ if pkg_json.exists()
291
+ && let Ok(owner) = read_js_package_owner(&pkg_json)
292
+ && let Some(team) = teams_by_name.get(&owner)
293
+ {
294
+ let package_path = parent_rel.join("package.json");
295
+ let package_glob = format!("{rel_str}/**/**");
296
+ return Some((
297
+ team.name.clone(),
298
+ Source::Package(package_path.to_string_lossy().to_string(), package_glob),
299
+ ));
300
+ }
301
+ }
302
+ }
303
+ if current == project_root {
304
+ break;
305
+ }
306
+ }
307
+ None
308
+ }
309
+
310
+ // removed: use `Source::len()` instead
311
+
312
+ fn glob_list_matches(path: &str, globs: &[String]) -> bool {
313
+ globs.iter().any(|g| glob_match(g, path))
314
+ }
315
+
316
+ fn read_js_package_owner(path: &Path) -> std::result::Result<String, String> {
317
+ let file = std::fs::File::open(path).map_err(|e| e.to_string())?;
318
+ let deserializer: crate::project::deserializers::JavascriptPackage = serde_json::from_reader(file).map_err(|e| e.to_string())?;
319
+ deserializer
320
+ .metadata
321
+ .and_then(|m| m.owner)
322
+ .ok_or_else(|| "Missing owner".to_string())
323
+ }
324
+
325
+ fn vendored_gem_owner(relative_file_path: &Path, config: &Config, teams: &[Team]) -> Option<(String, Source)> {
326
+ use std::path::Component;
327
+ let mut comps = relative_file_path.components();
328
+ let first = comps.next()?;
329
+ let second = comps.next()?;
330
+ let first_str = match first {
331
+ Component::Normal(s) => s.to_string_lossy(),
332
+ _ => return None,
333
+ };
334
+ if first_str != config.vendored_gems_path {
335
+ return None;
336
+ }
337
+ let gem_name = match second {
338
+ Component::Normal(s) => s.to_string_lossy().to_string(),
339
+ _ => return None,
340
+ };
341
+ for team in teams {
342
+ if team.owned_gems.iter().any(|g| g == &gem_name) {
343
+ return Some((team.name.clone(), Source::TeamGem));
344
+ }
345
+ }
346
+ None
347
+ }
348
+
349
+ fn source_priority(source: &Source) -> u8 {
350
+ match source {
351
+ // Highest confidence first
352
+ Source::AnnotatedFile => 0,
353
+ Source::Directory(_) => 1,
354
+ Source::Package(_, _) => 2,
355
+ Source::TeamGlob(_) => 3,
356
+ Source::TeamGem => 4,
357
+ Source::TeamYml => 5,
358
+ }
359
+ }
360
+
361
+ #[cfg(test)]
362
+ mod tests {
363
+ use super::*;
364
+ use crate::project::Team;
365
+ use std::collections::HashMap;
366
+ use tempfile::tempdir;
367
+
368
+ fn build_config_for_temp(frontend_glob: &str, ruby_glob: &str, vendored_path: &str) -> crate::config::Config {
369
+ crate::config::Config {
370
+ owned_globs: vec!["**/*".to_string()],
371
+ ruby_package_paths: vec![ruby_glob.to_string()],
372
+ javascript_package_paths: vec![frontend_glob.to_string()],
373
+ team_file_glob: vec!["config/teams/**/*.yml".to_string()],
374
+ unowned_globs: vec![],
375
+ vendored_gems_path: vendored_path.to_string(),
376
+ cache_directory: "tmp/cache/codeowners".to_string(),
377
+ ignore_dirs: vec![],
378
+ executable_name: "codeowners".to_string(),
379
+ codeowners_path: ".github".to_string(),
380
+ }
381
+ }
382
+
383
+ fn team_named(name: &str) -> Team {
384
+ Team {
385
+ path: Path::new("config/teams/foo.yml").to_path_buf(),
386
+ name: name.to_string(),
387
+ github_team: format!("@{}Team", name),
388
+ owned_globs: vec![],
389
+ subtracted_globs: vec![],
390
+ owned_gems: vec![],
391
+ avoid_ownership: false,
392
+ }
393
+ }
394
+
395
+ #[test]
396
+ fn test_read_top_of_file_team_parses_at_and_colon_forms() {
397
+ let td = tempdir().unwrap();
398
+
399
+ // @team form
400
+ let file_at = td.path().join("at_form.rb");
401
+ std::fs::write(&file_at, "# @team Payroll\nputs 'x'\n").unwrap();
402
+ assert_eq!(read_top_of_file_team(&file_at), Some("Payroll".to_string()));
403
+ }
404
+
405
+ #[test]
406
+ fn test_most_specific_directory_owner_prefers_deeper() {
407
+ let td = tempdir().unwrap();
408
+ let project_root = td.path();
409
+
410
+ // Build directories
411
+ let deep_dir = project_root.join("a/b/c");
412
+ std::fs::create_dir_all(&deep_dir).unwrap();
413
+ let mid_dir = project_root.join("a/b");
414
+ let top_dir = project_root.join("a");
415
+
416
+ // Write .codeowner files
417
+ std::fs::write(top_dir.join(".codeowner"), "TopTeam").unwrap();
418
+ std::fs::write(mid_dir.join(".codeowner"), "MidTeam").unwrap();
419
+ std::fs::write(deep_dir.join(".codeowner"), "DeepTeam").unwrap();
420
+
421
+ // Build teams_by_name
422
+ let mut tbn: HashMap<String, Team> = HashMap::new();
423
+ for name in ["TopTeam", "MidTeam", "DeepTeam"] {
424
+ let t = team_named(name);
425
+ tbn.insert(t.name.clone(), t);
426
+ }
427
+
428
+ let rel_file = Path::new("a/b/c/file.rb");
429
+ let result = most_specific_directory_owner(project_root, rel_file, &tbn).unwrap();
430
+ match result.1 {
431
+ Source::Directory(path) => {
432
+ assert!(path.ends_with("a/b/c"), "expected deepest directory, got {}", path);
433
+ }
434
+ _ => panic!("expected Directory source"),
435
+ }
436
+ assert_eq!(result.0, "DeepTeam");
437
+ }
438
+
439
+ #[test]
440
+ fn test_nearest_package_owner_ruby_metadata_owner() {
441
+ let td = tempdir().unwrap();
442
+ let project_root = td.path();
443
+ let config = build_config_for_temp("frontend/**/*", "packs/**/*", "vendored");
444
+
445
+ let ruby_pkg = project_root.join("packs/payroll");
446
+ std::fs::create_dir_all(&ruby_pkg).unwrap();
447
+ std::fs::write(ruby_pkg.join("package.yml"), "---\nmetadata:\n owner: Payroll\n").unwrap();
448
+
449
+ let mut tbn: HashMap<String, Team> = HashMap::new();
450
+ let t = team_named("Payroll");
451
+ tbn.insert(t.name.clone(), t);
452
+
453
+ let rel_ruby = Path::new("packs/payroll/app/models/thing.rb");
454
+ let ruby_owner = nearest_package_owner(project_root, rel_ruby, &config, &tbn).unwrap();
455
+ assert_eq!(ruby_owner.0, "Payroll");
456
+ match ruby_owner.1 {
457
+ Source::Package(pkg_path, glob) => {
458
+ assert!(pkg_path.ends_with("packs/payroll/package.yml"));
459
+ assert_eq!(glob, "packs/payroll/**/**");
460
+ }
461
+ _ => panic!("expected Package source for ruby"),
462
+ }
463
+ }
464
+
465
+ #[test]
466
+ fn test_nearest_package_owner_ruby_conflicting_owners_yields_none() {
467
+ let td = tempdir().unwrap();
468
+ let project_root = td.path();
469
+ let config = build_config_for_temp("frontend/**/*", "packs/**/*", "vendored");
470
+
471
+ let ruby_pkg = project_root.join("packs/payroll");
472
+ std::fs::create_dir_all(&ruby_pkg).unwrap();
473
+ std::fs::write(ruby_pkg.join("package.yml"), "---\nowner: Payroll\nmetadata:\n owner: Benefits\n").unwrap();
474
+
475
+ let mut tbn: HashMap<String, Team> = HashMap::new();
476
+ for name in ["Payroll", "Benefits"] {
477
+ let t = team_named(name);
478
+ tbn.insert(t.name.clone(), t);
479
+ }
480
+
481
+ let rel_ruby = Path::new("packs/payroll/app/models/thing.rb");
482
+ assert!(nearest_package_owner(project_root, rel_ruby, &config, &tbn).is_none());
483
+ }
484
+
485
+ #[test]
486
+ fn test_nearest_package_owner_ruby_conflict_does_not_fall_through_to_outer_package() {
487
+ let td = tempdir().unwrap();
488
+ let project_root = td.path();
489
+ let config = build_config_for_temp("frontend/**/*", "packs/**/*", "vendored");
490
+
491
+ let outer_pkg = project_root.join("packs/outer");
492
+ let inner_pkg = outer_pkg.join("inner");
493
+ std::fs::create_dir_all(&inner_pkg).unwrap();
494
+ std::fs::write(outer_pkg.join("package.yml"), "---\nowner: Outer\n").unwrap();
495
+ std::fs::write(inner_pkg.join("package.yml"), "---\nowner: InnerA\nmetadata:\n owner: InnerB\n").unwrap();
496
+
497
+ let mut tbn: HashMap<String, Team> = HashMap::new();
498
+ for name in ["Outer", "InnerA", "InnerB"] {
499
+ let t = team_named(name);
500
+ tbn.insert(t.name.clone(), t);
501
+ }
502
+
503
+ let rel_ruby = Path::new("packs/outer/inner/x.rb");
504
+ assert!(nearest_package_owner(project_root, rel_ruby, &config, &tbn).is_none());
505
+ }
506
+
507
+ #[test]
508
+ fn test_nearest_package_owner_ruby_ownerless_inner_package_falls_through_to_outer() {
509
+ let td = tempdir().unwrap();
510
+ let project_root = td.path();
511
+ let config = build_config_for_temp("frontend/**/*", "packs/**/*", "vendored");
512
+
513
+ let outer_pkg = project_root.join("packs/outer");
514
+ let inner_pkg = outer_pkg.join("inner");
515
+ std::fs::create_dir_all(&inner_pkg).unwrap();
516
+ std::fs::write(outer_pkg.join("package.yml"), "---\nowner: Outer\n").unwrap();
517
+ std::fs::write(inner_pkg.join("package.yml"), "---\nenforce_dependencies: true\n").unwrap();
518
+
519
+ let mut tbn: HashMap<String, Team> = HashMap::new();
520
+ let t = team_named("Outer");
521
+ tbn.insert(t.name.clone(), t);
522
+
523
+ let rel_ruby = Path::new("packs/outer/inner/x.rb");
524
+ let owner = nearest_package_owner(project_root, rel_ruby, &config, &tbn).unwrap();
525
+ assert_eq!(owner.0, "Outer");
526
+ }
527
+
528
+ #[test]
529
+ fn test_nearest_package_owner_ruby_and_js() {
530
+ let td = tempdir().unwrap();
531
+ let project_root = td.path();
532
+ let config = build_config_for_temp("frontend/**/*", "packs/**/*", "vendored");
533
+
534
+ // Ruby package
535
+ let ruby_pkg = project_root.join("packs/payroll");
536
+ std::fs::create_dir_all(&ruby_pkg).unwrap();
537
+ std::fs::write(ruby_pkg.join("package.yml"), "---\nowner: Payroll\n").unwrap();
538
+
539
+ // JS package
540
+ let js_pkg = project_root.join("frontend/flow");
541
+ std::fs::create_dir_all(&js_pkg).unwrap();
542
+ std::fs::write(js_pkg.join("package.json"), r#"{"metadata": {"owner": "UX"}}"#).unwrap();
543
+
544
+ // Teams map
545
+ let mut tbn: HashMap<String, Team> = HashMap::new();
546
+ for name in ["Payroll", "UX"] {
547
+ let t = team_named(name);
548
+ tbn.insert(t.name.clone(), t);
549
+ }
550
+
551
+ // Ruby nearest
552
+ let rel_ruby = Path::new("packs/payroll/app/models/thing.rb");
553
+ let ruby_owner = nearest_package_owner(project_root, rel_ruby, &config, &tbn).unwrap();
554
+ assert_eq!(ruby_owner.0, "Payroll");
555
+ match ruby_owner.1 {
556
+ Source::Package(pkg_path, glob) => {
557
+ assert!(pkg_path.ends_with("packs/payroll/package.yml"));
558
+ assert_eq!(glob, "packs/payroll/**/**");
559
+ }
560
+ _ => panic!("expected Package source for ruby"),
561
+ }
562
+
563
+ // JS nearest
564
+ let rel_js = Path::new("frontend/flow/src/index.ts");
565
+ let js_owner = nearest_package_owner(project_root, rel_js, &config, &tbn).unwrap();
566
+ assert_eq!(js_owner.0, "UX");
567
+ match js_owner.1 {
568
+ Source::Package(pkg_path, glob) => {
569
+ assert!(pkg_path.ends_with("frontend/flow/package.json"));
570
+ assert_eq!(glob, "frontend/flow/**/**");
571
+ }
572
+ _ => panic!("expected Package source for js"),
573
+ }
574
+ }
575
+
576
+ #[test]
577
+ fn test_vendored_gem_owner() {
578
+ let config = build_config_for_temp("frontend/**/*", "packs/**/*", "vendored");
579
+ let mut teams: Vec<Team> = vec![team_named("Payroll")];
580
+ teams[0].owned_gems = vec!["awesome_gem".to_string()];
581
+
582
+ let path = Path::new("vendored/awesome_gem/lib/a.rb");
583
+ let result = vendored_gem_owner(path, &config, &teams).unwrap();
584
+ assert_eq!(result.0, "Payroll");
585
+ matches!(result.1, Source::TeamGem);
586
+ }
587
+
588
+ #[test]
589
+ fn test_teams_cache_root_is_absolute_for_relative_roots() {
590
+ let cwd = std::env::current_dir().unwrap();
591
+ assert_eq!(teams_cache_root(Path::new("some/project")), cwd.join("some/project"));
592
+ assert_eq!(teams_cache_root(Path::new(".")), cwd.join("."));
593
+ assert_eq!(teams_cache_root(&cwd), cwd);
594
+ }
595
+
596
+ // The team cache is process-wide, so tests that clear it must not interleave.
597
+ static TEAM_CACHE_TEST_LOCK: std::sync::Mutex<()> = std::sync::Mutex::new(());
598
+
599
+ #[test]
600
+ fn test_find_file_owners_reuses_loaded_teams_until_cleared() {
601
+ let _guard = TEAM_CACHE_TEST_LOCK.lock().unwrap_or_else(|poisoned| poisoned.into_inner());
602
+ let td = tempdir().unwrap();
603
+ let root = td.path();
604
+ let config = build_config_for_temp("frontend/**/*", "packs/**/*", "vendored");
605
+ let write_team = |glob: &str| {
606
+ fs::create_dir_all(root.join("config/teams")).unwrap();
607
+ fs::write(
608
+ root.join("config/teams/payroll.yml"),
609
+ format!("name: Payroll\ngithub:\n team: '@PayrollTeam'\nowned_globs:\n - {glob}\n"),
610
+ )
611
+ .unwrap();
612
+ };
613
+ let owner_of = |file: &str| {
614
+ find_file_owners(root, &config, Path::new(file))
615
+ .unwrap()
616
+ .first()
617
+ .map(|owner| owner.team.name.clone())
618
+ };
619
+
620
+ write_team("app/payroll/**/*");
621
+ assert_eq!(owner_of("app/payroll/a.rb"), Some("Payroll".to_string()));
622
+
623
+ write_team("app/other/**/*");
624
+ assert_eq!(
625
+ owner_of("app/payroll/a.rb"),
626
+ Some("Payroll".to_string()),
627
+ "team files are loaded once per process"
628
+ );
629
+
630
+ clear_team_cache();
631
+ assert_eq!(owner_of("app/payroll/a.rb"), None);
632
+ assert_eq!(owner_of("app/other/a.rb"), Some("Payroll".to_string()));
633
+ }
634
+
635
+ #[test]
636
+ fn test_find_file_owners_shares_loaded_teams_across_threads() {
637
+ let _guard = TEAM_CACHE_TEST_LOCK.lock().unwrap_or_else(|poisoned| poisoned.into_inner());
638
+ let td = tempdir().unwrap();
639
+ let root = td.path().to_path_buf();
640
+ let config = build_config_for_temp("frontend/**/*", "packs/**/*", "vendored");
641
+ let write_team = |glob: &str| {
642
+ fs::create_dir_all(root.join("config/teams")).unwrap();
643
+ fs::write(
644
+ root.join("config/teams/payroll.yml"),
645
+ format!("name: Payroll\ngithub:\n team: '@PayrollTeam'\nowned_globs:\n - {glob}\n"),
646
+ )
647
+ .unwrap();
648
+ };
649
+ let owner_of = |root: &Path, config: &crate::config::Config, file: &str| {
650
+ find_file_owners(root, config, Path::new(file))
651
+ .unwrap()
652
+ .first()
653
+ .map(|owner| owner.team.name.clone())
654
+ };
655
+
656
+ write_team("app/payroll/**/*");
657
+ assert_eq!(owner_of(&root, &config, "app/payroll/a.rb"), Some("Payroll".to_string()));
658
+ write_team("app/other/**/*");
659
+
660
+ std::thread::scope(|scope| {
661
+ scope.spawn(|| {
662
+ assert_eq!(
663
+ owner_of(&root, &config, "app/payroll/a.rb"),
664
+ Some("Payroll".to_string()),
665
+ "another thread reuses the teams loaded by the first"
666
+ );
667
+ clear_team_cache();
668
+ });
669
+ });
670
+
671
+ assert_eq!(
672
+ owner_of(&root, &config, "app/payroll/a.rb"),
673
+ None,
674
+ "a clear on another thread applies here too"
675
+ );
676
+ }
677
+
678
+ #[test]
679
+ fn test_clear_team_cache_during_a_load_is_not_undone_by_its_result() {
680
+ let _guard = TEAM_CACHE_TEST_LOCK.lock().unwrap_or_else(|poisoned| poisoned.into_inner());
681
+ let key: TeamCacheKey = (PathBuf::from("/clear-during-load"), vec!["config/teams/**/*.yml".to_string()]);
682
+ let loaded = || {
683
+ Arc::new(LoadedTeams {
684
+ teams: Vec::new(),
685
+ teams_by_name: HashMap::new(),
686
+ })
687
+ };
688
+
689
+ let generation = team_cache().generation;
690
+ clear_team_cache();
691
+ cache_teams(key.clone(), loaded(), generation);
692
+ assert!(
693
+ !team_cache().loaded.contains_key(&key),
694
+ "a load that started before the clear must not be cached"
695
+ );
696
+
697
+ let generation = team_cache().generation;
698
+ cache_teams(key.clone(), loaded(), generation);
699
+ assert!(team_cache().loaded.contains_key(&key));
700
+ clear_team_cache();
701
+ }
702
+
703
+ #[cfg(unix)]
704
+ #[test]
705
+ fn test_find_file_owners_does_not_cache_a_load_with_an_unreadable_team_directory() {
706
+ use std::os::unix::fs::PermissionsExt;
707
+
708
+ let _guard = TEAM_CACHE_TEST_LOCK.lock().unwrap_or_else(|poisoned| poisoned.into_inner());
709
+ let td = tempdir().unwrap();
710
+ let root = td.path();
711
+ let config = build_config_for_temp("frontend/**/*", "packs/**/*", "vendored");
712
+ let owner_of = |file: &str| {
713
+ find_file_owners(root, &config, Path::new(file))
714
+ .unwrap()
715
+ .first()
716
+ .map(|owner| owner.team.name.clone())
717
+ };
718
+
719
+ let teams_dir = root.join("config/teams");
720
+ let locked_dir = teams_dir.join("billing");
721
+ fs::create_dir_all(&locked_dir).unwrap();
722
+ fs::write(
723
+ teams_dir.join("payroll.yml"),
724
+ "name: Payroll\ngithub:\n team: '@PayrollTeam'\nowned_globs:\n - app/payroll/**/*\n",
725
+ )
726
+ .unwrap();
727
+ fs::write(
728
+ locked_dir.join("billing.yml"),
729
+ "name: Billing\ngithub:\n team: '@BillingTeam'\nowned_globs:\n - app/billing/**/*\n",
730
+ )
731
+ .unwrap();
732
+
733
+ fs::set_permissions(&locked_dir, fs::Permissions::from_mode(0o000)).unwrap();
734
+ // Permissions aren't enforced for root, so the directory can't be made unreadable there.
735
+ if fs::read_dir(&locked_dir).is_ok() {
736
+ fs::set_permissions(&locked_dir, fs::Permissions::from_mode(0o755)).unwrap();
737
+ return;
738
+ }
739
+ let payroll = owner_of("app/payroll/a.rb");
740
+ let billing_while_unreadable = owner_of("app/billing/a.rb");
741
+ fs::set_permissions(&locked_dir, fs::Permissions::from_mode(0o755)).unwrap();
742
+ let billing_once_readable = owner_of("app/billing/a.rb");
743
+
744
+ assert_eq!(payroll, Some("Payroll".to_string()));
745
+ assert_eq!(billing_while_unreadable, None);
746
+ assert_eq!(
747
+ billing_once_readable,
748
+ Some("Billing".to_string()),
749
+ "a team directory that becomes readable takes effect without clearing the cache"
750
+ );
751
+ clear_team_cache();
752
+ }
753
+
754
+ #[test]
755
+ fn test_find_file_owners_does_not_cache_a_load_that_skipped_a_team_file() {
756
+ let _guard = TEAM_CACHE_TEST_LOCK.lock().unwrap_or_else(|poisoned| poisoned.into_inner());
757
+ let td = tempdir().unwrap();
758
+ let root = td.path();
759
+ let config = build_config_for_temp("frontend/**/*", "packs/**/*", "vendored");
760
+ let write_team_file = |file: &str, contents: &str| {
761
+ fs::create_dir_all(root.join("config/teams")).unwrap();
762
+ fs::write(root.join("config/teams").join(file), contents).unwrap();
763
+ };
764
+ let owner_of = |file: &str| {
765
+ find_file_owners(root, &config, Path::new(file))
766
+ .unwrap()
767
+ .first()
768
+ .map(|owner| owner.team.name.clone())
769
+ };
770
+
771
+ write_team_file(
772
+ "payroll.yml",
773
+ "name: Payroll\ngithub:\n team: '@PayrollTeam'\nowned_globs:\n - app/payroll/**/*\n",
774
+ );
775
+ write_team_file("billing.yml", "name: [unclosed\n");
776
+ assert_eq!(owner_of("app/payroll/a.rb"), Some("Payroll".to_string()));
777
+ assert_eq!(owner_of("app/billing/a.rb"), None);
778
+
779
+ write_team_file(
780
+ "billing.yml",
781
+ "name: Billing\ngithub:\n team: '@BillingTeam'\nowned_globs:\n - app/billing/**/*\n",
782
+ );
783
+ assert_eq!(
784
+ owner_of("app/billing/a.rb"),
785
+ Some("Billing".to_string()),
786
+ "fixing the team file takes effect without clearing the cache"
787
+ );
788
+
789
+ write_team_file(
790
+ "billing.yml",
791
+ "name: Billing\ngithub:\n team: '@BillingTeam'\nowned_globs:\n - app/other/**/*\n",
792
+ );
793
+ assert_eq!(
794
+ owner_of("app/billing/a.rb"),
795
+ Some("Billing".to_string()),
796
+ "once every team file loads, the teams are cached"
797
+ );
798
+ }
799
+
800
+ #[test]
801
+ fn test_team_cache_is_keyed_on_team_file_glob() {
802
+ let td = tempdir().unwrap();
803
+ let root = td.path();
804
+ for (dir, name) in [("a", "Payroll"), ("b", "Billing")] {
805
+ fs::create_dir_all(root.join("config/teams").join(dir)).unwrap();
806
+ fs::write(
807
+ root.join("config/teams").join(dir).join("team.yml"),
808
+ format!("name: {name}\ngithub:\n team: '@{name}Team'\nowned_globs:\n - app/**/*\n"),
809
+ )
810
+ .unwrap();
811
+ }
812
+ let config_with_team_glob = |team_glob: &str| crate::config::Config {
813
+ team_file_glob: vec![team_glob.to_string()],
814
+ ..build_config_for_temp("frontend/**/*", "packs/**/*", "vendored")
815
+ };
816
+ let config_a = config_with_team_glob("config/teams/a/*.yml");
817
+ let config_b = config_with_team_glob("config/teams/b/*.yml");
818
+ let owner_of = |config: &crate::config::Config| {
819
+ find_file_owners(root, config, Path::new("app/a.rb"))
820
+ .unwrap()
821
+ .first()
822
+ .map(|owner| owner.team.name.clone())
823
+ };
824
+
825
+ assert_eq!(owner_of(&config_a), Some("Payroll".to_string()));
826
+ assert_eq!(owner_of(&config_b), Some("Billing".to_string()));
827
+ assert_eq!(owner_of(&config_a), Some("Payroll".to_string()));
828
+ }
829
+ }