code_ownership 2.1.1 → 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 (192) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config +2 -2
  3. data/Cargo.lock +2 -2
  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/unicode-ident-1.0.19/.cargo-checksum.json +1 -1
  57. data/ext/code_ownership/Cargo.toml +1 -1
  58. data/ext/code_ownership/src/lib.rs +2 -2
  59. data/lib/code_ownership/private/file_path_finder.rb +19 -3
  60. data/lib/code_ownership/private/team_finder.rb +1 -2
  61. data/lib/code_ownership/version.rb +1 -1
  62. data/lib/code_ownership.rb +2 -0
  63. metadata +178 -152
  64. data/ext/cargo-vendor/codeowners-0.3.0/.cargo-checksum.json +0 -1
  65. data/ext/cargo-vendor/codeowners-0.3.0/tests/validate_files_test.rs +0 -144
  66. data/ext/cargo-vendor/unicode-ident-1.0.19/tests/fst/.gitignore +0 -1
  67. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/audit.yml +0 -0
  68. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/ci.yml +0 -0
  69. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/dotslash-config.json +0 -0
  70. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.rustfmt.toml +0 -0
  71. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.rusty-hook.toml +0 -0
  72. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/dev/run_benchmarks_for_file.sh +0 -0
  73. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/dev/run_benchmarks_for_gv.sh +0 -0
  74. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/rust-toolchain.toml +0 -0
  75. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/file.rs +0 -0
  76. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/mod.rs +0 -0
  77. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/noop.rs +0 -0
  78. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/common_test.rs +0 -0
  79. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/lib.rs +0 -0
  80. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/main.rs +0 -0
  81. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/codeowners_query.rs +0 -0
  82. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_generator.rs +0 -0
  83. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_owner_finder.rs +0 -0
  84. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/annotated_file_mapper.rs +0 -0
  85. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/directory_mapper.rs +0 -0
  86. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/escaper.rs +0 -0
  87. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_gem_mapper.rs +0 -0
  88. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_glob_mapper.rs +0 -0
  89. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_yml_mapper.rs +0 -0
  90. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/path_utils.rs +0 -0
  91. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project_file_builder.rs +0 -0
  92. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/cache_test.rs +0 -0
  93. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/crosscheck_owners_test.rs +0 -0
  94. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
  95. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
  96. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
  97. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
  98. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
  99. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
  100. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
  101. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
  102. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
  103. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
  104. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
  105. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
  106. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
  107. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/.github/CODEOWNERS +0 -0
  108. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/.keep +0 -0
  109. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/code_ownership.yml +0 -0
  110. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/teams/design.yml +0 -0
  111. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/teams/frontend.yml +0 -0
  112. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +0 -0
  113. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +0 -0
  114. /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
  115. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +0 -0
  116. /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
  117. /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
  118. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
  119. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
  120. /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
  121. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
  122. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/.codeowner +0 -0
  123. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
  124. /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
  125. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +0 -0
  126. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
  127. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +0 -0
  128. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/.github/CODEOWNERS +0 -0
  129. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/.ignore +0 -0
  130. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/code_ownership.yml +0 -0
  131. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
  132. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
  133. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
  134. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
  135. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
  136. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
  137. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
  138. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
  139. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
  140. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
  141. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +0 -0
  142. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
  143. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -0
  144. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
  145. /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
  146. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
  147. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
  148. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
  149. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +0 -0
  150. /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
  151. /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
  152. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
  153. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
  154. /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
  155. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +0 -0
  156. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +0 -0
  157. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +0 -0
  158. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +0 -0
  159. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +0 -0
  160. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +0 -0
  161. /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
  162. /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
  163. /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
  164. /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
  165. /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
  166. /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
  167. /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
  168. /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
  169. /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
  170. /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
  171. /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
  172. /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
  173. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +0 -0
  174. /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
  175. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +0 -0
  176. /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
  177. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +0 -0
  178. /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
  179. /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
  180. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +0 -0
  181. /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
  182. /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
  183. /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
  184. /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
  185. /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
  186. /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
  187. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/invalid_project_structure_test.rs +0 -0
  188. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/invalid_project_test.rs +0 -0
  189. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/multiple_directory_owners_test.rs +0 -0
  190. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/untracked_files_test.rs +0 -0
  191. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/valid_project_with_overrides_test.rs +0 -0
  192. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tmp/.gitkeep +0 -0
@@ -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
+ }
@@ -1 +1 @@
1
- {"files":{".cargo_vcs_info.json":"5416fcff6fa0c6611cec99144bd5690f506c7875b8263ddeae6f123e22c3b50c",".github/FUNDING.yml":"b017158736b3c9751a2d21edfce7fe61c8954e2fced8da8dd3013c2f3e295bd9",".github/workflows/ci.yml":"3f09084970623b248ee41aaa7928e8e1e4298a712a6621334580951a3227495b","Cargo.lock":"2b727ff15f388012e929c089fdb62ead00fdb88a720a34c0e5c88b98748dc186","Cargo.toml":"92d59ecf8e5c840a4cad498e6fa36ccb34ae1aa3c2ceec2abd258b129fae67d1","Cargo.toml.orig":"afbf880657a9fd530a2c7e47f3e91e388a5a4b313580e82ad0618a3f0d043823","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","LICENSE-UNICODE":"f7db81051789b729fea528a63ec4c938fdcb93d9d61d97dc8cc2e9df6d47f2a1","README.md":"14a5b144df5ffd729c605286a8b2abe4733f147197b5142e60d6bc77ea44854c","benches/xid.rs":"7eb058c1140a253f7177af8868a95aabb1b92c52dc7eee5abbfeadb507d7845d","src/lib.rs":"9fdfc52c5695b4bdf6a777afe6705f18f50a9d05939f17fbede0e84aeef11c64","src/tables.rs":"9afe268f3a6087a96d4217aaf2fe9ebd5418f133bd733193009df7dccebf154b","tests/compare.rs":"f2311271aa1db7380e5bf153ef83ee99777e14579e4f28c2b1a3e21877ffe715","tests/fst/.gitignore":"2cd419079c0a08bb15766520880998651dd1c72c55347a31f43357595b16ac10","tests/fst/mod.rs":"69a3aaf59acd8bca962ecc6234be56be8c0934ab79b253162f10eb881523901f","tests/fst/xid_continue.fst":"b58be4f0c498253e7a5ac664046096f15f249da66131347d4b822097623549a2","tests/fst/xid_start.fst":"aec7eecdacfce308d2e6210f47d28ed3aad5c8b048efbfbc11fc22e60fbf435b","tests/roaring/mod.rs":"f5c6d55463a7f53e92a493cf046d717149250fbafc0e0fe94bdb531377bf8b11","tests/static_size.rs":"3a3467bad2bbb0cef8f0fe953967e16bc0b0a865ec52fd7eb34d620e9b3a11d4","tests/tables/mod.rs":"e6949172d10fc4b2431ce7546269bfd4f9146454c8c3e31faf5e5d80c16a8ab6","tests/tables/tables.rs":"302d87306100b6280f8db93e167dc70c47f724045cf1312b7354683656c3f36b","tests/trie/mod.rs":"d4acbb716bcbaf80660039797f45e138ed8bbd66749fa3b19b1a971574679cc9","tests/trie/trie.rs":"f7b9edc1e8a98e3be42b653bba27bb4eb5fc48a559d6d8d1c6a4db4b5425b0d5"},"package":"f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"}
1
+ {"files":{".cargo_vcs_info.json":"5416fcff6fa0c6611cec99144bd5690f506c7875b8263ddeae6f123e22c3b50c",".github/FUNDING.yml":"b017158736b3c9751a2d21edfce7fe61c8954e2fced8da8dd3013c2f3e295bd9",".github/workflows/ci.yml":"3f09084970623b248ee41aaa7928e8e1e4298a712a6621334580951a3227495b","Cargo.lock":"2b727ff15f388012e929c089fdb62ead00fdb88a720a34c0e5c88b98748dc186","Cargo.toml":"92d59ecf8e5c840a4cad498e6fa36ccb34ae1aa3c2ceec2abd258b129fae67d1","Cargo.toml.orig":"afbf880657a9fd530a2c7e47f3e91e388a5a4b313580e82ad0618a3f0d043823","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","LICENSE-UNICODE":"f7db81051789b729fea528a63ec4c938fdcb93d9d61d97dc8cc2e9df6d47f2a1","README.md":"14a5b144df5ffd729c605286a8b2abe4733f147197b5142e60d6bc77ea44854c","benches/xid.rs":"7eb058c1140a253f7177af8868a95aabb1b92c52dc7eee5abbfeadb507d7845d","src/lib.rs":"9fdfc52c5695b4bdf6a777afe6705f18f50a9d05939f17fbede0e84aeef11c64","src/tables.rs":"9afe268f3a6087a96d4217aaf2fe9ebd5418f133bd733193009df7dccebf154b","tests/compare.rs":"f2311271aa1db7380e5bf153ef83ee99777e14579e4f28c2b1a3e21877ffe715","tests/fst/mod.rs":"69a3aaf59acd8bca962ecc6234be56be8c0934ab79b253162f10eb881523901f","tests/fst/xid_continue.fst":"b58be4f0c498253e7a5ac664046096f15f249da66131347d4b822097623549a2","tests/fst/xid_start.fst":"aec7eecdacfce308d2e6210f47d28ed3aad5c8b048efbfbc11fc22e60fbf435b","tests/roaring/mod.rs":"f5c6d55463a7f53e92a493cf046d717149250fbafc0e0fe94bdb531377bf8b11","tests/static_size.rs":"3a3467bad2bbb0cef8f0fe953967e16bc0b0a865ec52fd7eb34d620e9b3a11d4","tests/tables/mod.rs":"e6949172d10fc4b2431ce7546269bfd4f9146454c8c3e31faf5e5d80c16a8ab6","tests/tables/tables.rs":"302d87306100b6280f8db93e167dc70c47f724045cf1312b7354683656c3f36b","tests/trie/mod.rs":"d4acbb716bcbaf80660039797f45e138ed8bbd66749fa3b19b1a971574679cc9","tests/trie/trie.rs":"f7b9edc1e8a98e3be42b653bba27bb4eb5fc48a559d6d8d1c6a4db4b5425b0d5"},"package":"f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"}
@@ -17,7 +17,7 @@ rb-sys = { version = "0.9.111", features = [
17
17
  magnus = { version = "0.8" }
18
18
  serde = { version = "1.0.219", features = ["derive"] }
19
19
  serde_magnus = "0.10"
20
- codeowners = { git = "https://github.com/rubyatscale/codeowners-rs.git", tag = "v0.3.0" }
20
+ codeowners = { git = "https://github.com/rubyatscale/codeowners-rs.git", tag = "v0.3.2" }
21
21
 
22
22
  [dev-dependencies]
23
23
  rb-sys = { version = "0.9.117", features = [
@@ -109,14 +109,14 @@ fn build_run_config() -> RunConfig {
109
109
  Ok(path) => path,
110
110
  _ => PathBuf::from("."),
111
111
  };
112
- let codeowners_file_path = project_root.join(".github/CODEOWNERS");
113
112
  let config_path = project_root.join("config/code_ownership.yml");
114
113
 
115
114
  RunConfig {
116
115
  project_root,
117
- codeowners_file_path,
116
+ codeowners_file_path: None,
118
117
  config_path,
119
118
  no_cache: false,
119
+ executable_name: Some("bin/codeownership validate".to_string()),
120
120
  }
121
121
  }
122
122
 
@@ -6,13 +6,29 @@ module CodeOwnership
6
6
  module FilePathFinder
7
7
  extend T::Sig
8
8
 
9
+ sig { returns(String) }
10
+ def self.pwd_prefix
11
+ @pwd_prefix ||= T.let("#{Dir.pwd}/", T.nilable(String))
12
+ end
13
+
14
+ sig { returns(Pathname) }
15
+ def self.pwd
16
+ @pwd ||= T.let(Pathname.pwd, T.nilable(Pathname))
17
+ end
18
+
9
19
  # Returns a string version of the relative path to a Rails constant,
10
20
  # or nil if it can't find anything
11
21
  sig { params(klass: T.nilable(T.any(T::Class[T.anything], T::Module[T.anything]))).returns(T.nilable(String)) }
12
22
  def self.path_from_klass(klass)
13
23
  if klass
14
24
  path = Object.const_source_location(klass.to_s)&.first
15
- (path && Pathname.new(path).relative_path_from(Pathname.pwd).to_s) || nil
25
+ return nil unless path
26
+
27
+ if path.start_with?(pwd_prefix)
28
+ path.delete_prefix(pwd_prefix)
29
+ else
30
+ Pathname.new(path).relative_path_from(pwd).to_s
31
+ end
16
32
  end
17
33
  rescue NameError
18
34
  nil
@@ -30,7 +46,7 @@ module CodeOwnership
30
46
  # ./app/controllers/some_controller.rb:43:in `block (3 levels) in create'
31
47
  #
32
48
  backtrace_line = if RUBY_VERSION >= '3.4.0'
33
- %r{\A(#{Pathname.pwd}/|\./)?
49
+ %r{\A(#{pwd}/|\./)?
34
50
  (?<file>.+) # Matches 'app/controllers/some_controller.rb'
35
51
  :
36
52
  (?<line>\d+) # Matches '43'
@@ -38,7 +54,7 @@ module CodeOwnership
38
54
  '(?<function>.*)' # Matches "`block (3 levels) in create'"
39
55
  \z}x
40
56
  else
41
- %r{\A(#{Pathname.pwd}/|\./)?
57
+ %r{\A(#{pwd}/|\./)?
42
58
  (?<file>.+) # Matches 'app/controllers/some_controller.rb'
43
59
  :
44
60
  (?<line>\d+) # Matches '43'
@@ -13,9 +13,8 @@ module CodeOwnership
13
13
  return FilePathTeamCache.get(file_path) if FilePathTeamCache.cached?(file_path)
14
14
 
15
15
  result = T.let(RustCodeOwners.for_file(file_path), T.nilable(T::Hash[Symbol, String]))
16
- return if result.nil?
17
16
 
18
- if result[:team_name].nil?
17
+ if result.nil? || result[:team_name].nil?
19
18
  FilePathTeamCache.set(file_path, nil)
20
19
  else
21
20
  FilePathTeamCache.set(file_path, T.let(find_team!(T.must(result[:team_name]), allow_raise: allow_raise), T.nilable(CodeTeams::Team)))
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module CodeOwnership
5
- VERSION = '2.1.1'
5
+ VERSION = '2.1.2'
6
6
  end
@@ -315,5 +315,7 @@ module CodeOwnership
315
315
  sig { void }
316
316
  def self.bust_caches!
317
317
  Private::FilePathTeamCache.bust_cache!
318
+ Private::FilePathFinder.instance_variable_set(:@pwd, nil)
319
+ Private::FilePathFinder.instance_variable_set(:@pwd_prefix, nil)
318
320
  end
319
321
  end