code_ownership 2.1.0 → 2.1.2

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 (410) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config +2 -2
  3. data/Cargo.lock +10 -16
  4. data/README.md +8 -8
  5. data/ext/cargo-vendor/codeowners-0.3.2/.cargo-checksum.json +1 -0
  6. data/ext/cargo-vendor/codeowners-0.3.2/.github/CODEOWNERS +1 -0
  7. data/ext/cargo-vendor/codeowners-0.3.2/AGENTS.md +38 -0
  8. data/ext/cargo-vendor/codeowners-0.3.2/CLAUDE.md +1 -0
  9. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/Cargo.lock +1 -1
  10. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/Cargo.toml +17 -1
  11. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/README.md +11 -1
  12. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cli.rs +9 -5
  13. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/config.rs +81 -1
  14. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/crosscheck.rs +5 -8
  15. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/codeowners_file_parser.rs +3 -3
  16. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_owner_resolver.rs +3 -1
  17. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/package_mapper.rs +2 -2
  18. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper.rs +2 -2
  19. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/validator.rs +15 -10
  20. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership.rs +1 -0
  21. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project.rs +3 -0
  22. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project_builder.rs +111 -44
  23. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner/api.rs +7 -6
  24. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner/types.rs +2 -1
  25. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner.rs +67 -16
  26. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/tracked_files.rs +29 -1
  27. data/ext/cargo-vendor/codeowners-0.3.2/tests/codeowners_path_test.rs +92 -0
  28. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/common/mod.rs +2 -1
  29. data/ext/cargo-vendor/codeowners-0.3.2/tests/executable_name_config_test.rs +67 -0
  30. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/config/code_ownership.yml +11 -0
  31. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/config/teams/test_team.yml +6 -0
  32. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/docs/CODEOWNERS +14 -0
  33. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/expected/CODEOWNERS +14 -0
  34. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/ruby/app/models/test.rb +3 -0
  35. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/.github/CODEOWNERS +10 -0
  36. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/app/foo.rb +3 -0
  37. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/code_ownership.yml +4 -0
  38. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/teams/foo.yml +5 -0
  39. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/teams/payments.yml +6 -0
  40. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/ruby/app/payments/foo.rb +4 -0
  41. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/.github/CODEOWNERS +11 -0
  42. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/app/bar.rb +3 -0
  43. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/config/code_ownership.yml +5 -0
  44. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/config/teams/bar.yml +5 -0
  45. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/.github/CODEOWNERS +10 -0
  46. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/code_ownership.yml +10 -0
  47. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/teams/bad_team.yml +1 -0
  48. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/teams/good.yml +3 -0
  49. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/valid_project/gems/pets/dog.rb +5 -0
  50. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/git_stage_test.rs +4 -1
  51. data/ext/cargo-vendor/codeowners-0.3.2/tests/missing_github_team_test.rs +23 -0
  52. data/ext/cargo-vendor/codeowners-0.3.2/tests/run_config_executable_override_test.rs +98 -0
  53. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/runner_api.rs +8 -4
  54. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/valid_project_test.rs +3 -3
  55. data/ext/cargo-vendor/codeowners-0.3.2/tests/validate_files_test.rs +378 -0
  56. data/ext/cargo-vendor/magnus-0.8.2/.cargo-checksum.json +1 -0
  57. data/ext/cargo-vendor/magnus-0.8.2/.cargo_vcs_info.json +6 -0
  58. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/CHANGELOG.md +66 -1
  59. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/Cargo.lock +243 -9
  60. data/ext/cargo-vendor/magnus-0.8.2/Cargo.toml +277 -0
  61. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/Cargo.toml.orig +11 -6
  62. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/README.md +75 -23
  63. data/ext/cargo-vendor/magnus-0.8.2/build.rs +15 -0
  64. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/complete_object/test/temperature_test.rb +4 -4
  65. data/ext/cargo-vendor/magnus-0.8.2/examples/inheritance.rs +66 -0
  66. data/ext/cargo-vendor/magnus-0.8.2/examples/mut_point.rs +116 -0
  67. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/api.rs +4 -3
  68. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/class.rs +9 -7
  69. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/encoding.rs +5 -5
  70. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/error.rs +12 -3
  71. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/fiber.rs +5 -5
  72. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/gc.rs +3 -3
  73. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/integer.rs +134 -0
  74. data/ext/cargo-vendor/magnus-0.8.2/src/io.rs +230 -0
  75. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/lib.rs +53 -54
  76. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/macros.rs +2 -2
  77. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/method.rs +14 -100
  78. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/module.rs +1 -1
  79. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/mutex.rs +1 -1
  80. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_array.rs +2 -2
  81. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_bignum.rs +100 -3
  82. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_hash.rs +63 -1
  83. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_string.rs +31 -231
  84. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_typed_data.rs +6 -9
  85. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/rb_sys.rs +4 -4
  86. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/scan_args.rs +3 -3
  87. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/thread.rs +16 -10
  88. data/ext/cargo-vendor/magnus-0.8.2/src/time.rs +462 -0
  89. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/try_convert.rs +64 -2
  90. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/typed_data.rs +113 -11
  91. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/value/flonum.rs +1 -1
  92. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/value.rs +83 -6
  93. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/test +1 -1
  94. data/ext/cargo-vendor/magnus-0.8.2/tests/hash.rs +44 -0
  95. data/ext/cargo-vendor/magnus-0.8.2/tests/io.rs +62 -0
  96. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/return_iter.rs +1 -1
  97. data/ext/cargo-vendor/magnus-0.8.2/tests/string.rs +23 -0
  98. data/ext/cargo-vendor/magnus-0.8.2/tests/time.rs +71 -0
  99. data/ext/cargo-vendor/magnus-macros-0.8.0/.cargo-checksum.json +1 -0
  100. data/ext/cargo-vendor/magnus-macros-0.8.0/.cargo_vcs_info.json +6 -0
  101. data/ext/cargo-vendor/magnus-macros-0.8.0/Cargo.lock +47 -0
  102. data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/Cargo.toml +10 -1
  103. data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/Cargo.toml.orig +1 -1
  104. data/ext/cargo-vendor/magnus-macros-0.8.0/src/lib.rs +545 -0
  105. data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/src/typed_data.rs +3 -3
  106. data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/src/util.rs +1 -1
  107. data/ext/cargo-vendor/serde_magnus-0.10.0/.cargo-checksum.json +1 -0
  108. data/ext/cargo-vendor/serde_magnus-0.10.0/.cargo_vcs_info.json +6 -0
  109. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/Cargo.lock +77 -75
  110. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/Cargo.toml +3 -3
  111. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/Cargo.toml.orig +7 -4
  112. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/README.md +8 -5
  113. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/array_deserializer.rs +12 -8
  114. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/array_enumerator.rs +12 -7
  115. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/deserializer.rs +21 -18
  116. data/ext/cargo-vendor/serde_magnus-0.10.0/src/de/enum_deserializer.rs +35 -0
  117. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/hash_deserializer.rs +18 -11
  118. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/mod.rs +76 -76
  119. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/variant_deserializer.rs +10 -9
  120. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/error.rs +10 -4
  121. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/lib.rs +6 -5
  122. data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/enums.rs +11 -0
  123. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/map_serializer.rs +11 -12
  124. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/mod.rs +53 -50
  125. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/seq_serializer.rs +11 -10
  126. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/serializer.rs +50 -34
  127. data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/struct_serializer.rs +40 -0
  128. data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/struct_variant_serializer.rs +45 -0
  129. data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/tuple_variant_serializer.rs +38 -0
  130. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_arrays.rs +3 -3
  131. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_booleans.rs +15 -0
  132. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_enums.rs +39 -0
  133. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_floats.rs +12 -0
  134. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_integers.rs +18 -0
  135. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_maps.rs +3 -2
  136. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_options.rs +15 -0
  137. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_results.rs +17 -0
  138. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_strings.rs +7 -7
  139. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_structs.rs +9 -9
  140. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_tuples.rs +27 -0
  141. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_vecs.rs +3 -3
  142. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_arrays.rs +3 -3
  143. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/serializing_booleans.rs +15 -0
  144. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_enums.rs +9 -7
  145. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_floats.rs +2 -2
  146. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_integers.rs +4 -4
  147. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_maps.rs +3 -2
  148. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_options.rs +3 -3
  149. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_results.rs +5 -4
  150. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/serializing_strings.rs +30 -0
  151. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_structs.rs +15 -7
  152. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/serializing_tuples.rs +35 -0
  153. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_vecs.rs +3 -3
  154. data/ext/cargo-vendor/unicode-ident-1.0.19/.cargo-checksum.json +1 -1
  155. data/ext/code_ownership/Cargo.toml +3 -3
  156. data/ext/code_ownership/extconf.rb +2 -1
  157. data/ext/code_ownership/src/lib.rs +18 -18
  158. data/lib/code_ownership/cli.rb +1 -0
  159. data/lib/code_ownership/private/file_path_finder.rb +22 -10
  160. data/lib/code_ownership/private/file_path_team_cache.rb +5 -9
  161. data/lib/code_ownership/private/for_file_output_builder.rb +0 -1
  162. data/lib/code_ownership/private/team_finder.rb +9 -16
  163. data/lib/code_ownership/version.rb +2 -2
  164. data/lib/code_ownership.rb +14 -17
  165. metadata +359 -337
  166. data/ext/cargo-vendor/codeowners-0.3.0/.cargo-checksum.json +0 -1
  167. data/ext/cargo-vendor/codeowners-0.3.0/tests/validate_files_test.rs +0 -144
  168. data/ext/cargo-vendor/magnus-0.7.1/.cargo-checksum.json +0 -1
  169. data/ext/cargo-vendor/magnus-0.7.1/.cargo_vcs_info.json +0 -6
  170. data/ext/cargo-vendor/magnus-0.7.1/Cargo.toml +0 -95
  171. data/ext/cargo-vendor/magnus-0.7.1/build.rs +0 -5
  172. data/ext/cargo-vendor/magnus-0.7.1/examples/mut_point.rs +0 -60
  173. data/ext/cargo-vendor/magnus-0.7.1/src/time.rs +0 -190
  174. data/ext/cargo-vendor/magnus-0.7.1/tests/hash.rs +0 -25
  175. data/ext/cargo-vendor/magnus-0.7.1/tests/string.rs +0 -13
  176. data/ext/cargo-vendor/magnus-macros-0.6.0/.cargo-checksum.json +0 -1
  177. data/ext/cargo-vendor/magnus-macros-0.6.0/.cargo_vcs_info.json +0 -6
  178. data/ext/cargo-vendor/magnus-macros-0.6.0/src/lib.rs +0 -401
  179. data/ext/cargo-vendor/rb-sys-env-0.1.2/.cargo-checksum.json +0 -1
  180. data/ext/cargo-vendor/rb-sys-env-0.1.2/.cargo_vcs_info.json +0 -6
  181. data/ext/cargo-vendor/rb-sys-env-0.1.2/Cargo.toml +0 -25
  182. data/ext/cargo-vendor/rb-sys-env-0.1.2/Cargo.toml.orig +0 -14
  183. data/ext/cargo-vendor/rb-sys-env-0.1.2/LICENSE-APACHE +0 -190
  184. data/ext/cargo-vendor/rb-sys-env-0.1.2/LICENSE-MIT +0 -21
  185. data/ext/cargo-vendor/rb-sys-env-0.1.2/readme.md +0 -119
  186. data/ext/cargo-vendor/rb-sys-env-0.1.2/src/defines.rs +0 -37
  187. data/ext/cargo-vendor/rb-sys-env-0.1.2/src/lib.rs +0 -180
  188. data/ext/cargo-vendor/rb-sys-env-0.1.2/src/rb_env.rs +0 -110
  189. data/ext/cargo-vendor/rb-sys-env-0.1.2/src/ruby_version.rs +0 -163
  190. data/ext/cargo-vendor/rb-sys-env-0.1.2/src/utils.rs +0 -6
  191. data/ext/cargo-vendor/serde_magnus-0.9.0/.cargo-checksum.json +0 -1
  192. data/ext/cargo-vendor/serde_magnus-0.9.0/.cargo_vcs_info.json +0 -6
  193. data/ext/cargo-vendor/serde_magnus-0.9.0/src/de/enum_deserializer.rs +0 -30
  194. data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/enums.rs +0 -11
  195. data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/struct_serializer.rs +0 -36
  196. data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/struct_variant_serializer.rs +0 -37
  197. data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/tuple_variant_serializer.rs +0 -33
  198. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_booleans.rs +0 -18
  199. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_enums.rs +0 -39
  200. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_floats.rs +0 -12
  201. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_integers.rs +0 -18
  202. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_options.rs +0 -15
  203. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_results.rs +0 -17
  204. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_tuples.rs +0 -31
  205. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/serializing_booleans.rs +0 -15
  206. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/serializing_strings.rs +0 -30
  207. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/serializing_tuples.rs +0 -27
  208. data/ext/cargo-vendor/unicode-ident-1.0.19/tests/fst/.gitignore +0 -1
  209. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/audit.yml +0 -0
  210. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/ci.yml +0 -0
  211. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/dotslash-config.json +0 -0
  212. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.rustfmt.toml +0 -0
  213. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.rusty-hook.toml +0 -0
  214. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/dev/run_benchmarks_for_file.sh +0 -0
  215. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/dev/run_benchmarks_for_gv.sh +0 -0
  216. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/rust-toolchain.toml +0 -0
  217. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/file.rs +0 -0
  218. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/mod.rs +0 -0
  219. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/noop.rs +0 -0
  220. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/common_test.rs +0 -0
  221. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/lib.rs +0 -0
  222. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/main.rs +0 -0
  223. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/codeowners_query.rs +0 -0
  224. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_generator.rs +0 -0
  225. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_owner_finder.rs +0 -0
  226. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/annotated_file_mapper.rs +0 -0
  227. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/directory_mapper.rs +0 -0
  228. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/escaper.rs +0 -0
  229. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_gem_mapper.rs +0 -0
  230. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_glob_mapper.rs +0 -0
  231. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_yml_mapper.rs +0 -0
  232. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/path_utils.rs +0 -0
  233. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project_file_builder.rs +0 -0
  234. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/cache_test.rs +0 -0
  235. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/crosscheck_owners_test.rs +0 -0
  236. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
  237. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
  238. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
  239. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
  240. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
  241. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
  242. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
  243. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
  244. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
  245. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
  246. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
  247. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
  248. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
  249. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/.github/CODEOWNERS +0 -0
  250. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/.keep +0 -0
  251. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/code_ownership.yml +0 -0
  252. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/teams/design.yml +0 -0
  253. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/teams/frontend.yml +0 -0
  254. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +0 -0
  255. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +0 -0
  256. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/src/index.tsx +0 -0
  257. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +0 -0
  258. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/src/button.tsx +0 -0
  259. /data/ext/cargo-vendor/{codeowners-0.3.0/tests/fixtures/valid_project → codeowners-0.3.2/tests/fixtures/missing_github_team}/gems/pets/dog.rb +0 -0
  260. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
  261. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
  262. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/deep/nesting/nestdir/deep_file.rb +0 -0
  263. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
  264. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/.codeowner +0 -0
  265. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
  266. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/exciting/some_other_file.rb +0 -0
  267. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +0 -0
  268. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
  269. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +0 -0
  270. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/.github/CODEOWNERS +0 -0
  271. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/.ignore +0 -0
  272. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/code_ownership.yml +0 -0
  273. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
  274. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
  275. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
  276. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
  277. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
  278. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
  279. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
  280. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
  281. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
  282. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
  283. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +0 -0
  284. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
  285. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -0
  286. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
  287. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/foo/ownedby_payroll.rb +0 -0
  288. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
  289. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
  290. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
  291. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +0 -0
  292. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/views/foos/index.html.erb +0 -0
  293. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/views/foos/new.html.erb +0 -0
  294. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
  295. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
  296. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/should_be_ignored/an_ignored_file.rb +0 -0
  297. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +0 -0
  298. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +0 -0
  299. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +0 -0
  300. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +0 -0
  301. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +0 -0
  302. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +0 -0
  303. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/package.json +0 -0
  304. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/src/picks/dp.tsx +0 -0
  305. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/package.json +0 -0
  306. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/src/item.tsx +0 -0
  307. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/package.json +0 -0
  308. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/field.tsx +0 -0
  309. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/fields/small.tsx +0 -0
  310. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/gems/apollo/lib/apollo.rb +0 -0
  311. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/gems/ivy/lib/ivy.rb +0 -0
  312. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/gems/lager/lib/lager.rb +0 -0
  313. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/gems/summit/lib/summit.rb +0 -0
  314. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/games/app/services/stats.rb +0 -0
  315. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +0 -0
  316. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/locations/app/services/capacity.rb +0 -0
  317. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +0 -0
  318. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/schedule/app/services/date.rb +0 -0
  319. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +0 -0
  320. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/lib/util.rb +0 -0
  321. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/services/play.rb +0 -0
  322. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +0 -0
  323. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/.codeowner +0 -0
  324. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/db/price.rb +0 -0
  325. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/entertainment.rb +0 -0
  326. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/play.rb +0 -0
  327. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/giants/services/play.rb +0 -0
  328. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/rockies/services/play.rb +0 -0
  329. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/invalid_project_structure_test.rs +0 -0
  330. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/invalid_project_test.rs +0 -0
  331. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/multiple_directory_owners_test.rs +0 -0
  332. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/untracked_files_test.rs +0 -0
  333. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/valid_project_with_overrides_test.rs +0 -0
  334. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tmp/.gitkeep +0 -0
  335. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/.cargo/config.toml +0 -0
  336. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/Gemfile +0 -0
  337. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/LICENSE +0 -0
  338. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/complete_object/Rakefile +0 -0
  339. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/complete_object/lib/temperature.rb +0 -0
  340. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/Rakefile +0 -0
  341. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/lib/ahriman/error.rb +0 -0
  342. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/lib/ahriman.rb +0 -0
  343. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/test/error_test.rb +0 -0
  344. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_rust/Rakefile +0 -0
  345. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_rust/lib/ahriman.rb +0 -0
  346. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_rust/test/error_test.rb +0 -0
  347. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/fibonacci.rs +0 -0
  348. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/hello_world.rs +0 -0
  349. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/point.rs +0 -0
  350. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/Rakefile +0 -0
  351. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/lib/rust_blank.rb +0 -0
  352. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/test/bench.rb +0 -0
  353. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/test/blank_test.rb +0 -0
  354. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/block.rs +0 -0
  355. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/embed.rs +0 -0
  356. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/enumerator.rs +0 -0
  357. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/exception.rs +0 -0
  358. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/float.rs +0 -0
  359. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/into_value.rs +0 -0
  360. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/numeric.rs +0 -0
  361. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/object.rs +0 -0
  362. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/process.rs +0 -0
  363. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_complex.rs +0 -0
  364. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_file.rs +0 -0
  365. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_float.rs +0 -0
  366. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_match.rs +0 -0
  367. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_object.rs +0 -0
  368. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_rational.rs +0 -0
  369. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_regexp.rs +0 -0
  370. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_struct.rs +0 -0
  371. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/range.rs +0 -0
  372. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/symbol.rs +0 -0
  373. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/allocate_before_init.rs +0 -0
  374. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/array_slice.rs +0 -0
  375. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/block_call.rs +0 -0
  376. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/bytes.rs +0 -0
  377. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/call_proc.rs +0 -0
  378. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/classname.rs +0 -0
  379. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/clone.rs +0 -0
  380. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/codepoints.rs +0 -0
  381. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/debug_exception.rs +0 -0
  382. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/encoding_capable.rs +0 -0
  383. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/enumerator.rs +0 -0
  384. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/enumeratorize.rs +0 -0
  385. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/float_convert_from_value.rs +0 -0
  386. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/float_convert_to_value.rs +0 -0
  387. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/fmt.rs +0 -0
  388. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/freeze.rs +0 -0
  389. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/integer_convert_to_value.rs +0 -0
  390. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/integer_traits.rs +0 -0
  391. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/ivar.rs +0 -0
  392. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/lazy_id.rs +0 -0
  393. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/make_proc.rs +0 -0
  394. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/proc_new.rs +0 -0
  395. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/range.rs +0 -0
  396. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/return_custom_error.rs +0 -0
  397. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/scan_args.rs +0 -0
  398. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/str.rs +0 -0
  399. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/struct.rs +0 -0
  400. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/symbol.rs +0 -0
  401. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/try_convert_array.rs +0 -0
  402. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/tuple_to_array.rs +0 -0
  403. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data.rs +0 -0
  404. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data_obj.rs +0 -0
  405. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data_subclass.rs +0 -0
  406. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data_subclass_from_ruby.rs +0 -0
  407. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/yield.rs +0 -0
  408. /data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/LICENSE +0 -0
  409. /data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/src/init.rs +0 -0
  410. /data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/LICENSE +0 -0
@@ -21,6 +21,7 @@ pub struct Validator {
21
21
  pub project: Arc<Project>,
22
22
  pub mappers: Vec<Box<dyn Mapper>>,
23
23
  pub file_generator: FileGenerator,
24
+ pub executable_name: String,
24
25
  }
25
26
 
26
27
  #[derive(Debug)]
@@ -28,7 +29,7 @@ enum Error {
28
29
  InvalidTeam { name: String, path: PathBuf },
29
30
  FileWithoutOwner { path: PathBuf },
30
31
  FileWithMultipleOwners { path: PathBuf, owners: Vec<Owner> },
31
- CodeownershipFileIsStale,
32
+ CodeownershipFileIsStale { executable_name: String },
32
33
  }
33
34
 
34
35
  #[derive(Debug)]
@@ -130,12 +131,16 @@ impl Validator {
130
131
  match self.project.get_codeowners_file() {
131
132
  Ok(current_file) => {
132
133
  if generated_file != current_file {
133
- vec![Error::CodeownershipFileIsStale]
134
+ vec![Error::CodeownershipFileIsStale {
135
+ executable_name: self.executable_name.to_string(),
136
+ }]
134
137
  } else {
135
138
  vec![]
136
139
  }
137
140
  }
138
- Err(_) => vec![Error::CodeownershipFileIsStale], // Treat any read error as stale file
141
+ Err(_) => vec![Error::CodeownershipFileIsStale {
142
+ executable_name: self.executable_name.to_string(),
143
+ }],
139
144
  }
140
145
  }
141
146
 
@@ -161,13 +166,13 @@ impl Validator {
161
166
  impl Error {
162
167
  pub fn category(&self) -> String {
163
168
  match self {
164
- Error::FileWithoutOwner { path: _ } => "Some files are missing ownership".to_owned(),
165
- Error::FileWithMultipleOwners { path: _, owners: _ } => "Code ownership should only be defined for each file in one way. The following files have declared ownership in multiple ways".to_owned(),
166
- Error::CodeownershipFileIsStale => {
167
- "CODEOWNERS out of date. Run `codeowners generate` to update the CODEOWNERS file".to_owned()
169
+ Error::FileWithoutOwner { path: _ } => "Some files are missing ownership".to_owned(),
170
+ Error::FileWithMultipleOwners { path: _, owners: _ } => "Code ownership should only be defined for each file in one way. The following files have declared ownership in multiple ways".to_owned(),
171
+ Error::CodeownershipFileIsStale { executable_name } => {
172
+ format!("CODEOWNERS out of date. Run `{}` to update the CODEOWNERS file", executable_name)
173
+ }
174
+ Error::InvalidTeam { name: _, path: _ } => "Found invalid team annotations".to_owned(),
168
175
  }
169
- Error::InvalidTeam { name: _, path: _ } => "Found invalid team annotations".to_owned(),
170
- }
171
176
  }
172
177
 
173
178
  pub fn messages(&self) -> Vec<String> {
@@ -187,7 +192,7 @@ impl Error {
187
192
 
188
193
  vec![messages.join("\n")]
189
194
  }
190
- Error::CodeownershipFileIsStale => vec![],
195
+ Error::CodeownershipFileIsStale { executable_name: _ } => vec![],
191
196
  Error::InvalidTeam { name, path } => vec![format!("- {} is referencing an invalid team - '{}'", path.to_string_lossy(), name)],
192
197
  }
193
198
  }
@@ -123,6 +123,7 @@ impl Ownership {
123
123
  project: self.project.clone(),
124
124
  mappers: self.mappers(),
125
125
  file_generator: FileGenerator { mappers: self.mappers() },
126
+ executable_name: self.project.executable_name.clone(),
126
127
  };
127
128
 
128
129
  validator.validate()
@@ -17,6 +17,7 @@ pub struct Project {
17
17
  pub codeowners_file_path: PathBuf,
18
18
  pub directory_codeowner_files: Vec<DirectoryCodeownersFile>,
19
19
  pub teams_by_name: HashMap<String, Team>,
20
+ pub executable_name: String,
20
21
  }
21
22
 
22
23
  #[derive(Clone, Debug)]
@@ -111,6 +112,7 @@ pub mod deserializers {
111
112
  #[derive(Deserialize)]
112
113
  pub struct RubyPackage {
113
114
  pub owner: Option<String>,
115
+ pub metadata: Option<Metadata>,
114
116
  }
115
117
 
116
118
  #[derive(Deserialize)]
@@ -219,6 +221,7 @@ mod tests {
219
221
  codeowners_file_path: PathBuf::from(".github/CODEOWNERS"),
220
222
  directory_codeowner_files: vec![],
221
223
  teams_by_name: HashMap::new(),
224
+ executable_name: "codeowners generate".to_string(),
222
225
  };
223
226
 
224
227
  let map = project.vendored_gem_by_name();
@@ -8,7 +8,7 @@ use error_stack::{Report, Result, ResultExt};
8
8
  use fast_glob::glob_match;
9
9
  use ignore::{DirEntry, WalkBuilder, WalkParallel, WalkState};
10
10
  use rayon::iter::{IntoParallelIterator, ParallelIterator};
11
- use tracing::{instrument, warn};
11
+ use tracing::instrument;
12
12
 
13
13
  use crate::{
14
14
  cache::Cache,
@@ -178,9 +178,17 @@ impl<'a> ProjectBuilder<'a> {
178
178
  }
179
179
 
180
180
  fn build_project_from_entry_types(&mut self, entry_types: Vec<EntryType>) -> Result<Project, Error> {
181
- let (project_files, packages, vendored_gems, directory_codeowners, teams): (Vec<_>, Vec<_>, Vec<_>, Vec<_>, Vec<_>) = entry_types
181
+ type Accumulator = (
182
+ Vec<ProjectFile>,
183
+ Vec<Package>,
184
+ Vec<VendoredGem>,
185
+ Vec<DirectoryCodeownersFile>,
186
+ Vec<Team>,
187
+ );
188
+
189
+ let (project_files, packages, vendored_gems, directory_codeowners, teams): Accumulator = entry_types
182
190
  .into_par_iter()
183
- .fold(
191
+ .try_fold(
184
192
  || {
185
193
  (
186
194
  Vec::<ProjectFile>::with_capacity(INITIAL_VECTOR_CAPACITY),
@@ -197,18 +205,20 @@ impl<'a> ProjectBuilder<'a> {
197
205
  }
198
206
  EntryType::Directory(absolute_path, relative_path) => {
199
207
  if relative_path.parent() == Some(Path::new(&self.config.vendored_gems_path)) {
200
- if let Some(file_name) = relative_path.file_name() {
201
- gems.push(VendoredGem {
202
- path: absolute_path,
203
- name: file_name.to_string_lossy().to_string(),
204
- });
205
- } else {
206
- warn!("Vendored gem path without file name: {:?}", relative_path);
207
- }
208
+ let file_name = relative_path.file_name().ok_or_else(|| {
209
+ error_stack::report!(Error::Io)
210
+ .attach_printable(format!("Vendored gem path has no file name: {}", relative_path.display()))
211
+ })?;
212
+ gems.push(VendoredGem {
213
+ path: absolute_path,
214
+ name: file_name.to_string_lossy().to_string(),
215
+ });
208
216
  }
209
217
  }
210
218
  EntryType::RubyPackage(absolute_path, relative_path) => {
211
- match ruby_package_owner(&absolute_path) {
219
+ match ruby_package_owner(&absolute_path)
220
+ .attach_printable_lazy(|| format!("Failed to read ruby package: {}", absolute_path.display()))
221
+ {
212
222
  Ok(Some(owner)) => {
213
223
  pkgs.push(Package {
214
224
  path: relative_path.clone(),
@@ -217,13 +227,13 @@ impl<'a> ProjectBuilder<'a> {
217
227
  });
218
228
  }
219
229
  Ok(None) => { /* No owner, do nothing */ }
220
- Err(e) => {
221
- warn!("Error reading ruby package owner for {:?}: {:?}", absolute_path, e);
222
- }
230
+ Err(e) => return Err(e),
223
231
  }
224
232
  }
225
233
  EntryType::JavascriptPackage(absolute_path, relative_path) => {
226
- match javascript_package_owner(&absolute_path) {
234
+ match javascript_package_owner(&absolute_path)
235
+ .attach_printable_lazy(|| format!("Failed to read javascript package: {}", absolute_path.display()))
236
+ {
227
237
  Ok(Some(owner)) => {
228
238
  pkgs.push(Package {
229
239
  path: relative_path.clone(),
@@ -232,37 +242,31 @@ impl<'a> ProjectBuilder<'a> {
232
242
  });
233
243
  }
234
244
  Ok(None) => { /* No owner, do nothing */ }
235
- Err(e) => {
236
- warn!("Error reading javascript package owner for {:?}: {:?}", absolute_path, e);
237
- }
245
+ Err(e) => return Err(e),
238
246
  }
239
247
  }
240
- EntryType::CodeownerFile(absolute_path, relative_path) => match std::fs::read_to_string(&absolute_path) {
241
- Ok(owner) => {
242
- let owner = owner.trim().to_owned();
243
- codeowners.push(DirectoryCodeownersFile {
244
- path: relative_path.clone(),
245
- owner,
246
- });
247
- }
248
- Err(e) => {
249
- warn!("Error reading codeowner file for {:?}: {:?}", absolute_path, e);
250
- }
251
- },
252
- EntryType::TeamFile(absolute_path, _relative_path) => match Team::from_team_file_path(absolute_path) {
253
- Ok(team) => {
254
- team_files.push(team);
255
- }
256
- Err(e) => {
257
- warn!("Error building team from team file path: {}", e);
258
- }
259
- },
248
+ EntryType::CodeownerFile(absolute_path, relative_path) => {
249
+ let owner = std::fs::read_to_string(&absolute_path)
250
+ .change_context(Error::Io)
251
+ .attach_printable_lazy(|| format!("Failed to read codeowner file: {}", absolute_path.display()))?;
252
+ let owner = owner.trim().to_owned();
253
+ codeowners.push(DirectoryCodeownersFile {
254
+ path: relative_path.clone(),
255
+ owner,
256
+ });
257
+ }
258
+ EntryType::TeamFile(absolute_path, _relative_path) => {
259
+ let team = Team::from_team_file_path(absolute_path.clone())
260
+ .change_context(Error::Io)
261
+ .attach_printable_lazy(|| format!("Failed to read team file: {}", absolute_path.display()))?;
262
+ team_files.push(team);
263
+ }
260
264
  EntryType::NullEntry() => {}
261
265
  }
262
- (project_files, pkgs, gems, codeowners, team_files)
266
+ Ok((project_files, pkgs, gems, codeowners, team_files))
263
267
  },
264
268
  )
265
- .reduce(
269
+ .try_reduce(
266
270
  || (Vec::new(), Vec::new(), Vec::new(), Vec::new(), Vec::new()),
267
271
  |mut acc, item| {
268
272
  acc.0.extend(item.0);
@@ -270,9 +274,9 @@ impl<'a> ProjectBuilder<'a> {
270
274
  acc.2.extend(item.2);
271
275
  acc.3.extend(item.3);
272
276
  acc.4.extend(item.4);
273
- acc
277
+ Ok(acc)
274
278
  },
275
- );
279
+ )?;
276
280
  let teams_by_name = teams
277
281
  .iter()
278
282
  .flat_map(|team| vec![(team.name.clone(), team.clone()), (team.github_team.clone(), team.clone())])
@@ -294,6 +298,7 @@ impl<'a> ProjectBuilder<'a> {
294
298
  codeowners_file_path: self.codeowners_file_path.to_path_buf(),
295
299
  directory_codeowner_files: directory_codeowners,
296
300
  teams_by_name,
301
+ executable_name: self.config.executable_name.clone(),
297
302
  })
298
303
  }
299
304
  }
@@ -309,7 +314,19 @@ fn ruby_package_owner(path: &Path) -> Result<Option<String>, Error> {
309
314
  let file = File::open(path).change_context(Error::Io)?;
310
315
  let deserializer: deserializers::RubyPackage = serde_yaml::from_reader(file).change_context(Error::SerdeYaml)?;
311
316
 
312
- Ok(deserializer.owner)
317
+ let top_level_owner = deserializer.owner;
318
+ let metadata_owner = deserializer.metadata.and_then(|metadata| metadata.owner);
319
+
320
+ // Error if both are present with different values
321
+ match (top_level_owner.as_ref(), metadata_owner.as_ref()) {
322
+ (Some(top), Some(meta)) if top != meta => Err(error_stack::report!(Error::Io).attach_printable(format!(
323
+ "Package at {} has conflicting owners: 'owner: {}' vs 'metadata.owner: {}'. Please use only one.",
324
+ path.display(),
325
+ top,
326
+ meta
327
+ ))),
328
+ _ => Ok(top_level_owner.or(metadata_owner)),
329
+ }
313
330
  }
314
331
 
315
332
  fn javascript_package_owner(path: &Path) -> Result<Option<String>, Error> {
@@ -334,4 +351,54 @@ mod tests {
334
351
  fn test_glob_match() {
335
352
  assert!(glob_match(OWNED_GLOB, "script/.eslintrc.js"));
336
353
  }
354
+
355
+ #[test]
356
+ fn test_ruby_package_owner_top_level() {
357
+ let yaml = "owner: TeamA\n";
358
+ let temp_file = tempfile::NamedTempFile::new().unwrap();
359
+ std::fs::write(temp_file.path(), yaml).unwrap();
360
+
361
+ let owner = ruby_package_owner(temp_file.path()).unwrap();
362
+ assert_eq!(owner, Some("TeamA".to_string()));
363
+ }
364
+
365
+ #[test]
366
+ fn test_ruby_package_owner_metadata() {
367
+ let yaml = "metadata:\n owner: TeamB\n";
368
+ let temp_file = tempfile::NamedTempFile::new().unwrap();
369
+ std::fs::write(temp_file.path(), yaml).unwrap();
370
+
371
+ let owner = ruby_package_owner(temp_file.path()).unwrap();
372
+ assert_eq!(owner, Some("TeamB".to_string()));
373
+ }
374
+
375
+ #[test]
376
+ fn test_ruby_package_owner_errors_when_both_present_and_different() {
377
+ let yaml = "owner: TeamA\nmetadata:\n owner: TeamB\n";
378
+ let temp_file = tempfile::NamedTempFile::new().unwrap();
379
+ std::fs::write(temp_file.path(), yaml).unwrap();
380
+
381
+ let result = ruby_package_owner(temp_file.path());
382
+ assert!(result.is_err());
383
+ }
384
+
385
+ #[test]
386
+ fn test_ruby_package_owner_allows_both_when_same() {
387
+ let yaml = "owner: TeamA\nmetadata:\n owner: TeamA\n";
388
+ let temp_file = tempfile::NamedTempFile::new().unwrap();
389
+ std::fs::write(temp_file.path(), yaml).unwrap();
390
+
391
+ let owner = ruby_package_owner(temp_file.path()).unwrap();
392
+ assert_eq!(owner, Some("TeamA".to_string()));
393
+ }
394
+
395
+ #[test]
396
+ fn test_ruby_package_owner_no_owner() {
397
+ let yaml = "name: my_package\n";
398
+ let temp_file = tempfile::NamedTempFile::new().unwrap();
399
+ std::fs::write(temp_file.path(), yaml).unwrap();
400
+
401
+ let owner = ruby_package_owner(temp_file.path()).unwrap();
402
+ assert_eq!(owner, None);
403
+ }
337
404
  }
@@ -1,9 +1,9 @@
1
1
  use std::collections::HashMap;
2
2
 
3
- use crate::ownership::FileOwner;
4
3
  use crate::project::Team;
4
+ use crate::{ownership::FileOwner, runner::config_from_run_config};
5
5
 
6
- use super::{Error, ForFileResult, RunConfig, RunResult, config_from_path, run};
6
+ use super::{Error, ForFileResult, RunConfig, RunResult, run};
7
7
 
8
8
  pub fn for_file(run_config: &RunConfig, file_path: &str, from_codeowners: bool, json: bool) -> RunResult {
9
9
  if from_codeowners {
@@ -38,7 +38,7 @@ pub fn crosscheck_owners(run_config: &RunConfig) -> RunResult {
38
38
 
39
39
  // Returns all owners for a file without creating a Runner (performance optimized)
40
40
  pub fn owners_for_file(run_config: &RunConfig, file_path: &str) -> error_stack::Result<Vec<FileOwner>, Error> {
41
- let config = config_from_path(&run_config.config_path)?;
41
+ let config = config_from_run_config(run_config)?;
42
42
  use crate::ownership::file_owner_resolver::find_file_owners;
43
43
  let owners = find_file_owners(&run_config.project_root, &config, std::path::Path::new(file_path)).map_err(Error::Io)?;
44
44
  Ok(owners)
@@ -60,10 +60,11 @@ pub fn teams_for_files_from_codeowners(
60
60
  run_config: &RunConfig,
61
61
  file_paths: &[String],
62
62
  ) -> error_stack::Result<HashMap<String, Option<Team>>, Error> {
63
- let config = config_from_path(&run_config.config_path)?;
63
+ let config = config_from_run_config(run_config)?;
64
+ let codeowners_file_path = super::resolve_codeowners_file_path(run_config, &config);
64
65
  let res = crate::ownership::codeowners_query::teams_for_files_from_codeowners(
65
66
  &run_config.project_root,
66
- &run_config.codeowners_file_path,
67
+ &codeowners_file_path,
67
68
  &config.team_file_glob,
68
69
  file_paths,
69
70
  )
@@ -80,7 +81,7 @@ pub fn team_for_file_from_codeowners(run_config: &RunConfig, file_path: &str) ->
80
81
 
81
82
  // Fast path that avoids creating a full Runner for single file queries
82
83
  fn for_file_optimized(run_config: &RunConfig, file_path: &str, json: bool) -> RunResult {
83
- let config = match config_from_path(&run_config.config_path) {
84
+ let config = match config_from_run_config(run_config) {
84
85
  Ok(c) => c,
85
86
  Err(err) => {
86
87
  return RunResult::from_io_error(Error::Io(err.to_string()), json);
@@ -14,9 +14,10 @@ pub struct RunResult {
14
14
  #[derive(Debug, Clone)]
15
15
  pub struct RunConfig {
16
16
  pub project_root: PathBuf,
17
- pub codeowners_file_path: PathBuf,
17
+ pub codeowners_file_path: Option<PathBuf>,
18
18
  pub config_path: PathBuf,
19
19
  pub no_cache: bool,
20
+ pub executable_name: Option<String>,
20
21
  }
21
22
 
22
23
  #[derive(Debug, Serialize)]
@@ -1,6 +1,8 @@
1
- use std::{path::Path, process::Command};
1
+ use std::path::{Path, PathBuf};
2
+ use std::process::Command;
2
3
 
3
4
  use error_stack::{Result, ResultExt};
5
+ use fast_glob::glob_match;
4
6
  use serde::Serialize;
5
7
 
6
8
  use crate::{
@@ -20,6 +22,7 @@ pub struct Runner {
20
22
  ownership: Ownership,
21
23
  cache: Cache,
22
24
  config: Config,
25
+ codeowners_file_path: PathBuf,
23
26
  }
24
27
 
25
28
  pub fn version() -> String {
@@ -36,7 +39,7 @@ where
36
39
  Ok(runner) => runner,
37
40
  Err(err) => {
38
41
  return RunResult {
39
- io_errors: vec![err.to_string()],
42
+ io_errors: vec![format!("{:?}", err)],
40
43
  ..Default::default()
41
44
  };
42
45
  }
@@ -44,15 +47,41 @@ where
44
47
  runnable(runner)
45
48
  }
46
49
 
47
- pub(crate) fn config_from_path(path: &Path) -> Result<Config, Error> {
48
- match crate::config::Config::load_from_path(path) {
49
- Ok(c) => Ok(c),
50
+ pub(crate) fn config_from_run_config(run_config: &RunConfig) -> Result<Config, Error> {
51
+ match crate::config::Config::load_from_path(&run_config.config_path) {
52
+ Ok(mut c) => {
53
+ if let Some(executable_name) = &run_config.executable_name {
54
+ c.executable_name = executable_name.clone();
55
+ }
56
+ Ok(c)
57
+ }
50
58
  Err(msg) => Err(error_stack::Report::new(Error::Io(msg))),
51
59
  }
52
60
  }
61
+
62
+ /// Resolves the CODEOWNERS file path with the following priority:
63
+ /// 1. Explicit `codeowners_file_path` in `RunConfig` (if provided from e.g. CLI flag)
64
+ /// 2. `CODEOWNERS_PATH` environment variable (if set and not empty)
65
+ /// 3. Computed from `codeowners_path` directory path in config + "CODEOWNERS" filename
66
+ /// 4. Default fallback to `.github/CODEOWNERS` (using default codeowners_path from config)
67
+ pub(crate) fn resolve_codeowners_file_path(run_config: &RunConfig, config: &Config) -> PathBuf {
68
+ if let Some(ref path) = run_config.codeowners_file_path {
69
+ return path.clone();
70
+ }
71
+
72
+ if let Ok(env_path) = std::env::var("CODEOWNERS_PATH")
73
+ && !env_path.is_empty()
74
+ {
75
+ return run_config.project_root.join(env_path);
76
+ }
77
+
78
+ run_config.project_root.join(&config.codeowners_path).join("CODEOWNERS")
79
+ }
80
+
53
81
  impl Runner {
54
82
  pub fn new(run_config: &RunConfig) -> Result<Self, Error> {
55
- let config = config_from_path(&run_config.config_path)?;
83
+ let config = config_from_run_config(run_config)?;
84
+ let codeowners_file_path = resolve_codeowners_file_path(run_config, &config);
56
85
 
57
86
  let cache: Cache = if run_config.no_cache {
58
87
  NoopCache::default().into()
@@ -66,12 +95,7 @@ impl Runner {
66
95
  .into()
67
96
  };
68
97
 
69
- let mut project_builder = ProjectBuilder::new(
70
- &config,
71
- run_config.project_root.clone(),
72
- run_config.codeowners_file_path.clone(),
73
- &cache,
74
- );
98
+ let mut project_builder = ProjectBuilder::new(&config, run_config.project_root.clone(), codeowners_file_path.clone(), &cache);
75
99
  let project = project_builder.build().change_context(Error::Io(format!(
76
100
  "Can't build project: {}",
77
101
  &run_config.config_path.to_string_lossy()
@@ -88,6 +112,7 @@ impl Runner {
88
112
  ownership,
89
113
  cache,
90
114
  config,
115
+ codeowners_file_path,
91
116
  })
92
117
  }
93
118
 
@@ -113,7 +138,25 @@ impl Runner {
113
138
  let mut unowned_files = Vec::new();
114
139
  let mut io_errors = Vec::new();
115
140
 
116
- for file_path in file_paths {
141
+ // Filter files based on owned_globs and unowned_globs configuration
142
+ // Only validate files that match owned_globs and don't match unowned_globs
143
+ let filtered_paths: Vec<String> = file_paths
144
+ .into_iter()
145
+ .filter(|file_path| {
146
+ // Convert to relative path for glob matching
147
+ let path = Path::new(file_path);
148
+ let relative_path = if path.is_absolute() {
149
+ path.strip_prefix(&self.run_config.project_root).unwrap_or(path)
150
+ } else {
151
+ path
152
+ };
153
+
154
+ // Mirror the filtering applied by ProjectBuilder when walking the project
155
+ matches_globs(relative_path, &self.config.owned_globs) && !matches_globs(relative_path, &self.config.unowned_globs)
156
+ })
157
+ .collect();
158
+
159
+ for file_path in filtered_paths {
117
160
  match team_for_file_from_codeowners(&self.run_config, &file_path) {
118
161
  Ok(Some(_)) => {}
119
162
  Ok(None) => unowned_files.push(file_path),
@@ -145,10 +188,10 @@ impl Runner {
145
188
 
146
189
  pub fn generate(&self, git_stage: bool) -> RunResult {
147
190
  let content = self.ownership.generate_file();
148
- if let Some(parent) = &self.run_config.codeowners_file_path.parent() {
191
+ if let Some(parent) = &self.codeowners_file_path.parent() {
149
192
  let _ = std::fs::create_dir_all(parent);
150
193
  }
151
- match std::fs::write(&self.run_config.codeowners_file_path, content) {
194
+ match std::fs::write(&self.codeowners_file_path, content) {
152
195
  Ok(_) => {
153
196
  if git_stage {
154
197
  self.git_stage();
@@ -173,7 +216,7 @@ impl Runner {
173
216
  fn git_stage(&self) {
174
217
  let _ = Command::new("git")
175
218
  .arg("add")
176
- .arg(&self.run_config.codeowners_file_path)
219
+ .arg(&self.codeowners_file_path)
177
220
  .current_dir(&self.run_config.project_root)
178
221
  .output();
179
222
  }
@@ -389,6 +432,14 @@ impl RunResult {
389
432
  }
390
433
  }
391
434
 
435
+ /// Returns true if `path` matches any of the provided glob patterns.
436
+ fn matches_globs(path: &Path, globs: &[String]) -> bool {
437
+ match path.to_str() {
438
+ Some(s) => globs.iter().any(|glob| glob_match(glob, s)),
439
+ None => false,
440
+ }
441
+ }
442
+
392
443
  #[cfg(test)]
393
444
  mod tests {
394
445
  use super::*;
@@ -6,7 +6,7 @@ use std::{
6
6
 
7
7
  pub(crate) fn find_tracked_files(base_path: &Path) -> Option<HashMap<PathBuf, bool>> {
8
8
  let output = Command::new("git")
9
- .args(["ls-files", "--full-name", "-z", "--", "."])
9
+ .args(["ls-files", "-z", "--", "."])
10
10
  .current_dir(base_path)
11
11
  .output()
12
12
  .ok()?;
@@ -55,4 +55,32 @@ mod tests {
55
55
  assert!(tracked.len() == 1);
56
56
  assert!(tracked.get(&tmp_dir.path().join("test.txt")).unwrap());
57
57
  }
58
+
59
+ #[test]
60
+ fn test_tracked_files_from_subdirectory() {
61
+ let tmp_dir = tempfile::tempdir().unwrap();
62
+ let backend_dir = tmp_dir.path().join("backend");
63
+ let tracked_file = backend_dir.join("app/models/foo.rb");
64
+
65
+ std::process::Command::new("git")
66
+ .arg("init")
67
+ .current_dir(tmp_dir.path())
68
+ .output()
69
+ .expect("failed to run git init");
70
+
71
+ std::fs::create_dir_all(tracked_file.parent().unwrap()).unwrap();
72
+ std::fs::write(&tracked_file, "class Foo; end").unwrap();
73
+ std::fs::write(tmp_dir.path().join("README.md"), "readme").unwrap();
74
+
75
+ std::process::Command::new("git")
76
+ .args(["add", "--all"])
77
+ .current_dir(tmp_dir.path())
78
+ .output()
79
+ .expect("failed to add tracked files");
80
+
81
+ let tracked = find_tracked_files(&backend_dir).unwrap();
82
+ assert_eq!(tracked.len(), 1);
83
+ assert!(tracked.get(&tracked_file).unwrap());
84
+ assert!(!tracked.contains_key(&backend_dir.join("backend/app/models/foo.rb")));
85
+ }
58
86
  }
@@ -0,0 +1,92 @@
1
+ use predicates::prelude::predicate;
2
+ use std::{error::Error, fs, path::Path};
3
+
4
+ mod common;
5
+
6
+ use common::OutputStream;
7
+ use common::git_add_all_files;
8
+ use common::run_codeowners;
9
+ use common::setup_fixture_repo;
10
+
11
+ #[test]
12
+ fn test_generate_uses_codeowners_path_from_config() -> Result<(), Box<dyn Error>> {
13
+ let fixture_root = Path::new("tests/fixtures/custom_codeowners_path");
14
+ let temp_dir = setup_fixture_repo(fixture_root);
15
+ let project_root = temp_dir.path();
16
+ git_add_all_files(project_root);
17
+
18
+ let mut cmd = assert_cmd::Command::cargo_bin("codeowners")?;
19
+ cmd.arg("--project-root")
20
+ .arg(project_root)
21
+ .arg("--no-cache")
22
+ .arg("generate")
23
+ .assert()
24
+ .success();
25
+
26
+ let expected_codeowners: String = std::fs::read_to_string(Path::new("tests/fixtures/custom_codeowners_path/expected/CODEOWNERS"))?;
27
+ let actual_codeowners: String = std::fs::read_to_string(project_root.join("docs/CODEOWNERS"))?;
28
+
29
+ assert_eq!(expected_codeowners, actual_codeowners);
30
+
31
+ Ok(())
32
+ }
33
+
34
+ #[test]
35
+ fn test_cli_overrides_codeowners_path_from_config() -> Result<(), Box<dyn Error>> {
36
+ fs::create_dir_all("tmp")?;
37
+ let codeowners_abs = std::env::current_dir()?.join("tmp/CODEOWNERS");
38
+ let codeowners_str = codeowners_abs.to_str().unwrap();
39
+
40
+ run_codeowners(
41
+ "custom_codeowners_path",
42
+ &["--codeowners-file-path", codeowners_str, "generate"],
43
+ true,
44
+ OutputStream::Stdout,
45
+ predicate::eq(""),
46
+ )?;
47
+
48
+ let expected_codeowners: String = std::fs::read_to_string(Path::new("tests/fixtures/custom_codeowners_path/expected/CODEOWNERS"))?;
49
+ let actual_codeowners: String = std::fs::read_to_string(Path::new("tmp/CODEOWNERS"))?;
50
+
51
+ assert_eq!(expected_codeowners, actual_codeowners);
52
+
53
+ Ok(())
54
+ }
55
+
56
+ #[test]
57
+ fn test_validate_uses_codeowners_path_from_config() -> Result<(), Box<dyn Error>> {
58
+ run_codeowners(
59
+ "custom_codeowners_path",
60
+ &["validate"],
61
+ true,
62
+ OutputStream::Stdout,
63
+ predicate::eq(""),
64
+ )?;
65
+
66
+ Ok(())
67
+ }
68
+
69
+ #[test]
70
+ fn test_validate_uses_cli_override() -> Result<(), Box<dyn Error>> {
71
+ fs::create_dir_all("tmp")?;
72
+ let codeowners_abs = std::env::current_dir()?.join("tmp/CODEOWNERS");
73
+ let codeowners_str = codeowners_abs.to_str().unwrap();
74
+
75
+ run_codeowners(
76
+ "custom_codeowners_path",
77
+ &["--codeowners-file-path", codeowners_str, "generate"],
78
+ true,
79
+ OutputStream::Stdout,
80
+ predicate::eq(""),
81
+ )?;
82
+
83
+ run_codeowners(
84
+ "custom_codeowners_path",
85
+ &["--codeowners-file-path", codeowners_str, "validate"],
86
+ true,
87
+ OutputStream::Stdout,
88
+ predicate::eq(""),
89
+ )?;
90
+
91
+ Ok(())
92
+ }