code_ownership 2.1.1 → 2.1.3

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 (265) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config +2 -2
  3. data/Cargo.lock +9 -2
  4. data/README.md +8 -8
  5. data/ext/cargo-vendor/codeowners-0.3.3/.cargo-checksum.json +1 -0
  6. data/ext/cargo-vendor/codeowners-0.3.3/.github/CODEOWNERS +1 -0
  7. data/ext/cargo-vendor/codeowners-0.3.3/AGENTS.md +38 -0
  8. data/ext/cargo-vendor/codeowners-0.3.3/CLAUDE.md +1 -0
  9. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/Cargo.lock +8 -1
  10. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/Cargo.toml +18 -1
  11. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/README.md +11 -1
  12. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/cli.rs +9 -5
  13. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/config.rs +81 -1
  14. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/crosscheck.rs +5 -8
  15. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/codeowners_file_parser.rs +3 -3
  16. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/file_generator.rs +119 -9
  17. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/file_owner_resolver.rs +3 -1
  18. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/mapper/package_mapper.rs +2 -2
  19. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/mapper.rs +2 -2
  20. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/validator.rs +84 -17
  21. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership.rs +1 -0
  22. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/project.rs +3 -0
  23. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/project_builder.rs +111 -44
  24. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/runner/api.rs +7 -6
  25. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/runner/types.rs +2 -1
  26. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/runner.rs +67 -16
  27. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/tracked_files.rs +29 -1
  28. data/ext/cargo-vendor/codeowners-0.3.3/tests/codeowners_path_test.rs +92 -0
  29. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/common/mod.rs +2 -1
  30. data/ext/cargo-vendor/codeowners-0.3.3/tests/executable_name_config_test.rs +88 -0
  31. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_codeowners_path/config/code_ownership.yml +11 -0
  32. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_codeowners_path/config/teams/test_team.yml +6 -0
  33. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_codeowners_path/docs/CODEOWNERS +14 -0
  34. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_codeowners_path/expected/CODEOWNERS +14 -0
  35. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_codeowners_path/ruby/app/models/test.rb +3 -0
  36. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_executable_name/.github/CODEOWNERS +10 -0
  37. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_executable_name/app/foo.rb +3 -0
  38. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_executable_name/config/code_ownership.yml +4 -0
  39. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_executable_name/config/teams/foo.yml +5 -0
  40. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_executable_name/config/teams/payments.yml +6 -0
  41. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/custom_executable_name/ruby/app/payments/foo.rb +4 -0
  42. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/default_executable_name/.github/CODEOWNERS +11 -0
  43. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/default_executable_name/app/bar.rb +3 -0
  44. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/default_executable_name/config/code_ownership.yml +5 -0
  45. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/default_executable_name/config/teams/bar.yml +5 -0
  46. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/missing_github_team/.github/CODEOWNERS +10 -0
  47. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/missing_github_team/config/code_ownership.yml +10 -0
  48. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/missing_github_team/config/teams/bad_team.yml +1 -0
  49. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/missing_github_team/config/teams/good.yml +3 -0
  50. data/ext/cargo-vendor/codeowners-0.3.3/tests/fixtures/valid_project/gems/pets/dog.rb +5 -0
  51. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/git_stage_test.rs +4 -1
  52. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/invalid_project_test.rs +30 -0
  53. data/ext/cargo-vendor/codeowners-0.3.3/tests/missing_github_team_test.rs +23 -0
  54. data/ext/cargo-vendor/codeowners-0.3.3/tests/run_config_executable_override_test.rs +98 -0
  55. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/runner_api.rs +8 -4
  56. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/valid_project_test.rs +3 -3
  57. data/ext/cargo-vendor/codeowners-0.3.3/tests/validate_files_test.rs +378 -0
  58. data/ext/cargo-vendor/similar-2.7.0/.cargo/config.toml +2 -0
  59. data/ext/cargo-vendor/similar-2.7.0/.cargo-checksum.json +1 -0
  60. data/ext/cargo-vendor/similar-2.7.0/.cargo_vcs_info.json +6 -0
  61. data/ext/cargo-vendor/similar-2.7.0/.github/FUNDING.yml +1 -0
  62. data/ext/cargo-vendor/similar-2.7.0/.github/workflows/clippy.yml +16 -0
  63. data/ext/cargo-vendor/similar-2.7.0/.github/workflows/rustfmt.yml +16 -0
  64. data/ext/cargo-vendor/similar-2.7.0/.github/workflows/tests.yml +49 -0
  65. data/ext/cargo-vendor/similar-2.7.0/.vscode/settings.json +5 -0
  66. data/ext/cargo-vendor/similar-2.7.0/CHANGELOG.md +132 -0
  67. data/ext/cargo-vendor/similar-2.7.0/Cargo.lock +373 -0
  68. data/ext/cargo-vendor/similar-2.7.0/Cargo.lock.msrv +266 -0
  69. data/ext/cargo-vendor/similar-2.7.0/Cargo.toml +149 -0
  70. data/ext/cargo-vendor/similar-2.7.0/Cargo.toml.orig +73 -0
  71. data/ext/cargo-vendor/similar-2.7.0/LICENSE +201 -0
  72. data/ext/cargo-vendor/similar-2.7.0/Makefile +31 -0
  73. data/ext/cargo-vendor/similar-2.7.0/README.md +59 -0
  74. data/ext/cargo-vendor/similar-2.7.0/clippy.toml +1 -0
  75. data/ext/cargo-vendor/similar-2.7.0/examples/close-matches.rs +15 -0
  76. data/ext/cargo-vendor/similar-2.7.0/examples/large.rs +8 -0
  77. data/ext/cargo-vendor/similar-2.7.0/examples/nonstring.rs +13 -0
  78. data/ext/cargo-vendor/similar-2.7.0/examples/original-slices.rs +11 -0
  79. data/ext/cargo-vendor/similar-2.7.0/examples/patience.rs +48 -0
  80. data/ext/cargo-vendor/similar-2.7.0/examples/serde.rs +15 -0
  81. data/ext/cargo-vendor/similar-2.7.0/examples/terminal-inline.rs +60 -0
  82. data/ext/cargo-vendor/similar-2.7.0/examples/terminal.rs +20 -0
  83. data/ext/cargo-vendor/similar-2.7.0/examples/udiff.rs +24 -0
  84. data/ext/cargo-vendor/similar-2.7.0/scripts/wasmtime-wrapper.sh +4 -0
  85. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/capture.rs +117 -0
  86. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/compact.rs +351 -0
  87. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/hook.rs +178 -0
  88. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/lcs.rs +294 -0
  89. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/mod.rs +134 -0
  90. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/myers.rs +442 -0
  91. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/patience.rs +198 -0
  92. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/replace.rs +221 -0
  93. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__capture__capture_hook_grouping-2.snap +60 -0
  94. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__capture__capture_hook_grouping.snap +64 -0
  95. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__contiguous.snap +28 -0
  96. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__diff.snap +22 -0
  97. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__pat.snap +31 -0
  98. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__same.snap +12 -0
  99. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__contiguous.snap +28 -0
  100. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__deadline_reached.snap +22 -0
  101. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__diff.snap +22 -0
  102. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__pat.snap +31 -0
  103. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__patience__patience.snap +45 -0
  104. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__patience__patience_out_of_bounds_bug.snap +16 -0
  105. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/utils.rs +379 -0
  106. data/ext/cargo-vendor/similar-2.7.0/src/common.rs +185 -0
  107. data/ext/cargo-vendor/similar-2.7.0/src/deadline_support.rs +37 -0
  108. data/ext/cargo-vendor/similar-2.7.0/src/iter.rs +195 -0
  109. data/ext/cargo-vendor/similar-2.7.0/src/lib.rs +176 -0
  110. data/ext/cargo-vendor/similar-2.7.0/src/snapshots/similar__udiff__unified_diff.snap +25 -0
  111. data/ext/cargo-vendor/similar-2.7.0/src/snapshots/similar__udiff__unified_diff_newline_hint-2.snap +10 -0
  112. data/ext/cargo-vendor/similar-2.7.0/src/snapshots/similar__udiff__unified_diff_newline_hint.snap +11 -0
  113. data/ext/cargo-vendor/similar-2.7.0/src/text/abstraction.rs +446 -0
  114. data/ext/cargo-vendor/similar-2.7.0/src/text/inline.rs +342 -0
  115. data/ext/cargo-vendor/similar-2.7.0/src/text/mod.rs +792 -0
  116. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__captured_ops.snap +22 -0
  117. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__captured_word_ops.snap +202 -0
  118. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__char_diff.snap +39 -0
  119. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__inline__line_ops_inline.snap +126 -0
  120. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__inline__serde.snap +107 -0
  121. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__lifetimes_on_iter.snap +42 -0
  122. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__line_ops.snap +42 -0
  123. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__serde.snap +55 -0
  124. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__serde_ops.snap +38 -0
  125. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__unified_diff.snap +12 -0
  126. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__virtual_newlines.snap +32 -0
  127. data/ext/cargo-vendor/similar-2.7.0/src/text/utils.rs +55 -0
  128. data/ext/cargo-vendor/similar-2.7.0/src/types.rs +502 -0
  129. data/ext/cargo-vendor/similar-2.7.0/src/udiff.rs +359 -0
  130. data/ext/cargo-vendor/similar-2.7.0/src/utils.rs +412 -0
  131. data/ext/cargo-vendor/unicode-ident-1.0.19/.cargo-checksum.json +1 -1
  132. data/ext/code_ownership/Cargo.toml +1 -1
  133. data/ext/code_ownership/src/lib.rs +2 -2
  134. data/lib/code_ownership/private/file_path_finder.rb +19 -3
  135. data/lib/code_ownership/private/team_finder.rb +1 -2
  136. data/lib/code_ownership/version.rb +1 -1
  137. data/lib/code_ownership.rb +2 -0
  138. metadata +252 -152
  139. data/ext/cargo-vendor/codeowners-0.3.0/.cargo-checksum.json +0 -1
  140. data/ext/cargo-vendor/codeowners-0.3.0/tests/validate_files_test.rs +0 -144
  141. data/ext/cargo-vendor/unicode-ident-1.0.19/tests/fst/.gitignore +0 -1
  142. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/.github/workflows/audit.yml +0 -0
  143. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/.github/workflows/ci.yml +0 -0
  144. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/.github/workflows/dotslash-config.json +0 -0
  145. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/.rustfmt.toml +0 -0
  146. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/.rusty-hook.toml +0 -0
  147. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/dev/run_benchmarks_for_file.sh +0 -0
  148. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/dev/run_benchmarks_for_gv.sh +0 -0
  149. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/rust-toolchain.toml +0 -0
  150. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/cache/file.rs +0 -0
  151. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/cache/mod.rs +0 -0
  152. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/cache/noop.rs +0 -0
  153. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/common_test.rs +0 -0
  154. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/lib.rs +0 -0
  155. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/main.rs +0 -0
  156. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/codeowners_query.rs +0 -0
  157. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/file_owner_finder.rs +0 -0
  158. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/mapper/annotated_file_mapper.rs +0 -0
  159. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/mapper/directory_mapper.rs +0 -0
  160. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/mapper/escaper.rs +0 -0
  161. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/mapper/team_gem_mapper.rs +0 -0
  162. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/mapper/team_glob_mapper.rs +0 -0
  163. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/ownership/mapper/team_yml_mapper.rs +0 -0
  164. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/path_utils.rs +0 -0
  165. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/src/project_file_builder.rs +0 -0
  166. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/cache_test.rs +0 -0
  167. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/crosscheck_owners_test.rs +0 -0
  168. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
  169. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
  170. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
  171. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
  172. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
  173. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
  174. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
  175. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
  176. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
  177. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
  178. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
  179. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
  180. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
  181. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/.github/CODEOWNERS +0 -0
  182. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/.keep +0 -0
  183. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/config/code_ownership.yml +0 -0
  184. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/config/teams/design.yml +0 -0
  185. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/config/teams/frontend.yml +0 -0
  186. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +0 -0
  187. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +0 -0
  188. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/src/index.tsx +0 -0
  189. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +0 -0
  190. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/src/button.tsx +0 -0
  191. /data/ext/cargo-vendor/{codeowners-0.3.0/tests/fixtures/valid_project → codeowners-0.3.3/tests/fixtures/missing_github_team}/gems/pets/dog.rb +0 -0
  192. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
  193. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
  194. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/consumers/deep/nesting/nestdir/deep_file.rb +0 -0
  195. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
  196. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/services/.codeowner +0 -0
  197. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
  198. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/services/exciting/some_other_file.rb +0 -0
  199. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +0 -0
  200. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
  201. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +0 -0
  202. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/.github/CODEOWNERS +0 -0
  203. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/.ignore +0 -0
  204. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/config/code_ownership.yml +0 -0
  205. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
  206. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
  207. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
  208. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
  209. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
  210. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
  211. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
  212. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
  213. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
  214. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
  215. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +0 -0
  216. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
  217. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -0
  218. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
  219. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payments/foo/ownedby_payroll.rb +0 -0
  220. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
  221. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
  222. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
  223. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +0 -0
  224. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/views/foos/index.html.erb +0 -0
  225. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/views/foos/new.html.erb +0 -0
  226. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
  227. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
  228. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project/should_be_ignored/an_ignored_file.rb +0 -0
  229. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +0 -0
  230. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +0 -0
  231. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +0 -0
  232. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +0 -0
  233. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +0 -0
  234. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +0 -0
  235. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/package.json +0 -0
  236. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/src/picks/dp.tsx +0 -0
  237. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/package.json +0 -0
  238. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/src/item.tsx +0 -0
  239. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/package.json +0 -0
  240. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/field.tsx +0 -0
  241. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/fields/small.tsx +0 -0
  242. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/apollo/lib/apollo.rb +0 -0
  243. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/ivy/lib/ivy.rb +0 -0
  244. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/lager/lib/lager.rb +0 -0
  245. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/summit/lib/summit.rb +0 -0
  246. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/games/app/services/stats.rb +0 -0
  247. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +0 -0
  248. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/locations/app/services/capacity.rb +0 -0
  249. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +0 -0
  250. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/schedule/app/services/date.rb +0 -0
  251. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +0 -0
  252. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/lib/util.rb +0 -0
  253. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/services/play.rb +0 -0
  254. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +0 -0
  255. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/.codeowner +0 -0
  256. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/db/price.rb +0 -0
  257. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/entertainment.rb +0 -0
  258. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/play.rb +0 -0
  259. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/giants/services/play.rb +0 -0
  260. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/rockies/services/play.rb +0 -0
  261. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/invalid_project_structure_test.rs +0 -0
  262. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/multiple_directory_owners_test.rs +0 -0
  263. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/untracked_files_test.rs +0 -0
  264. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tests/valid_project_with_overrides_test.rs +0 -0
  265. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.3}/tmp/.gitkeep +0 -0
@@ -0,0 +1,98 @@
1
+ use std::error::Error;
2
+ use std::path::Path;
3
+
4
+ mod common;
5
+ use common::{build_run_config, git_add_all_files, setup_fixture_repo};
6
+
7
+ #[test]
8
+ fn test_run_config_executable_path_overrides_config_file() -> Result<(), Box<dyn Error>> {
9
+ use codeowners::runner::validate;
10
+
11
+ let fixture_root = Path::new("tests/fixtures/custom_executable_name");
12
+ let temp_dir = setup_fixture_repo(fixture_root);
13
+ let project_path = temp_dir.path();
14
+ git_add_all_files(project_path);
15
+
16
+ // This fixture has executable_name: "bin/codeownership validate" in config
17
+ // But we'll override it with RunConfig.executable_name
18
+
19
+ let mut run_config = build_run_config(project_path, ".github/CODEOWNERS");
20
+ run_config.executable_name = Some("my-wrapper-tool validate".to_string());
21
+
22
+ let result = validate(&run_config, vec![]);
23
+
24
+ // Should use "my-wrapper-tool validate" from RunConfig, NOT "bin/codeownership validate" from config
25
+ assert!(!result.validation_errors.is_empty(), "Expected validation errors but got none");
26
+ let error_msg = result.validation_errors.join("\n");
27
+ assert!(
28
+ error_msg.contains("Run `my-wrapper-tool validate`"),
29
+ "Expected error to contain 'my-wrapper-tool validate' but got: {}",
30
+ error_msg
31
+ );
32
+ assert!(
33
+ !error_msg.contains("bin/codeownership"),
34
+ "Error should not contain config file's executable_name when overridden"
35
+ );
36
+
37
+ Ok(())
38
+ }
39
+
40
+ #[test]
41
+ fn test_run_config_without_executable_path_uses_config_file() -> Result<(), Box<dyn Error>> {
42
+ use codeowners::runner::validate;
43
+
44
+ let fixture_root = Path::new("tests/fixtures/custom_executable_name");
45
+ let temp_dir = setup_fixture_repo(fixture_root);
46
+ let project_path = temp_dir.path();
47
+ git_add_all_files(project_path);
48
+
49
+ // This fixture has executable_name: "bin/codeownership validate" in config
50
+
51
+ let mut run_config = build_run_config(project_path, ".github/CODEOWNERS");
52
+ run_config.executable_name = None; // Explicitly no override
53
+
54
+ let result = validate(&run_config, vec![]);
55
+
56
+ // Should use "bin/codeownership validate" from config file
57
+ assert!(!result.validation_errors.is_empty(), "Expected validation errors but got none");
58
+ let error_msg = result.validation_errors.join("\n");
59
+ assert!(
60
+ error_msg.contains("Run `bin/codeownership validate`"),
61
+ "Expected error to contain 'bin/codeownership validate' but got: {}",
62
+ error_msg
63
+ );
64
+
65
+ Ok(())
66
+ }
67
+
68
+ #[test]
69
+ fn test_run_config_executable_path_overrides_default() -> Result<(), Box<dyn Error>> {
70
+ use codeowners::runner::validate;
71
+
72
+ let fixture_root = Path::new("tests/fixtures/default_executable_name");
73
+ let temp_dir = setup_fixture_repo(fixture_root);
74
+ let project_path = temp_dir.path();
75
+ git_add_all_files(project_path);
76
+
77
+ // This fixture has NO executable_name in config (uses default "codeowners generate")
78
+
79
+ let mut run_config = build_run_config(project_path, ".github/CODEOWNERS");
80
+ run_config.executable_name = Some("custom-command generate".to_string());
81
+
82
+ let result = validate(&run_config, vec![]);
83
+
84
+ // Should use "custom-command generate" from RunConfig, NOT default "codeowners generate"
85
+ assert!(!result.validation_errors.is_empty(), "Expected validation errors but got none");
86
+ let error_msg = result.validation_errors.join("\n");
87
+ assert!(
88
+ error_msg.contains("Run `custom-command generate`"),
89
+ "Expected error to contain 'custom-command generate' but got: {}",
90
+ error_msg
91
+ );
92
+ assert!(
93
+ !error_msg.contains("codeowners generate"),
94
+ "Error should not contain default when overridden"
95
+ );
96
+
97
+ Ok(())
98
+ }
@@ -35,9 +35,10 @@ team_file_glob:
35
35
 
36
36
  let run_config = RunConfig {
37
37
  project_root: temp_dir.path().to_path_buf(),
38
- codeowners_file_path: temp_dir.path().join(".github/CODEOWNERS").to_path_buf(),
38
+ codeowners_file_path: Some(temp_dir.path().join(".github/CODEOWNERS").to_path_buf()),
39
39
  config_path: temp_dir.path().join("config/code_ownership.yml").to_path_buf(),
40
40
  no_cache: true,
41
+ executable_name: None,
41
42
  };
42
43
 
43
44
  let file_owner = runner::file_owner_for_file(&run_config, "app/consumers/deep/nesting/nestdir/deep_file.rb")
@@ -60,9 +61,10 @@ fn test_teams_for_files_from_codeowners() {
60
61
  ];
61
62
  let run_config = RunConfig {
62
63
  project_root: project_root.to_path_buf(),
63
- codeowners_file_path: project_root.join(".github/CODEOWNERS").to_path_buf(),
64
+ codeowners_file_path: Some(project_root.join(".github/CODEOWNERS").to_path_buf()),
64
65
  config_path: project_root.join("config/code_ownership.yml").to_path_buf(),
65
66
  no_cache: true,
67
+ executable_name: None,
66
68
  };
67
69
  let teams =
68
70
  runner::teams_for_files_from_codeowners(&run_config, &file_paths.iter().map(|s| s.to_string()).collect::<Vec<String>>()).unwrap();
@@ -126,9 +128,10 @@ javascript_package_paths:
126
128
 
127
129
  let rc = RunConfig {
128
130
  project_root: td.path().to_path_buf(),
129
- codeowners_file_path: td.path().join(".github/CODEOWNERS"),
131
+ codeowners_file_path: Some(td.path().join(".github/CODEOWNERS")),
130
132
  config_path: td.path().join("config/code_ownership.yml"),
131
133
  no_cache: true,
134
+ executable_name: None,
132
135
  };
133
136
 
134
137
  // Ensure CODEOWNERS file matches generator output to avoid out-of-date errors
@@ -167,9 +170,10 @@ javascript_package_paths:
167
170
 
168
171
  let rc = RunConfig {
169
172
  project_root: td.path().to_path_buf(),
170
- codeowners_file_path: td.path().join(".github/CODEOWNERS"),
173
+ codeowners_file_path: Some(td.path().join(".github/CODEOWNERS")),
171
174
  config_path: td.path().join("config/code_ownership.yml"),
172
175
  no_cache: true,
176
+ executable_name: None,
173
177
  };
174
178
 
175
179
  let gv = runner::generate_and_validate(&rc, vec![], true);
@@ -241,7 +241,7 @@ fn test_for_file_same_team_multiple_ownerships() -> Result<(), Box<dyn Error>> {
241
241
  Team YML: config/teams/payroll.yml
242
242
  Description:
243
243
  - Owner annotation at the top of the file
244
- - Owner defined in `javascript/packages/PayrollFlow/package.json` with implicity owned glob: `javascript/packages/PayrollFlow/**/**`
244
+ - Owner defined in `javascript/packages/PayrollFlow/package.json` with implicitly owned glob: `javascript/packages/PayrollFlow/**/**`
245
245
  "}));
246
246
  Ok(())
247
247
  }
@@ -262,7 +262,7 @@ fn test_fast_for_file_same_team_multiple_ownerships() -> Result<(), Box<dyn Erro
262
262
  Team YML: config/teams/payroll.yml
263
263
  Description:
264
264
  - Owner annotation at the top of the file
265
- - Owner defined in `javascript/packages/PayrollFlow/package.json` with implicity owned glob: `javascript/packages/PayrollFlow/**/**`
265
+ - Owner defined in `javascript/packages/PayrollFlow/package.json` with implicitly owned glob: `javascript/packages/PayrollFlow/**/**`
266
266
  "}));
267
267
  Ok(())
268
268
  }
@@ -283,7 +283,7 @@ fn test_for_file_with_2_ownerships() -> Result<(), Box<dyn Error>> {
283
283
  Team YML: config/teams/payroll.yml
284
284
  Description:
285
285
  - Owner annotation at the top of the file
286
- - Owner defined in `javascript/packages/PayrollFlow/package.json` with implicity owned glob: `javascript/packages/PayrollFlow/**/**`
286
+ - Owner defined in `javascript/packages/PayrollFlow/package.json` with implicitly owned glob: `javascript/packages/PayrollFlow/**/**`
287
287
  "}));
288
288
 
289
289
  Ok(())
@@ -0,0 +1,378 @@
1
+ use assert_cmd::prelude::*;
2
+ use predicates::prelude::*;
3
+ use std::{error::Error, process::Command};
4
+
5
+ mod common;
6
+
7
+ use common::*;
8
+
9
+ #[test]
10
+ fn test_validate_with_owned_files() -> Result<(), Box<dyn Error>> {
11
+ run_codeowners(
12
+ "valid_project",
13
+ &["validate", "ruby/app/models/payroll.rb", "ruby/app/models/bank_account.rb"],
14
+ true,
15
+ OutputStream::Stdout,
16
+ predicate::eq(""),
17
+ )?;
18
+
19
+ Ok(())
20
+ }
21
+
22
+ #[test]
23
+ fn test_validate_with_unowned_file() -> Result<(), Box<dyn Error>> {
24
+ run_codeowners(
25
+ "valid_project",
26
+ &["validate", "ruby/app/unowned.rb"],
27
+ false,
28
+ OutputStream::Stdout,
29
+ predicate::str::contains("ruby/app/unowned.rb").and(predicate::str::contains("Unowned")),
30
+ )?;
31
+
32
+ Ok(())
33
+ }
34
+
35
+ #[test]
36
+ fn test_validate_with_mixed_files() -> Result<(), Box<dyn Error>> {
37
+ run_codeowners(
38
+ "valid_project",
39
+ &["validate", "ruby/app/models/payroll.rb", "ruby/app/unowned.rb"],
40
+ false,
41
+ OutputStream::Stdout,
42
+ predicate::str::contains("ruby/app/unowned.rb").and(predicate::str::contains("Unowned")),
43
+ )?;
44
+
45
+ Ok(())
46
+ }
47
+
48
+ #[test]
49
+ fn test_validate_with_no_files() -> Result<(), Box<dyn Error>> {
50
+ // Existing behavior - validates entire project
51
+ run_codeowners("valid_project", &["validate"], true, OutputStream::Stdout, predicate::eq(""))?;
52
+
53
+ Ok(())
54
+ }
55
+
56
+ #[test]
57
+ fn test_generate_and_validate_with_owned_files() -> Result<(), Box<dyn Error>> {
58
+ let fixture_root = std::path::Path::new("tests/fixtures/valid_project");
59
+ let temp_dir = setup_fixture_repo(fixture_root);
60
+ let project_root = temp_dir.path();
61
+ git_add_all_files(project_root);
62
+
63
+ let codeowners_path = project_root.join("tmp/CODEOWNERS");
64
+
65
+ Command::cargo_bin("codeowners")?
66
+ .arg("--project-root")
67
+ .arg(project_root)
68
+ .arg("--codeowners-file-path")
69
+ .arg(&codeowners_path)
70
+ .arg("--no-cache")
71
+ .arg("generate-and-validate")
72
+ .arg("ruby/app/models/payroll.rb")
73
+ .arg("ruby/app/models/bank_account.rb")
74
+ .assert()
75
+ .success();
76
+
77
+ Ok(())
78
+ }
79
+
80
+ #[test]
81
+ fn test_generate_and_validate_with_unowned_file() -> Result<(), Box<dyn Error>> {
82
+ let fixture_root = std::path::Path::new("tests/fixtures/valid_project");
83
+ let temp_dir = setup_fixture_repo(fixture_root);
84
+ let project_root = temp_dir.path();
85
+ git_add_all_files(project_root);
86
+
87
+ let codeowners_path = project_root.join("tmp/CODEOWNERS");
88
+
89
+ Command::cargo_bin("codeowners")?
90
+ .arg("--project-root")
91
+ .arg(project_root)
92
+ .arg("--codeowners-file-path")
93
+ .arg(&codeowners_path)
94
+ .arg("--no-cache")
95
+ .arg("generate-and-validate")
96
+ .arg("ruby/app/unowned.rb")
97
+ .assert()
98
+ .failure()
99
+ .stdout(predicate::str::contains("ruby/app/unowned.rb"))
100
+ .stdout(predicate::str::contains("Unowned"));
101
+
102
+ Ok(())
103
+ }
104
+
105
+ #[test]
106
+ fn test_validate_with_absolute_path() -> Result<(), Box<dyn Error>> {
107
+ let fixture_root = std::path::Path::new("tests/fixtures/valid_project");
108
+ let temp_dir = setup_fixture_repo(fixture_root);
109
+ let project_root = temp_dir.path();
110
+ git_add_all_files(project_root);
111
+
112
+ let file_absolute_path = project_root.join("ruby/app/models/payroll.rb").canonicalize()?;
113
+
114
+ Command::cargo_bin("codeowners")?
115
+ .arg("--project-root")
116
+ .arg(project_root)
117
+ .arg("--no-cache")
118
+ .arg("validate")
119
+ .arg(file_absolute_path.to_str().unwrap())
120
+ .assert()
121
+ .success();
122
+
123
+ Ok(())
124
+ }
125
+
126
+ #[test]
127
+ fn test_validate_only_checks_codeowners_file() -> Result<(), Box<dyn Error>> {
128
+ // This test demonstrates that `validate` with files only checks the CODEOWNERS file
129
+ // It does NOT check file annotations or other ownership sources
130
+ //
131
+ // If a file has an annotation but is missing from CODEOWNERS, `validate` will report it as unowned
132
+ // This is why `generate-and-validate` should be used for accuracy
133
+
134
+ // ruby/app/models/bank_account.rb has @team Payments annotation and is in CODEOWNERS
135
+ run_codeowners(
136
+ "valid_project",
137
+ &["validate", "ruby/app/models/bank_account.rb"],
138
+ true,
139
+ OutputStream::Stdout,
140
+ predicate::eq(""),
141
+ )?;
142
+
143
+ Ok(())
144
+ }
145
+
146
+ #[test]
147
+ fn test_validate_files_respects_owned_globs_with_excluded_extensions() -> Result<(), Box<dyn Error>> {
148
+ // Validates that files not matching owned_globs are silently skipped when
149
+ // validate is called with an explicit file list.
150
+ //
151
+ // valid_project owned_globs: "{gems,config,javascript,ruby,components}/**/*.{rb,tsx,erb}"
152
+ // .rbi files (Sorbet interface files) do NOT match this pattern and should be filtered.
153
+
154
+ // Setup: Create a temporary copy of valid_project fixture
155
+ let fixture_root = std::path::Path::new("tests/fixtures/valid_project");
156
+ let temp_dir = setup_fixture_repo(fixture_root);
157
+ let project_root = temp_dir.path();
158
+
159
+ // Create .rbi files (Sorbet interface files) that do NOT match owned_globs
160
+ // These files should be ignored by validate when specified in the file list
161
+ let bank_account_rbi = project_root.join("ruby/app/models/bank_account.rbi");
162
+ let payroll_rbi = project_root.join("ruby/app/models/payroll.rbi");
163
+
164
+ std::fs::write(
165
+ &bank_account_rbi,
166
+ "# typed: strict\n# RBI file for BankAccount\nclass BankAccount; end\n",
167
+ )?;
168
+ std::fs::write(&payroll_rbi, "# typed: strict\n# RBI file for Payroll\nclass Payroll; end\n")?;
169
+
170
+ git_add_all_files(project_root);
171
+
172
+ // Step 1: Generate CODEOWNERS
173
+ // This should ONLY include .rb files (not .rbi) because .rbi doesn't match owned_globs
174
+ let codeowners_path = project_root.join("tmp/CODEOWNERS");
175
+ Command::cargo_bin("codeowners")?
176
+ .arg("--project-root")
177
+ .arg(project_root)
178
+ .arg("--codeowners-file-path")
179
+ .arg(&codeowners_path)
180
+ .arg("--no-cache")
181
+ .arg("generate")
182
+ .assert()
183
+ .success();
184
+
185
+ // Verify: CODEOWNERS contains .rb files but NOT .rbi files
186
+ let codeowners_content = std::fs::read_to_string(&codeowners_path)?;
187
+ assert!(
188
+ codeowners_content.contains("bank_account.rb"),
189
+ "CODEOWNERS should contain .rb files (they match owned_globs)"
190
+ );
191
+ assert!(
192
+ !codeowners_content.contains("bank_account.rbi"),
193
+ "CODEOWNERS should NOT contain .rbi files (they don't match owned_globs)"
194
+ );
195
+
196
+ // Step 2: Run validate with BOTH .rb and .rbi files in the list.
197
+ // .rbi files should be silently filtered; only .rb files validated; command succeeds.
198
+ Command::cargo_bin("codeowners")?
199
+ .arg("--project-root")
200
+ .arg(project_root)
201
+ .arg("--codeowners-file-path")
202
+ .arg(&codeowners_path)
203
+ .arg("--no-cache")
204
+ .arg("validate")
205
+ // Mix .rb and .rbi files in the argument list
206
+ .arg("ruby/app/models/bank_account.rb") // Should be validated (matches owned_globs)
207
+ .arg("ruby/app/models/bank_account.rbi") // Should be SKIPPED (doesn't match)
208
+ .arg("ruby/app/models/payroll.rb") // Should be validated (matches owned_globs)
209
+ .arg("ruby/app/models/payroll.rbi") // Should be SKIPPED (doesn't match)
210
+ .assert()
211
+ .success()
212
+ .stdout(predicate::eq(""));
213
+
214
+ Ok(())
215
+ }
216
+
217
+ // ============================================================================
218
+ // GLOB FILTERING TESTS: Verify validate with files respects owned_globs
219
+ // ============================================================================
220
+ //
221
+ // These tests ensure that when validate is called with explicit file paths,
222
+ // it correctly filters files based on owned_globs configuration. Files that
223
+ // don't match owned_globs should be silently skipped, not reported as unowned.
224
+
225
+ #[test]
226
+ fn test_validate_filters_multiple_non_matching_extensions() -> Result<(), Box<dyn Error>> {
227
+ // Test that various file types not in owned_globs are filtered out
228
+ // valid_project owned_globs: "{gems,config,javascript,ruby,components}/**/*.{rb,tsx,erb}"
229
+ let fixture_root = std::path::Path::new("tests/fixtures/valid_project");
230
+ let temp_dir = setup_fixture_repo(fixture_root);
231
+ let project_root = temp_dir.path();
232
+
233
+ // Create files with extensions NOT in owned_globs
234
+ std::fs::write(project_root.join("ruby/app/models/test.rbi"), "# Sorbet RBI file")?;
235
+ std::fs::write(project_root.join("ruby/app/models/test.md"), "# Markdown doc")?;
236
+ std::fs::write(project_root.join("ruby/app/models/test.txt"), "Plain text")?;
237
+ std::fs::write(project_root.join("ruby/app/models/test.json"), "{}")?;
238
+
239
+ git_add_all_files(project_root);
240
+
241
+ let codeowners_path = project_root.join("tmp/CODEOWNERS");
242
+
243
+ // Generate CODEOWNERS (will only include .rb, .tsx, .erb files)
244
+ Command::cargo_bin("codeowners")?
245
+ .arg("--project-root")
246
+ .arg(project_root)
247
+ .arg("--codeowners-file-path")
248
+ .arg(&codeowners_path)
249
+ .arg("--no-cache")
250
+ .arg("generate")
251
+ .assert()
252
+ .success();
253
+
254
+ // Validate with a mix of matching and non-matching files
255
+ // All non-matching should be filtered, matching ones should succeed
256
+ Command::cargo_bin("codeowners")?
257
+ .arg("--project-root")
258
+ .arg(project_root)
259
+ .arg("--codeowners-file-path")
260
+ .arg(&codeowners_path)
261
+ .arg("--no-cache")
262
+ .arg("validate")
263
+ .arg("ruby/app/models/payroll.rb") // matches owned_globs, is owned
264
+ .arg("ruby/app/models/test.rbi") // doesn't match owned_globs
265
+ .arg("ruby/app/models/test.md") // doesn't match owned_globs
266
+ .arg("ruby/app/models/test.txt") // doesn't match owned_globs
267
+ .arg("ruby/app/models/test.json") // doesn't match owned_globs
268
+ .assert()
269
+ .success()
270
+ .stdout(predicate::eq(""));
271
+
272
+ Ok(())
273
+ }
274
+
275
+ #[test]
276
+ fn test_validate_filters_files_outside_owned_directories() -> Result<(), Box<dyn Error>> {
277
+ // Test that files in directories not matching owned_globs are filtered
278
+ // valid_project owned_globs: "{gems,config,javascript,ruby,components}/**/*.{rb,tsx,erb}"
279
+ let fixture_root = std::path::Path::new("tests/fixtures/valid_project");
280
+ let temp_dir = setup_fixture_repo(fixture_root);
281
+ let project_root = temp_dir.path();
282
+
283
+ // Create .rb files OUTSIDE the owned directories
284
+ std::fs::create_dir_all(project_root.join("scripts"))?;
285
+ std::fs::write(project_root.join("scripts/deploy.rb"), "# Deploy script")?;
286
+ std::fs::create_dir_all(project_root.join("bin"))?;
287
+ std::fs::write(project_root.join("bin/run.rb"), "# Run script")?;
288
+
289
+ git_add_all_files(project_root);
290
+
291
+ let codeowners_path = project_root.join("tmp/CODEOWNERS");
292
+
293
+ // Generate CODEOWNERS
294
+ Command::cargo_bin("codeowners")?
295
+ .arg("--project-root")
296
+ .arg(project_root)
297
+ .arg("--codeowners-file-path")
298
+ .arg(&codeowners_path)
299
+ .arg("--no-cache")
300
+ .arg("generate")
301
+ .assert()
302
+ .success();
303
+
304
+ // Validate with files both inside and outside owned directories
305
+ Command::cargo_bin("codeowners")?
306
+ .arg("--project-root")
307
+ .arg(project_root)
308
+ .arg("--codeowners-file-path")
309
+ .arg(&codeowners_path)
310
+ .arg("--no-cache")
311
+ .arg("validate")
312
+ .arg("ruby/app/models/payroll.rb") // inside ruby/, matches owned_globs
313
+ .arg("scripts/deploy.rb") // outside owned dirs, filtered
314
+ .arg("bin/run.rb") // outside owned dirs, filtered
315
+ .assert()
316
+ .success()
317
+ .stdout(predicate::eq(""));
318
+
319
+ Ok(())
320
+ }
321
+
322
+ #[test]
323
+ fn test_validate_respects_unowned_globs() -> Result<(), Box<dyn Error>> {
324
+ // Test that files matching unowned_globs are filtered out even if they match owned_globs
325
+ let fixture_root = std::path::Path::new("tests/fixtures/valid_project");
326
+ let temp_dir = setup_fixture_repo(fixture_root);
327
+ let project_root = temp_dir.path();
328
+
329
+ // Read and modify the config to add unowned_globs
330
+ let config_path = project_root.join("config/code_ownership.yml");
331
+ let config_content = std::fs::read_to_string(&config_path)?;
332
+ let updated_config = config_content.replace("unowned_globs:", "unowned_globs:\n - ruby/app/models/ignored_*.rb");
333
+ std::fs::write(&config_path, updated_config)?;
334
+
335
+ // Create a file that matches owned_globs but also matches unowned_globs
336
+ std::fs::write(
337
+ project_root.join("ruby/app/models/ignored_test.rb"),
338
+ "# This file should be ignored via unowned_globs",
339
+ )?;
340
+
341
+ git_add_all_files(project_root);
342
+
343
+ let codeowners_path = project_root.join("tmp/CODEOWNERS");
344
+
345
+ // Generate CODEOWNERS (ignored_test.rb should NOT be included)
346
+ Command::cargo_bin("codeowners")?
347
+ .arg("--project-root")
348
+ .arg(project_root)
349
+ .arg("--codeowners-file-path")
350
+ .arg(&codeowners_path)
351
+ .arg("--no-cache")
352
+ .arg("generate")
353
+ .assert()
354
+ .success();
355
+
356
+ // Verify the ignored file is NOT in CODEOWNERS
357
+ let codeowners_content = std::fs::read_to_string(&codeowners_path)?;
358
+ assert!(
359
+ !codeowners_content.contains("ignored_test.rb"),
360
+ "ignored_test.rb should not be in CODEOWNERS"
361
+ );
362
+
363
+ // Validate with the ignored file - should be filtered by unowned_globs
364
+ Command::cargo_bin("codeowners")?
365
+ .arg("--project-root")
366
+ .arg(project_root)
367
+ .arg("--codeowners-file-path")
368
+ .arg(&codeowners_path)
369
+ .arg("--no-cache")
370
+ .arg("validate")
371
+ .arg("ruby/app/models/payroll.rb") // owned, should validate
372
+ .arg("ruby/app/models/ignored_test.rb") // matches unowned_globs, should be filtered
373
+ .assert()
374
+ .success()
375
+ .stdout(predicate::eq(""));
376
+
377
+ Ok(())
378
+ }
@@ -0,0 +1,2 @@
1
+ [target.wasm32-wasip1]
2
+ runner = ["./scripts/wasmtime-wrapper.sh"]
@@ -0,0 +1 @@
1
+ {"files":{".cargo/config.toml":"c6d4e0a672089d2814b9d5efa9f76c23d93c6ccda82a5a1554c60835ca6964e3",".cargo_vcs_info.json":"9e85b352e3afb3496a76e5f5840e8e2d25d6c1495f6fde504fc251608eea43b5",".github/FUNDING.yml":"73c9566ed57dc7c3a71f1a97fd0e81f85512f7954d0ac3228de83678bf170bc8",".github/workflows/clippy.yml":"12564ec32b05830fbbc8f521cee9fd55528520a734bd3443efe695c5a21914cd",".github/workflows/rustfmt.yml":"5d774e46d7100debdcff08cd20fa86d124671b049b740f083da6a2f1172f0c00",".github/workflows/tests.yml":"b976c8a14e9cb6d2eb33c34ef6fd3af5bf097ea1f7e9d67c7c97320faba7fc59",".vscode/settings.json":"cf47398c47ec6632b0d3a2e841aee7e842718e0a6b3d82196118a21041688fbb","CHANGELOG.md":"ff18c581bbbc07177b6431edb44917fa956b19f56b98eda468e52bd17badfe87","Cargo.lock":"00743250861566b2500bead9cea368e091ac881b4e995614b72352d7ed02eb84","Cargo.lock.msrv":"9e5ffd505c055442f7a8163ac4c802de72302365f2fad8ba01b017f50eb14903","Cargo.toml":"18b0354dc4d0819d996beb4f3dc85abff37b095f41c86dfd0e2c5f6827dbefe4","Cargo.toml.orig":"4d2bdff04cfde6217f3033e105dbb9d15ef49fe497cebfe018b9de88cd128804","LICENSE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","Makefile":"be0b8112c890553c07ba571b2ae0481703034bee4e768008d583c006f118ebfe","README.md":"ed4e7f5f1d3fe7b5ebf08377aa8ae385a1073b05687741d9691956d2726284d5","clippy.toml":"e1e95839ba8e8bbf07f99ff49e2f151b9048c7981301a5480571842bbaf78ca2","examples/close-matches.rs":"9c168c894453f7de5877955ea55362ed4e6ef637dd6c4b176645614258a29998","examples/large.rs":"6f46e6fb7aac8e043702a921c0615c17aceb2b0ea6d943210ab1d8e747c23da7","examples/nonstring.rs":"4c5765d66cafd6e81d4e678fc202faf1e220352e29d0715097ad3cb19d2d95c2","examples/original-slices.rs":"d2d0e3c04e04236b5d186622d3f587706c660d236fba00a38f06587823a01878","examples/patience.rs":"8ba9ed249e2ab531d6140e1b48314e392ab67387661d9c6268b1471c97edc1fb","examples/serde.rs":"d6f180d960c0ff2df0a1facec71310d4d8f8ba37d1b17639ad12d3b2f484415a","examples/terminal-inline.rs":"ebbd9b2194390dd6c4ced7693c7521ca64aa4e008a2ad98dbec8b35208a75ece","examples/terminal.rs":"bfffd6d1e930158e14732eec4fd0f62bce982c0dada7b62763057cef77fd4219","examples/udiff.rs":"8da4fd68e210358ae3fbe6a16731aa155c634096843c4a98b91a4b1284e5b7f1","scripts/wasmtime-wrapper.sh":"d5f13588eb2fe5432343b099eb52e647b02e7cafc4164cb1384ff22af4069330","src/algorithms/capture.rs":"6c1358baed6c927f86b20600aab9cccbce5b3b6ec92d7b9e6149f346ebab4794","src/algorithms/compact.rs":"086fe409130564fab3b0f809166255e2508326095b0c3d6c7b72c08fa5829b62","src/algorithms/hook.rs":"51459faf43c606d9b308723ca31d7118777e24b9afe1e9a98bc2ba90d6990799","src/algorithms/lcs.rs":"b2517e68922bb756f4e99cdfe30c50c631fdf5857234d3145141d6d4ad58d682","src/algorithms/mod.rs":"1a134d38c26c2a614fc83bc9fa53ff6e6b1372ba4e0e9d91ba8bfba4db47923d","src/algorithms/myers.rs":"f48c39fd2f5092c97677607b2ea48241a774b30b951df01ca1e6d8d440dad25c","src/algorithms/patience.rs":"f609f2f38105a1db308247a96c7353c3495cb6b476337a81ade5260d49d15a69","src/algorithms/replace.rs":"88c3a4ca67c722d9886d6d21f6b174b5ce2b76b3a302f25c36c4dcdeda31f4e9","src/algorithms/snapshots/similar__algorithms__capture__capture_hook_grouping-2.snap":"accbd58fc63fd972c30a1060501ea3d1e51f0bb17d35b71cff98eab1358c8d81","src/algorithms/snapshots/similar__algorithms__capture__capture_hook_grouping.snap":"16fe0debab61a2be05aeee7081b3f1ce54b055560fc641672374ba23d316c9a1","src/algorithms/snapshots/similar__algorithms__lcs__contiguous.snap":"81f60b2b1939c503aaa2861b1e2fa62ff6a29202d110e48324a62d13dac7b68c","src/algorithms/snapshots/similar__algorithms__lcs__diff.snap":"5f34e634b931b5b9af25328e0780b5e01c8b26c66424774eb951b7a9f13728b6","src/algorithms/snapshots/similar__algorithms__lcs__pat.snap":"791647906f36a1effdeb5bde5625b5188447439ba234d93b64e75b1d87f13ab3","src/algorithms/snapshots/similar__algorithms__lcs__same.snap":"99d00e41fa28c62340b0d5492d7708a605accb4cc1ddeab040d0fc5653ed37c1","src/algorithms/snapshots/similar__algorithms__myers__contiguous.snap":"a65c392c570d732b3a26e1b06022de9fa17127ce5b341ce9b1d91f9e3c435438","src/algorithms/snapshots/similar__algorithms__myers__deadline_reached.snap":"fa7d71f326a1650e10604227358a303f4ecc7989e46b8b9a4d1ae345044183ce","src/algorithms/snapshots/similar__algorithms__myers__diff.snap":"28549b646e1395d57b9c9d9c359b890bd68be4f4df83800ac9680398c5cc5181","src/algorithms/snapshots/similar__algorithms__myers__pat.snap":"90585b8385a3aa073faecf90cac30360389a51d28030b99e819483f016be7f34","src/algorithms/snapshots/similar__algorithms__patience__patience.snap":"1ff007b11ebd3f7781781145b37eba9d38e4e2d87e337dd9c669c7e806b414e3","src/algorithms/snapshots/similar__algorithms__patience__patience_out_of_bounds_bug.snap":"21252d8b50186f226cadab72a1bd023ca40170889267474c6bc23f979d20aa3b","src/algorithms/utils.rs":"cd92370612672c32d77f6470bf900b89ab34dad464157e7abc47c183b5b3c506","src/common.rs":"97cdadc3f0473f9ad482c3a598c3f4073a2960a88b486fe51c256de96b898c00","src/deadline_support.rs":"44402d6410930d290f8d306ec8d2c07bc9f41a1aa095ab8f45ad1ac3accd832a","src/iter.rs":"f79fdc7193d2f80139d51eb4bc4703d69065dc63fbb9d9f1edee714cc370fa5f","src/lib.rs":"49701d3305f29b3aeba88b361dd3e40497c4db90a02dfe61b8eaaafee955e75a","src/snapshots/similar__udiff__unified_diff.snap":"228b01fd9d21522459f420fe4f7e663cf187903456e050dda6ab2c60dce5828c","src/snapshots/similar__udiff__unified_diff_newline_hint-2.snap":"0b699a1e6488df68eae42e682656f39f74f120245134829f7536aa0f2b84c4f9","src/snapshots/similar__udiff__unified_diff_newline_hint.snap":"97c2e42a6d1b7184f0d97dff02807f6b78c159de1df6bc616b0842db13eb945c","src/text/abstraction.rs":"683aa28bd70f622d260a8eef347a66ecfad0497ffabd55c78a9c3fe2dd64554d","src/text/inline.rs":"12623843252812052687648a7754e2cd2d592251c2d3060cb10be32fac7ecc27","src/text/mod.rs":"135fb3ee9f8f97fcb3fb695d6941fa004b419d0ce59737e636dd7f0aee9017af","src/text/snapshots/similar__text__captured_ops.snap":"e998dccc8d267f1aa20a202c01417945147dbf6f76f80f58a7cd73affcfa0328","src/text/snapshots/similar__text__captured_word_ops.snap":"369f37aa2e5fa62427fccdc5c06214ed45872645c6234388872d0697c39a17e6","src/text/snapshots/similar__text__char_diff.snap":"b0f22a6348287309bab42e0bcdb1006506bac12bf5d40beed927844f7d13ad2d","src/text/snapshots/similar__text__inline__line_ops_inline.snap":"a753d6c8e82819eb82974c3ab0b86ef952258a987ae40a52e9d7ea105c3c4c0c","src/text/snapshots/similar__text__inline__serde.snap":"b16f70957514ba6bbbcd16c8276bade62be896792f4cf410ca4170ade8e49c53","src/text/snapshots/similar__text__lifetimes_on_iter.snap":"8e61bf92359657a3e8473bffb2e0d15f0236fd2060b240b97ada7d06315a51d1","src/text/snapshots/similar__text__line_ops.snap":"40a2ee5e1eb901cb9409179975f71ba7dc99484ad5b955948d3bd80b6e2e77d3","src/text/snapshots/similar__text__serde.snap":"1b3f1c45f8efa5d598d362c5a34338f7434d1fa412d51398bd933e7d9b7157d3","src/text/snapshots/similar__text__serde_ops.snap":"07f94abf19f845a31a2ffc4635a9e8c12d767cb8a708636f317c3d354753fb22","src/text/snapshots/similar__text__unified_diff.snap":"1d7f48735fc21145425f5c975dfbbe3700db731847dad7c5d5bc17422fc3f424","src/text/snapshots/similar__text__virtual_newlines.snap":"5902123c4c4ec6250bdef56b1108ee0e8be1720d3f6dd9e4141a260cb0428b3e","src/text/utils.rs":"14310f63fff6679a4bcb323caba8da2806d1eb519613d1cfaf2eff564978f398","src/types.rs":"227a9d2a67cd6c5fb2daf824b4d264f312d6b296d43741ae4ef6760c96d7229f","src/udiff.rs":"9434f20154660ba520169c30ac2bd6ef03e83101cea24afd73af6a844950c88f","src/utils.rs":"2e8353660ce83ff07810109b95b7ff3f137e518dbbf8f94e1e309ae40d62c224"},"package":"bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa"}
@@ -0,0 +1,6 @@
1
+ {
2
+ "git": {
3
+ "sha1": "28c146b628119065e9a4dae569eaa570a4632c17"
4
+ },
5
+ "path_in_vcs": ""
6
+ }
@@ -0,0 +1 @@
1
+ github: [mitsuhiko]
@@ -0,0 +1,16 @@
1
+ name: Clippy
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+
9
+ steps:
10
+ - uses: actions/checkout@v3
11
+ - uses: dtolnay/rust-toolchain@master
12
+ with:
13
+ toolchain: stable
14
+ components: clippy, rustfmt
15
+ - name: Run clippy
16
+ run: make lint
@@ -0,0 +1,16 @@
1
+ name: Rustfmt
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+
9
+ steps:
10
+ - uses: actions/checkout@v3
11
+ - uses: dtolnay/rust-toolchain@master
12
+ with:
13
+ toolchain: stable
14
+ components: clippy, rustfmt
15
+ - name: Run rustfmt
16
+ run: make format-check
@@ -0,0 +1,49 @@
1
+ name: Tests
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build-latest:
7
+ name: Test on Latest
8
+ runs-on: ubuntu-latest
9
+
10
+ steps:
11
+ - uses: actions/checkout@v3
12
+ - uses: dtolnay/rust-toolchain@master
13
+ with:
14
+ toolchain: stable
15
+ - name: Test
16
+ run: make test
17
+
18
+ build-stable:
19
+ name: Build on 1.60.0
20
+ runs-on: ubuntu-latest
21
+
22
+ steps:
23
+ - uses: actions/checkout@v3
24
+ - uses: dtolnay/rust-toolchain@master
25
+ with:
26
+ toolchain: 1.60.0
27
+ - name: Use Cargo.lock.msrv
28
+ run: cp Cargo.lock.msrv Cargo.lock
29
+ - name: Test
30
+ run: cargo check --all-features
31
+
32
+ test-wasi:
33
+ name: Test on WASI
34
+ runs-on: ubuntu-latest
35
+
36
+ steps:
37
+ - uses: actions/checkout@v4
38
+ - uses: dtolnay/rust-toolchain@master
39
+ with:
40
+ toolchain: stable
41
+ targets: wasm32-wasip1
42
+ - uses: Swatinem/rust-cache@v2
43
+ - name: Install WasmTime
44
+ run: |
45
+ curl -LO https://github.com/bytecodealliance/wasmtime/releases/download/v13.0.0/wasmtime-v13.0.0-x86_64-linux.tar.xz
46
+ tar xvf wasmtime-v13.0.0-x86_64-linux.tar.xz
47
+ echo `pwd`/wasmtime-v13.0.0-x86_64-linux >> $GITHUB_PATH
48
+ - name: Test
49
+ run: make wasi-test