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.
- checksums.yaml +4 -4
- data/.cargo/config +2 -2
- data/Cargo.lock +2 -2
- data/README.md +8 -8
- data/ext/cargo-vendor/codeowners-0.3.2/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/codeowners-0.3.2/.github/CODEOWNERS +1 -0
- data/ext/cargo-vendor/codeowners-0.3.2/AGENTS.md +38 -0
- data/ext/cargo-vendor/codeowners-0.3.2/CLAUDE.md +1 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/Cargo.lock +1 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/Cargo.toml +17 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/README.md +11 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cli.rs +9 -5
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/config.rs +81 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/crosscheck.rs +5 -8
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/codeowners_file_parser.rs +3 -3
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_owner_resolver.rs +3 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/package_mapper.rs +2 -2
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper.rs +2 -2
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/validator.rs +15 -10
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership.rs +1 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project.rs +3 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project_builder.rs +111 -44
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner/api.rs +7 -6
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner/types.rs +2 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner.rs +67 -16
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/tracked_files.rs +29 -1
- data/ext/cargo-vendor/codeowners-0.3.2/tests/codeowners_path_test.rs +92 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/common/mod.rs +2 -1
- data/ext/cargo-vendor/codeowners-0.3.2/tests/executable_name_config_test.rs +67 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/config/code_ownership.yml +11 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/config/teams/test_team.yml +6 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/docs/CODEOWNERS +14 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/expected/CODEOWNERS +14 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/ruby/app/models/test.rb +3 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/.github/CODEOWNERS +10 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/app/foo.rb +3 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/code_ownership.yml +4 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/teams/foo.yml +5 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/teams/payments.yml +6 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/ruby/app/payments/foo.rb +4 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/.github/CODEOWNERS +11 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/app/bar.rb +3 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/config/code_ownership.yml +5 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/config/teams/bar.yml +5 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/.github/CODEOWNERS +10 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/code_ownership.yml +10 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/teams/bad_team.yml +1 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/teams/good.yml +3 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/valid_project/gems/pets/dog.rb +5 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/git_stage_test.rs +4 -1
- data/ext/cargo-vendor/codeowners-0.3.2/tests/missing_github_team_test.rs +23 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/run_config_executable_override_test.rs +98 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/runner_api.rs +8 -4
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/valid_project_test.rs +3 -3
- data/ext/cargo-vendor/codeowners-0.3.2/tests/validate_files_test.rs +378 -0
- data/ext/cargo-vendor/unicode-ident-1.0.19/.cargo-checksum.json +1 -1
- data/ext/code_ownership/Cargo.toml +1 -1
- data/ext/code_ownership/src/lib.rs +2 -2
- data/lib/code_ownership/private/file_path_finder.rb +19 -3
- data/lib/code_ownership/private/team_finder.rb +1 -2
- data/lib/code_ownership/version.rb +1 -1
- data/lib/code_ownership.rb +2 -0
- metadata +178 -152
- data/ext/cargo-vendor/codeowners-0.3.0/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/codeowners-0.3.0/tests/validate_files_test.rs +0 -144
- data/ext/cargo-vendor/unicode-ident-1.0.19/tests/fst/.gitignore +0 -1
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/audit.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/ci.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/dotslash-config.json +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.rustfmt.toml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.rusty-hook.toml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/dev/run_benchmarks_for_file.sh +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/dev/run_benchmarks_for_gv.sh +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/rust-toolchain.toml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/file.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/mod.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/noop.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/common_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/lib.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/main.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/codeowners_query.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_generator.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_owner_finder.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/annotated_file_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/directory_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/escaper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_gem_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_glob_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_yml_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/path_utils.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project_file_builder.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/cache_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/crosscheck_owners_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/.keep +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/teams/design.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/teams/frontend.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +0 -0
- /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
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/.ignore +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +0 -0
- /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
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +0 -0
- /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
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/invalid_project_structure_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/invalid_project_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/multiple_directory_owners_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/untracked_files_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/valid_project_with_overrides_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tmp/.gitkeep +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d8fedeffce41aac3825e154fc451ffbacc71459b82811bb5d3cca37518f7de0a
|
|
4
|
+
data.tar.gz: 96a9b124d2b197f2427f146bc86fccf7e450d52154b9f60e70661c0615a75f1f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fd4f8f0b52eb97cc6e40e22c86b46c8e7dc91d78d8e1bef65ce57167176b4130a92c2be1b9e33e0818ddfc3f3eb60659a385f3cb23eeffbbf4f4b9d0ba734fea
|
|
7
|
+
data.tar.gz: f8d0f83ac58d7b70e46f7c50549c107bd30f6434a9584d1a794b5a192a1d0a23106db231f6ea4cc3449a3300a8ee3c029b1fafa7dd882e430c55528ed124c40b
|
data/.cargo/config
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
[source.crates-io]
|
|
2
2
|
replace-with = "vendored-sources"
|
|
3
3
|
|
|
4
|
-
[source."git+https://github.com/rubyatscale/codeowners-rs.git?tag=v0.3.
|
|
4
|
+
[source."git+https://github.com/rubyatscale/codeowners-rs.git?tag=v0.3.2"]
|
|
5
5
|
git = "https://github.com/rubyatscale/codeowners-rs.git"
|
|
6
|
-
tag = "v0.3.
|
|
6
|
+
tag = "v0.3.2"
|
|
7
7
|
replace-with = "vendored-sources"
|
|
8
8
|
|
|
9
9
|
[source.vendored-sources]
|
data/Cargo.lock
CHANGED
|
@@ -200,8 +200,8 @@ dependencies = [
|
|
|
200
200
|
|
|
201
201
|
[[package]]
|
|
202
202
|
name = "codeowners"
|
|
203
|
-
version = "0.3.
|
|
204
|
-
source = "git+https://github.com/rubyatscale/codeowners-rs.git?tag=v0.3.
|
|
203
|
+
version = "0.3.2"
|
|
204
|
+
source = "git+https://github.com/rubyatscale/codeowners-rs.git?tag=v0.3.2#49629b131eb788916ff5e6722719513026260480"
|
|
205
205
|
dependencies = [
|
|
206
206
|
"clap",
|
|
207
207
|
"clap_derive",
|
data/README.md
CHANGED
|
@@ -10,7 +10,7 @@ There is also a [companion VSCode Extension](https://github.com/rubyatscale/code
|
|
|
10
10
|
|
|
11
11
|
## Getting started
|
|
12
12
|
|
|
13
|
-
To get started there
|
|
13
|
+
To get started there are a few things you should do.
|
|
14
14
|
|
|
15
15
|
1. Create a `config/code_ownership.yml` file and declare where your files live. Here's a sample to start with:
|
|
16
16
|
|
|
@@ -42,7 +42,7 @@ There are five ways to declare code ownership using this gem:
|
|
|
42
42
|
|
|
43
43
|
### Directory-Based Ownership
|
|
44
44
|
|
|
45
|
-
Directory
|
|
45
|
+
Directory-based ownership allows for all files in that directory and all its sub-directories to be owned by one team. To define this, add a `.codeowner` file inside that directory with the name of the team as the contents of that file.
|
|
46
46
|
|
|
47
47
|
```
|
|
48
48
|
Team
|
|
@@ -58,7 +58,7 @@ File annotations are a last resort if there is no clear home for your code. File
|
|
|
58
58
|
|
|
59
59
|
### Package-Based Ownership
|
|
60
60
|
|
|
61
|
-
Package
|
|
61
|
+
Package-based ownership integrates [`packwerk`](https://github.com/Shopify/packwerk) and has ownership defined per package. To define that all files within a package are owned by one team, configure your `package.yml` like this:
|
|
62
62
|
|
|
63
63
|
```yml
|
|
64
64
|
enforce_dependency: true
|
|
@@ -92,7 +92,7 @@ unowned_globs:
|
|
|
92
92
|
|
|
93
93
|
### Javascript Package Ownership
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
JavaScript package-based ownership allows you to specify an ownership key in a `package.json`. To use this, configure your `package.json` like this:
|
|
96
96
|
|
|
97
97
|
```json
|
|
98
98
|
{
|
|
@@ -112,10 +112,10 @@ js_package_paths:
|
|
|
112
112
|
- frontend/other_location_for_packages/*
|
|
113
113
|
```
|
|
114
114
|
|
|
115
|
-
This defaults `**/`, which makes it look for `package.json` files across your application.
|
|
115
|
+
This defaults to `**/`, which makes it look for `package.json` files across your application.
|
|
116
116
|
|
|
117
117
|
> [!NOTE]
|
|
118
|
-
>
|
|
118
|
+
> JavaScript package ownership does not respect `unowned_globs`. If you wish to disable usage of this feature you can set `js_package_paths` to an empty list.
|
|
119
119
|
|
|
120
120
|
```yml
|
|
121
121
|
js_package_paths: []
|
|
@@ -184,7 +184,7 @@ If `codeowners_path` is set in `code_ownership.yml` codeowners will use that pat
|
|
|
184
184
|
CodeOwnership comes with a validation function to ensure the following things are true:
|
|
185
185
|
|
|
186
186
|
1. Only one mechanism is defining file ownership. That is -- you can't have a file annotation on a file owned via package-based or glob-based ownership. This helps make ownership behavior more clear by avoiding concerns about precedence.
|
|
187
|
-
2. All teams referenced as an owner for any file or package
|
|
187
|
+
2. All teams referenced as an owner for any file or package are valid teams (i.e. they're in the list of `CodeTeams.all`).
|
|
188
188
|
3. All files have ownership. You can specify in `unowned_globs` to represent a TODO list of files to add ownership to.
|
|
189
189
|
4. The `.github/CODEOWNERS` file is up to date. This is automatically corrected and staged unless specified otherwise with `bin/codeownership validate --skip-autocorrect --skip-stage`. You can turn this validation off by setting `skip_codeowners_validation: true` in `config/code_ownership.yml`.
|
|
190
190
|
|
|
@@ -223,7 +223,7 @@ codeownership validate --diff
|
|
|
223
223
|
|
|
224
224
|
## Development
|
|
225
225
|
|
|
226
|
-
Please add to `CHANGELOG.md` and this `README.md` when you make
|
|
226
|
+
Please add to `CHANGELOG.md` and this `README.md` when you make changes.
|
|
227
227
|
|
|
228
228
|
## Running specs
|
|
229
229
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"files":{".github/CODEOWNERS":"8df3f986d37e09c1e9d8102c45e8776a506cd56b75a9fe03270626e4843c0ad0",".github/workflows/audit.yml":"bde77859031fa481da1fcaf399129b64819d78a0ffbbb2d4c4f5346f4a4dec7e",".github/workflows/ci.yml":"a4b503d5b650f4d59d7e02b3a33f623c373f1ae8c892b6ddcc47b271b7d109db",".github/workflows/dotslash-config.json":"21dbdefc13a01f3aad42923963b9025907d4049d8e75b18208e887f9e601e381",".rustfmt.toml":"394616646760b18ed094433d39e18b7d94986347c21790708bff9ab001f38e0b",".rusty-hook.toml":"9d3d8a8f4f20d80682ce71889a17eb5ba204f4636f27211fafcb6c6b5af5c2bb","AGENTS.md":"9cab0708a38900826f5b5804fc921ea3aea293f533727100bcfb5735f7835d05","CLAUDE.md":"336cc4fbf19beaada7ccf9986414fa91851a8d7a07dfb3ccbe800a69eed0ab49","Cargo.lock":"78fffcf69a203c94181059deecd0733495c85d5947b7765329f39f5aae3f7cf9","Cargo.toml":"6f0840ff57ba26a1ce127a4439107b2d7270d22b87987663b2039edc13aaeb19","README.md":"11b96c2361db6e2ad82fecb354b767d55d7f77656694e10990685fe8c6c644bb","dev/run_benchmarks_for_file.sh":"f633c0fbfd1ea89b3fb21cf2721ab481670cf2de8d424bb4448a4ad5e908c38d","dev/run_benchmarks_for_gv.sh":"c3e26bed04b3f2ab5dce3372db249349990b9033fe5ed963d5b7f58a4a72ffbf","rust-toolchain.toml":"b6a9e4028a0a266a7d2055c287092b816c89336df42076dec9d9aaa4c0007c0e","src/cache/file.rs":"7ffe92cce38b2a21e8d9f7eb85b50e54a90523546a68b5441b423204b9aae940","src/cache/mod.rs":"622ad6effc3260c922fe49f3800e0d1c5b3c6a73c81d567296ea6cb550792d32","src/cache/noop.rs":"abfddf1c20cbaca5dd432952d0ff0a0a1d92eb0070866d343e368f29cdd22de9","src/cli.rs":"ddee568b1a2e3de96027e6e2caa9f0ece5f677ecc66671676100b14d3ab51353","src/common_test.rs":"9df12547039d3d99dd7dd8798a35960892f7bbcf74036adbdcf4a14b8567a743","src/config.rs":"2646a547371617acb0935941f134a131d66174ecd156792e644b7ab3d49c0b74","src/crosscheck.rs":"f5f52c735e09da7fa413c51c2f81a349f8c62782041c7649fc18909d59efcea6","src/lib.rs":"8a2946ae156e306a2245857e295886a369fa2c3ef2bace585185f64c47e293be","src/main.rs":"51f0621733107ff3505cfffdf84b557e7fdbc79189f55561d8fb9ad550d6fb78","src/ownership.rs":"29287dd073294afd2826b6754175d09ca87773191af2218487ff9e703ccd2035","src/ownership/codeowners_file_parser.rs":"0f798722af3a0adb0b8b790e871e56257d9f265ed2d8542f0d202eca5afca2f4","src/ownership/codeowners_query.rs":"30556b0ee2c38c1ca9283763df1ad7ddd7f964bc8d449c0bf2f935c387fe1673","src/ownership/file_generator.rs":"8b5d3fd03733f1b1c1b76be0b20467f2b50799d2a3a7806dc3df52147a470a46","src/ownership/file_owner_finder.rs":"104626da603ddcaccb217387f13141c81fb768b41cf8b7fbc5f65809f487231b","src/ownership/file_owner_resolver.rs":"02d72fd4edeaad36b3454fe1c1e638665d208a14c09a8dd26465fad4a5bd90e2","src/ownership/mapper.rs":"a3bd5bc0bf7423fd061a044bd9fcc1d1b6bccd24e914b1f90a10a6fac56cc2f9","src/ownership/mapper/annotated_file_mapper.rs":"f34f845ddb45545f02f8ae2ab83c3934bc38dd95f9ba9d4142e12f61dfac271a","src/ownership/mapper/directory_mapper.rs":"a86866b518efbfdbb056a2d472c981eec875f2ddca5899f029405b76e875b018","src/ownership/mapper/escaper.rs":"2faa41beefedca26d493e8d8f68882384ddbb2c4b108953f30b960847a3f841c","src/ownership/mapper/package_mapper.rs":"394297b4c5890fb3a6b0289b78cec63fbb2e15fb4dc043e9d3ba0cb00769b7f6","src/ownership/mapper/team_gem_mapper.rs":"50b6ad9e60c03e055662724296576b4586167b0d7d6c03819f98b30c0f37342f","src/ownership/mapper/team_glob_mapper.rs":"ce0638118ec9c610210880534a62740f9bd4d15494b0b9516bcc11fa2bbfb508","src/ownership/mapper/team_yml_mapper.rs":"3c759139fc9ff362b82102aeaec958aec7ec9df86df87482a3362ab8ea54404f","src/ownership/validator.rs":"f775ebe330f48a6988fdb911a138b0ba4939423112e5e3647a7c38b73cccbbe2","src/path_utils.rs":"de5f7fc080f372ca025f777a5018319236f5b83c2c1ac77f9a387e62ce683ab4","src/project.rs":"26fac1893915f978f32eb80c5a8cf39ff37dc05f77e445e7e4fea8aba36a8f7c","src/project_builder.rs":"725a19d4e68cac2d7348bcfbc2b9c8b35f1d789247a3746e3adb70277485d1ac","src/project_file_builder.rs":"d0be8786d8160ad40d2286c9e43e11df1d38dbb7f7c84f5029d4656b19d75cbf","src/runner.rs":"7ab4f07660e249f5301e8944ab82e24df48012f6fa7a70ea81b8ef912cce8f8d","src/runner/api.rs":"c7e9815fbf654665da9d11d6b2405f623ed2fc36b93c37db212421351e9a779b","src/runner/types.rs":"30be32563f7fee61ca991618874dda497ccbe1d7c3fde4c023fd9eaa90ce7853","src/tracked_files.rs":"85ab07d649a5a9d90181489f8ebb7c173af4547ca267bc277b5bcf7534715823","tests/cache_test.rs":"80b900f38e177eb8c9e162b9373cd1d7c3a551baade716a1b07554a021bfef05","tests/codeowners_path_test.rs":"6e10631bcd93bbb850eed2818de057f0621c714137a11676f0a689f775699f52","tests/common/mod.rs":"ea2b9de36002a946c3ab6ed4101ff7c395c7a0f9ac143c12618a3d27fc8e15e4","tests/crosscheck_owners_test.rs":"8f83ec2feb7bef1cf34fec445096a342900359e5efed3b0b9485d48dad6e704d","tests/executable_name_config_test.rs":"193f675cd4b48798c1d536b3e07abe602bec580035f22ef143bf2e4fca00fbb0","tests/fixtures/custom_codeowners_path/config/code_ownership.yml":"3c9a4b046bab1f4d842e728dc9dea32ec09e7d01b6db5d1726e71ab330773b0e","tests/fixtures/custom_codeowners_path/config/teams/test_team.yml":"93ecfdd871a5e12e11293fd920988f82a67cb1a6fe39740a988a3e3fd0fda68f","tests/fixtures/custom_codeowners_path/docs/CODEOWNERS":"53db3b0313340fc5ce3a4c8050d1d8e7c1fb4fae1050e5bb047d3b211afed272","tests/fixtures/custom_codeowners_path/expected/CODEOWNERS":"53db3b0313340fc5ce3a4c8050d1d8e7c1fb4fae1050e5bb047d3b211afed272","tests/fixtures/custom_codeowners_path/ruby/app/models/test.rb":"d4218b8bc15617dd06a04632896ff45547545d2b1a0847adf5db860ac7ca060f","tests/fixtures/custom_executable_name/.github/CODEOWNERS":"1cbe2dc8b6f050c3ab084aeb6182abed325274a95101ccb74d7410bb9e787cca","tests/fixtures/custom_executable_name/app/foo.rb":"083a6a7028749e3ef5397011b695037d958d5535cc332f666a853f06649cc0e4","tests/fixtures/custom_executable_name/config/code_ownership.yml":"107fab4d8816bcf1d0f70663450db390b713bdaa45a16ffbc7095663d44b5ca1","tests/fixtures/custom_executable_name/config/teams/foo.yml":"e2ebda8a83ab460456238351c112fa34fd056603ab556ef86afb10565aaa4398","tests/fixtures/custom_executable_name/config/teams/payments.yml":"9a333c4b5ad8abb3cc0610fa5562e499dc5665bbdd25755ba39b13ebea08940b","tests/fixtures/custom_executable_name/ruby/app/payments/foo.rb":"e4e0884c8dbbb76a53fa1a1877925cef81724fc8618d73056857209820acd42f","tests/fixtures/default_executable_name/.github/CODEOWNERS":"3520d8681f4c8958ac29fecf5ce12d95bef7e5376f07b80cdca09611a092087e","tests/fixtures/default_executable_name/app/bar.rb":"522851f30712c0df9f444af429a0e2bbfb9d095c0af3b4bdb925eb80d088680e","tests/fixtures/default_executable_name/config/code_ownership.yml":"85c44e76a650b80a46eadc44bc4e6f184a8d405b63b2bf186726b2974e083a2f","tests/fixtures/default_executable_name/config/teams/bar.yml":"8a4369cf629089eec906495d05f3ef58ece3e17dd860e452cceec18bad1dfcef","tests/fixtures/invalid_project/.github/CODEOWNERS":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","tests/fixtures/invalid_project/config/code_ownership.yml":"395b9023f51a29b8326a230c82543d8e8e7656376b4d82b1e77c7c5879620a30","tests/fixtures/invalid_project/config/teams/payments.yml":"205b0d200a5b686ad91c4080eadeefef200cc4974939b5ef02c15ef2edf775a1","tests/fixtures/invalid_project/config/teams/payroll.yml":"f3a85ce896837c2a9d38c2d23a600b1fd72f3bf8c4c65c12719ce942b3b17375","tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb":"350c85edfe24cd54b2479eda5266aae894b4c5eb6e9a3c0a0a1fb30e8c4d1d0f","tests/fixtures/invalid_project/ruby/app/models/bank_account.rb":"0832b2e95f90fa7ebd8dcbfd53c05618f091d38abf5dd238bd4d41645746160d","tests/fixtures/invalid_project/ruby/app/models/blockchain.rb":"9ffaa2304d02b8d40050017b62edbaf61b8600dc0b1a2c5b7f069b7c55c30616","tests/fixtures/invalid_project/ruby/app/models/payroll.rb":"7f48f8730fd738a2760ee81be8a6028cccb3c6c38be0433c7fd81a4bdd631b60","tests/fixtures/invalid_project/ruby/app/payments/nacha.rb":"c5ced2841986f3d48be0a132185a39dbc327715064574887303a25cf02aaad4d","tests/fixtures/invalid_project/ruby/app/services/.codeowner":"53fe8dfb6d9e1b03219adddcc3ffb741557dd579dc653d026097c463def4a8fe","tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb":"42b340c67ad95016eb7e852abe37b39f7a0b5be41f897f972e05d2e581d6c30f","tests/fixtures/invalid_project/ruby/app/unowned.rb":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml":"c1a08643821d02a57131870e8b6325f864db0687c5583f3d0872ada9d004072a","tests/fixtures/javascript_only_project/.github/CODEOWNERS":"fbd7770603296872c5993d1325a2d00a8d1704ad99002db9ab0dccc7182e3b37","tests/fixtures/javascript_only_project/.keep":"ff2dc9018b2c43a9793444552abcf83560daf5f7b1733bf7dbcaed4ee97db60e","tests/fixtures/javascript_only_project/config/code_ownership.yml":"b9cdde18cb0f0e8c025342c8d633197c401083f475ef34d7f9228ef343a0ba21","tests/fixtures/javascript_only_project/config/teams/design.yml":"6db44f08e2b0fb9e5bd91a83ba122025cf7e7a008703c39df9d0b10306a6e752","tests/fixtures/javascript_only_project/config/teams/frontend.yml":"f9fa6eee0ed9fc5a0b44485c306bb11785f9120a871c5e0bc074a5eacb808686","tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx":"b3c88c0731b4b739d120f161266a501743a58577db571702dc6f3f0fd1483b4d","tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json":"3dd571d4d569608311ddab4a99cfe5596ab4c29fd0bade76ee9756cf28b0ac48","tests/fixtures/javascript_only_project/frontend/packages/dashboard/src/index.tsx":"5ef179897d55e9e8c6b70e5ad82803b11f0fcd5cfb3c7313e87b839798608e15","tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner":"b5f4517c94406cb8d45702193f8282b62af30971d068e79d7bc2fd930cb0bb4c","tests/fixtures/javascript_only_project/frontend/packages/ui-kit/src/button.tsx":"7c18c050058f884a7f096b9fd4b1ccf853bc4e84dd786b5a92c5f0479b32f128","tests/fixtures/missing_github_team/.github/CODEOWNERS":"2a2f3c33c892b3ca170925e6f428d6bd506008f8343c67f640f55741ff22d611","tests/fixtures/missing_github_team/config/code_ownership.yml":"eb683ba7b42f810b457e1181626c6eb3b44bd5c80ba396bc0e8d29334a8187bf","tests/fixtures/missing_github_team/config/teams/bad_team.yml":"93cc7413631ce8fd5f95d083c9061f923de32e7c756bc6f0c9b17d593e4c4c12","tests/fixtures/missing_github_team/config/teams/good.yml":"bb8d9ea5106b9b87d17b3e72de7802f39f1879764fd99b13738cfdb43d503973","tests/fixtures/missing_github_team/gems/pets/dog.rb":"ed2553442d1646af1c421a7a04b92269612efbc5ec0ccb32930e27ceac65b2ea","tests/fixtures/multiple-directory-owners/.github/CODEOWNERS":"957d160c3d00eb530f7ebb34cc9b7c61934d108eb52ce3cb03b6d9978fad86df","tests/fixtures/multiple-directory-owners/app/consumers/.codeowner":"842c88863910f6eab22edcbdbe9f0f4dd96c6b46c711bd40277b36b8178943c4","tests/fixtures/multiple-directory-owners/app/consumers/deep/nesting/nestdir/deep_file.rb":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/fixtures/multiple-directory-owners/app/services/.codeowner":"3eae1599bb7f187b86d6427942d172ba8dd7ee5962aab03e0839ad9d59c37eb0","tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner":"842c88863910f6eab22edcbdbe9f0f4dd96c6b46c711bd40277b36b8178943c4","tests/fixtures/multiple-directory-owners/app/services/exciting/some_other_file.rb":"c0cf1112663d326ba9b47fbcf961e98170c32e9287d5af574c35b3350fb3c59a","tests/fixtures/multiple-directory-owners/config/code_ownership.yml":"fcff2625d3a836924e75afd4a326c8f425a9ac4b4c5ffe276b8a14a083cc005a","tests/fixtures/multiple-directory-owners/config/teams/bar.yml":"253d9d9cb7f5b5cb81af19d8af7631b510d0f4ad59b32465c5e26bd78886f9c6","tests/fixtures/multiple-directory-owners/config/teams/foo.yml":"d4ba6d61c16e4227681f13013775e3d117e0cee4631714849405c47ff36ecbfc","tests/fixtures/valid_project/.github/CODEOWNERS":"ca6a9b2a225685b478fb7b542dd63ab945cd51ccd82b4d86495b3a3d7c020b6c","tests/fixtures/valid_project/.ignore":"68f30767f9c87c700952d52d9d39693e1a98efb6c07a0b9216fbc87d173ebb5e","tests/fixtures/valid_project/config/code_ownership.yml":"1443a689ff1b64d23cf6590b5d559ef386b549815f51bfe8a27ecd5f3111a5b8","tests/fixtures/valid_project/config/teams/payments.yml":"7c4edf4ab7db59c1ef13ef4e7aa498c8e8c23c19427ebebe4f43bca003619f2a","tests/fixtures/valid_project/config/teams/payroll.yml":"f3a85ce896837c2a9d38c2d23a600b1fd72f3bf8c4c65c12719ce942b3b17375","tests/fixtures/valid_project/config/teams/ux.yml":"918e96ab1b5c67c99b30b8e984c2cef8fa956b1c83802a76923b3f448bcdec62","tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb":"991056cdd4824eea15055f9c055c22fb3281cc21cffbca94724b330b8a450e59","tests/fixtures/valid_project/gems/pets/dog.rb":"ed2553442d1646af1c421a7a04b92269612efbc5ec0ccb32930e27ceac65b2ea","tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx":"b78b223d3bdb83af6ef7f78bd305f6e18f11abf961ded3266f7bebdb9eb00686","tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json":"271a0bb50784a65df66fd5db7167d1dd67430c774c207eda58a96974dbafc408","tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner":"632e1c5839411a1009ef268e992c4b183cb1d5381b198eac0f8323213a61ed82","tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/fixtures/valid_project/javascript/packages/items/.codeowner":"53fe8dfb6d9e1b03219adddcc3ffb741557dd579dc653d026097c463def4a8fe","tests/fixtures/valid_project/javascript/packages/items/item.ts":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx":"4785eb6da46cfac5a74130f51a032d565824a0cfdde8f853530bd1e16baa8a95","tests/fixtures/valid_project/ruby/app/models/bank_account.rb":"0832b2e95f90fa7ebd8dcbfd53c05618f091d38abf5dd238bd4d41645746160d","tests/fixtures/valid_project/ruby/app/models/payroll.rb":"00214579a6b59629d74eb60e315b9e1cd77889ba54d46f0fa8e2936e7fbc4c53","tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner":"53fe8dfb6d9e1b03219adddcc3ffb741557dd579dc653d026097c463def4a8fe","tests/fixtures/valid_project/ruby/app/payments/foo/ownedby_payroll.rb":"705296c5ae6b3c1efdb410c952095b6efba3f9edd0af1b42d20e6ba217b1744d","tests/fixtures/valid_project/ruby/app/payments/nacha.rb":"c5ced2841986f3d48be0a132185a39dbc327715064574887303a25cf02aaad4d","tests/fixtures/valid_project/ruby/app/payroll/.codeowner":"b58412ec67186588652c88a6c71fd7499e27984e1e587e137426bed8ddd53173","tests/fixtures/valid_project/ruby/app/payroll/payroll.rb":"ff6cb08457469043bd93b4fdbcecc37a29a506641ab486f9cafd319125ff00ca","tests/fixtures/valid_project/ruby/app/views/foos/edit.erb":"47a411fb8b793bf622fdb956f89a3b20835cd92201b61141f09748f8ff55ee21","tests/fixtures/valid_project/ruby/app/views/foos/index.html.erb":"4b7fd88053dfa83a4131200ed3196b41938e4a68119570e4aa1652ecdd7c6bfe","tests/fixtures/valid_project/ruby/app/views/foos/new.html.erb":"47a411fb8b793bf622fdb956f89a3b20835cd92201b61141f09748f8ff55ee21","tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb":"fb333306f05e93ff821123b1c09d264c5f37f1bd739156d91167789795704671","tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml":"c1a08643821d02a57131870e8b6325f864db0687c5583f3d0872ada9d004072a","tests/fixtures/valid_project/should_be_ignored/an_ignored_file.rb":"bd5ce0746f05ded73148e184b36741f3846e0af7409b42c16abae54a9220113a","tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS":"99438c376b9ef057e5182f0197b42f7bb644773d181f1f94f3a7b2028052af34","tests/fixtures/valid_project_with_overrides/config/code_ownership.yml":"d4349ca21efdfd2a8247907db492e85aecea013f3977fabc5cc1a8a6411f7c3d","tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml":"c45a00561fdaa703ed3a044a5c0271bd9d3e9fad64c3df58e17b07c38d151907","tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml":"1bb8b70d29e97b2c78f35f84be18cafe2f3334bd81c45601217b1abdfcbdb088","tests/fixtures/valid_project_with_overrides/config/teams/giants.yml":"fdaead5b59332f408abc7e6a099f4773be232942532ae501aadc6d7f0110e302","tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml":"0334aa2d3ba78261fb776f565ef38f1e19638e0fa5e05cae5785cec036ca7138","tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/package.json":"02e3dd340b4c1ab53bc2925164666b7c8c92cfb5afff7cdffcbb0760c0f23b56","tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/src/picks/dp.tsx":"7709ee4137249bf9d5c38687533304e7e04a174d233bc6f6e8a1f0de54689907","tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/package.json":"9b95dfa430e9167629e1d908ccbef8ed17e3818fcc04c10cd11aee1ba806f8d9","tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/src/item.tsx":"8360b4a2d4b8705c5d070b0834e7f4d1e8fc3fdac4221dd5a1ac33a2b256d1bb","tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/package.json":"5676381fcd3acf9d7daa0f28eaf47b7fc481b7b826469655675ddd0bd4548429","tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/field.tsx":"6821d8fe047c903a1b4a897ed1bed9638e556098db653518c3700507236a9cdc","tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/fields/small.tsx":"18d9323ac98ac4bd4a685193763e1f29426be5ac8c4d7e7975945d79644226fd","tests/fixtures/valid_project_with_overrides/gems/apollo/lib/apollo.rb":"0470c442f361f8df49268fc1ea6d84f9512598d43595d54d6bda896a13e144f5","tests/fixtures/valid_project_with_overrides/gems/ivy/lib/ivy.rb":"54f5443bef6aebcb63ab0501f418c8b03928514a8a7ac9ed41d35dfb619a24b1","tests/fixtures/valid_project_with_overrides/gems/lager/lib/lager.rb":"d90ceebb7bc6156b2e3b3a88274f6a330f6b33f1b7404a3d1561618d9ae261f3","tests/fixtures/valid_project_with_overrides/gems/summit/lib/summit.rb":"ef61bf61c1d574c562d8d2d7e6692e0bb0cdb3e02b49691d3558cb205a6b3d27","tests/fixtures/valid_project_with_overrides/packs/games/app/services/stats.rb":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/fixtures/valid_project_with_overrides/packs/games/package.yml":"d44cb7e67286294b43fc51e7eefd36fecb488bd7e3aa1c15ba5e2f0fd1364806","tests/fixtures/valid_project_with_overrides/packs/locations/app/services/capacity.rb":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/fixtures/valid_project_with_overrides/packs/locations/package.yml":"ae1e90f7aadaa78fed7c97083dd0f46b394e53b848c08cf370b59c0f8de25e1c","tests/fixtures/valid_project_with_overrides/packs/schedule/app/services/date.rb":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml":"e97c4d452c4656b9e7b3c22093d5969c4a59a8c019a4fc7ef513c5748f6a9ede","tests/fixtures/valid_project_with_overrides/ruby/app/brewers/lib/util.rb":"92be44095fe84e95ea5ce3f5b42cc9681063646135c8163017a56d407a367005","tests/fixtures/valid_project_with_overrides/ruby/app/brewers/services/play.rb":"1c4d38afc6eed1eac4681fa774dfc1fbcad894b245616c88efcf7afff21e7762","tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner":"870f5b1fed86d50ea4a808b13b307f172b5e39b9be296cff27ad9babbcd384e9","tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/.codeowner":"d706f1c0496146d6009e700d1e78c4f0f0927edf73c656ec59fccf40a72d4291","tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/db/price.rb":"b571b23154f35a482975537bb752975c7957d78b02163842e9afb52513e3b8ce","tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/entertainment.rb":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/play.rb":"e4b77f45119ecc9cead0a189f90295ff16e15a35c38763bd0942b5aa6aad83b2","tests/fixtures/valid_project_with_overrides/ruby/app/giants/services/play.rb":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/fixtures/valid_project_with_overrides/ruby/app/rockies/services/play.rb":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","tests/git_stage_test.rs":"145b13404ccec67a420fbc59e8b137cd394e612b2bab1f76d7e175c29ef7d4ab","tests/invalid_project_structure_test.rs":"af048ddfa756bc2e187ea885ea533a4b67907c5bcc531a082ffceca0728649b4","tests/invalid_project_test.rs":"7dbb00616f95308c5b597f09faa8721c2df416d5dfc00b95a9698a5ee1c4919d","tests/missing_github_team_test.rs":"e279592be3a68bb348066f90543f9ec8e702d2876cd524a55acaaf86a579fea7","tests/multiple_directory_owners_test.rs":"8fec90a2c1bcdd8886987a33d9c4afcd0094ce102cfa3d0415bcc2b5354eae80","tests/run_config_executable_override_test.rs":"1ffac121827dc2065460ff0ae4243704084441bc6d642396bc5e9a1d01c5b401","tests/runner_api.rs":"aa8d909b760e43f30c7b3b9dff761c6dd917ea51feb5baeb33ed191475a0fc3f","tests/untracked_files_test.rs":"f4c1906b6591ae7f206f3ac0838c99a35c5fb81f650928ed929e6246549d9874","tests/valid_project_test.rs":"4c76f2770f80c6a6d720a2ee970c176f7a813a5f3af6d0086f866478248c9e11","tests/valid_project_with_overrides_test.rs":"77150218cc4e6d7527d910d89cc3303f8d02671e6686069a41e2484b4fa31f59","tests/validate_files_test.rs":"517eb0f41405f2b1b3a69487c2a4fe526736bbadacce57e0fa0b57e5fba381df","tmp/.gitkeep":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"package":null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* @rubyatscale/ruby-at-scale
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
This file provides guidance to AI coding agents when working with code in this repository.
|
|
2
|
+
|
|
3
|
+
## What this project is
|
|
4
|
+
|
|
5
|
+
`codeowners-rs` is a Rust implementation of a CODEOWNERS resolver. It parses CODEOWNERS files and determines ownership of files in a repository, used as both a library and CLI tool.
|
|
6
|
+
|
|
7
|
+
## Commands
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Build
|
|
11
|
+
cargo build
|
|
12
|
+
cargo build --release
|
|
13
|
+
|
|
14
|
+
# Run all tests
|
|
15
|
+
cargo test
|
|
16
|
+
|
|
17
|
+
# Run a single test by name
|
|
18
|
+
cargo test test_name
|
|
19
|
+
|
|
20
|
+
# Lint
|
|
21
|
+
cargo clippy --all-targets --all-features
|
|
22
|
+
cargo fmt --all -- --check # check only
|
|
23
|
+
cargo fmt --all # apply formatting
|
|
24
|
+
|
|
25
|
+
# Check compilation without building
|
|
26
|
+
cargo check
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Architecture
|
|
30
|
+
|
|
31
|
+
- `src/main.rs` — CLI entry point using `clap`
|
|
32
|
+
- `src/lib.rs` — library root; exposes the public API
|
|
33
|
+
- `src/ownership.rs` / `src/ownership/` — core ownership resolution logic: parses CODEOWNERS patterns and matches them against file paths
|
|
34
|
+
- `src/config.rs` — configuration loading
|
|
35
|
+
- `src/runner/` — orchestrates file walking and ownership resolution
|
|
36
|
+
- `src/cache/` — caching layer for resolved ownership results
|
|
37
|
+
- `src/cli.rs` — CLI command definitions
|
|
38
|
+
- Integration tests in `src/common_test.rs`; fixture data used in tests lives alongside test files
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
[package]
|
|
13
13
|
edition = "2024"
|
|
14
14
|
name = "codeowners"
|
|
15
|
-
version = "0.3.
|
|
15
|
+
version = "0.3.2"
|
|
16
16
|
build = false
|
|
17
17
|
autolib = false
|
|
18
18
|
autobins = false
|
|
@@ -33,10 +33,18 @@ path = "src/main.rs"
|
|
|
33
33
|
name = "cache_test"
|
|
34
34
|
path = "tests/cache_test.rs"
|
|
35
35
|
|
|
36
|
+
[[test]]
|
|
37
|
+
name = "codeowners_path_test"
|
|
38
|
+
path = "tests/codeowners_path_test.rs"
|
|
39
|
+
|
|
36
40
|
[[test]]
|
|
37
41
|
name = "crosscheck_owners_test"
|
|
38
42
|
path = "tests/crosscheck_owners_test.rs"
|
|
39
43
|
|
|
44
|
+
[[test]]
|
|
45
|
+
name = "executable_name_config_test"
|
|
46
|
+
path = "tests/executable_name_config_test.rs"
|
|
47
|
+
|
|
40
48
|
[[test]]
|
|
41
49
|
name = "git_stage_test"
|
|
42
50
|
path = "tests/git_stage_test.rs"
|
|
@@ -49,10 +57,18 @@ path = "tests/invalid_project_structure_test.rs"
|
|
|
49
57
|
name = "invalid_project_test"
|
|
50
58
|
path = "tests/invalid_project_test.rs"
|
|
51
59
|
|
|
60
|
+
[[test]]
|
|
61
|
+
name = "missing_github_team_test"
|
|
62
|
+
path = "tests/missing_github_team_test.rs"
|
|
63
|
+
|
|
52
64
|
[[test]]
|
|
53
65
|
name = "multiple_directory_owners_test"
|
|
54
66
|
path = "tests/multiple_directory_owners_test.rs"
|
|
55
67
|
|
|
68
|
+
[[test]]
|
|
69
|
+
name = "run_config_executable_override_test"
|
|
70
|
+
path = "tests/run_config_executable_override_test.rs"
|
|
71
|
+
|
|
56
72
|
[[test]]
|
|
57
73
|
name = "runner_api"
|
|
58
74
|
path = "tests/runner_api.rs"
|
|
@@ -213,6 +213,15 @@ codeowners gv --no-cache
|
|
|
213
213
|
- `vendored_gems_path` (default: `'vendored/'`)
|
|
214
214
|
- `cache_directory` (default: `'tmp/cache/codeowners'`)
|
|
215
215
|
- `ignore_dirs` (default includes: `.git`, `node_modules`, `tmp`, etc.)
|
|
216
|
+
- `executable_name` (default: `'codeowners'`): Customize the command name shown in validation error messages. Useful when using `codeowners-rs` via wrappers like the [code_ownership](https://github.com/rubyatscale/code_ownership) Ruby gem.
|
|
217
|
+
|
|
218
|
+
Example configuration with custom executable name:
|
|
219
|
+
|
|
220
|
+
```yaml
|
|
221
|
+
owned_globs:
|
|
222
|
+
- '{app,components,config,frontend,lib,packs,spec}/**/*.{rb,rake,js,jsx,ts,tsx}'
|
|
223
|
+
executable_name: 'bin/codeownership' # For Ruby gem wrapper
|
|
224
|
+
```
|
|
216
225
|
|
|
217
226
|
See examples in `tests/fixtures/**/config/` for reference setups.
|
|
218
227
|
|
|
@@ -244,9 +253,10 @@ use codeowners::runner::{RunConfig, for_file, teams_for_files_from_codeowners};
|
|
|
244
253
|
fn main() {
|
|
245
254
|
let run_config = RunConfig {
|
|
246
255
|
project_root: std::path::PathBuf::from("."),
|
|
247
|
-
codeowners_file_path: std::path::PathBuf::from(".github/CODEOWNERS"),
|
|
256
|
+
codeowners_file_path: Some(std::path::PathBuf::from(".github/CODEOWNERS")), // optional, if None provided, will be resolved from config/env
|
|
248
257
|
config_path: std::path::PathBuf::from("config/code_ownership.yml"),
|
|
249
258
|
no_cache: true, // set false to enable on-disk caching
|
|
259
|
+
executable_name: None,
|
|
250
260
|
};
|
|
251
261
|
|
|
252
262
|
// Find owner for a single file using the optimized path (not just CODEOWNERS)
|
|
@@ -65,9 +65,9 @@ struct Args {
|
|
|
65
65
|
#[command(subcommand)]
|
|
66
66
|
command: Command,
|
|
67
67
|
|
|
68
|
-
/// Path for the CODEOWNERS file.
|
|
69
|
-
#[arg(long
|
|
70
|
-
codeowners_file_path: PathBuf
|
|
68
|
+
/// Path for the CODEOWNERS file (overrides codeowners_path from the config) [default: .github/CODEOWNERS]
|
|
69
|
+
#[arg(long)]
|
|
70
|
+
codeowners_file_path: Option<PathBuf>,
|
|
71
71
|
/// Path for the configuration file
|
|
72
72
|
#[arg(long, default_value = "./config/code_ownership.yml")]
|
|
73
73
|
config_path: PathBuf,
|
|
@@ -93,8 +93,11 @@ impl Args {
|
|
|
93
93
|
Ok(self.absolute_path(&self.config_path)?.clean())
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
fn absolute_codeowners_path(&self) -> Result<PathBuf
|
|
97
|
-
|
|
96
|
+
fn absolute_codeowners_path(&self) -> Result<Option<PathBuf>, RunnerError> {
|
|
97
|
+
match &self.codeowners_file_path {
|
|
98
|
+
Some(path) => Ok(Some(self.absolute_path(path)?.clean())),
|
|
99
|
+
None => Ok(None),
|
|
100
|
+
}
|
|
98
101
|
}
|
|
99
102
|
|
|
100
103
|
fn absolute_path(&self, path: &Path) -> Result<PathBuf, RunnerError> {
|
|
@@ -114,6 +117,7 @@ pub fn cli() -> Result<RunResult, RunnerError> {
|
|
|
114
117
|
codeowners_file_path,
|
|
115
118
|
project_root,
|
|
116
119
|
no_cache: args.no_cache,
|
|
120
|
+
executable_name: None,
|
|
117
121
|
};
|
|
118
122
|
|
|
119
123
|
let runner_result = match args.command {
|
|
@@ -25,6 +25,12 @@ pub struct Config {
|
|
|
25
25
|
|
|
26
26
|
#[serde(default = "default_ignore_dirs")]
|
|
27
27
|
pub ignore_dirs: Vec<String>,
|
|
28
|
+
|
|
29
|
+
#[serde(default = "default_executable_name")]
|
|
30
|
+
pub executable_name: String,
|
|
31
|
+
|
|
32
|
+
#[serde(default = "default_codeowners_path")]
|
|
33
|
+
pub codeowners_path: String,
|
|
28
34
|
}
|
|
29
35
|
|
|
30
36
|
#[allow(dead_code)]
|
|
@@ -61,9 +67,12 @@ fn vendored_gems_path() -> String {
|
|
|
61
67
|
"vendored/".to_string()
|
|
62
68
|
}
|
|
63
69
|
|
|
70
|
+
fn default_executable_name() -> String {
|
|
71
|
+
"codeowners generate".to_string()
|
|
72
|
+
}
|
|
73
|
+
|
|
64
74
|
fn default_ignore_dirs() -> Vec<String> {
|
|
65
75
|
vec![
|
|
66
|
-
".cursor".to_owned(),
|
|
67
76
|
".git".to_owned(),
|
|
68
77
|
".idea".to_owned(),
|
|
69
78
|
".vscode".to_owned(),
|
|
@@ -78,6 +87,10 @@ fn default_ignore_dirs() -> Vec<String> {
|
|
|
78
87
|
]
|
|
79
88
|
}
|
|
80
89
|
|
|
90
|
+
fn default_codeowners_path() -> String {
|
|
91
|
+
".github".to_string()
|
|
92
|
+
}
|
|
93
|
+
|
|
81
94
|
impl Config {
|
|
82
95
|
pub fn load_from_path(path: &Path) -> std::result::Result<Self, String> {
|
|
83
96
|
let file = File::open(path).map_err(|e| format!("Can't open config file: {} ({})", path.to_string_lossy(), e))?;
|
|
@@ -121,6 +134,73 @@ mod tests {
|
|
|
121
134
|
vec!["frontend/**/node_modules/**/*", "frontend/**/__generated__/**/*"]
|
|
122
135
|
);
|
|
123
136
|
assert_eq!(config.vendored_gems_path, "vendored/");
|
|
137
|
+
assert_eq!(config.executable_name, "codeowners generate");
|
|
138
|
+
Ok(())
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
#[test]
|
|
142
|
+
fn test_parse_config_with_custom_executable_name() -> Result<(), Box<dyn Error>> {
|
|
143
|
+
let temp_dir = tempdir()?;
|
|
144
|
+
let config_path = temp_dir.path().join("config.yml");
|
|
145
|
+
let config_str = indoc! {"
|
|
146
|
+
---
|
|
147
|
+
owned_globs:
|
|
148
|
+
- \"**/*.rb\"
|
|
149
|
+
executable_name: my-custom-codeowners
|
|
150
|
+
"};
|
|
151
|
+
fs::write(&config_path, config_str)?;
|
|
152
|
+
let config_file = File::open(&config_path)?;
|
|
153
|
+
let config: Config = serde_yaml::from_reader(config_file)?;
|
|
154
|
+
assert_eq!(config.executable_name, "my-custom-codeowners");
|
|
155
|
+
Ok(())
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
#[test]
|
|
159
|
+
fn test_executable_name_defaults_when_not_specified() -> Result<(), Box<dyn Error>> {
|
|
160
|
+
let temp_dir = tempdir()?;
|
|
161
|
+
let config_path = temp_dir.path().join("config.yml");
|
|
162
|
+
let config_str = indoc! {"
|
|
163
|
+
---
|
|
164
|
+
owned_globs:
|
|
165
|
+
- \"**/*.rb\"
|
|
166
|
+
"};
|
|
167
|
+
fs::write(&config_path, config_str)?;
|
|
168
|
+
let config_file = File::open(&config_path)?;
|
|
169
|
+
let config: Config = serde_yaml::from_reader(config_file)?;
|
|
170
|
+
assert_eq!(config.executable_name, "codeowners generate");
|
|
171
|
+
Ok(())
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
#[test]
|
|
175
|
+
fn test_codeowners_path_defaults_when_not_specified() -> Result<(), Box<dyn Error>> {
|
|
176
|
+
let temp_dir = tempdir()?;
|
|
177
|
+
let config_path = temp_dir.path().join("config.yml");
|
|
178
|
+
let config_str = indoc! {"
|
|
179
|
+
---
|
|
180
|
+
owned_globs:
|
|
181
|
+
- \"**/*.rb\"
|
|
182
|
+
"};
|
|
183
|
+
fs::write(&config_path, config_str)?;
|
|
184
|
+
let config_file = File::open(&config_path)?;
|
|
185
|
+
let config: Config = serde_yaml::from_reader(config_file)?;
|
|
186
|
+
assert_eq!(config.codeowners_path, ".github");
|
|
187
|
+
Ok(())
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
#[test]
|
|
191
|
+
fn test_codeowners_path_can_be_customized() -> Result<(), Box<dyn Error>> {
|
|
192
|
+
let temp_dir = tempdir()?;
|
|
193
|
+
let config_path = temp_dir.path().join("config.yml");
|
|
194
|
+
let config_str = indoc! {"
|
|
195
|
+
---
|
|
196
|
+
owned_globs:
|
|
197
|
+
- \"**/*.rb\"
|
|
198
|
+
codeowners_path: docs
|
|
199
|
+
"};
|
|
200
|
+
fs::write(&config_path, config_str)?;
|
|
201
|
+
let config_file = File::open(&config_path)?;
|
|
202
|
+
let config: Config = serde_yaml::from_reader(config_file)?;
|
|
203
|
+
assert_eq!(config.codeowners_path, "docs");
|
|
124
204
|
Ok(())
|
|
125
205
|
}
|
|
126
206
|
}
|
|
@@ -6,7 +6,7 @@ use crate::{
|
|
|
6
6
|
ownership::file_owner_resolver::find_file_owners,
|
|
7
7
|
project::Project,
|
|
8
8
|
project_builder::ProjectBuilder,
|
|
9
|
-
runner::{RunConfig, RunResult,
|
|
9
|
+
runner::{RunConfig, RunResult, config_from_run_config, team_for_file_from_codeowners},
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
pub fn crosscheck_owners(run_config: &RunConfig, cache: &Cache) -> RunResult {
|
|
@@ -43,16 +43,13 @@ fn do_crosscheck_owners(run_config: &RunConfig, cache: &Cache) -> Result<Vec<Str
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
fn load_config(run_config: &RunConfig) -> Result<Config, String> {
|
|
46
|
-
|
|
46
|
+
config_from_run_config(run_config).map_err(|e| e.to_string())
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
fn build_project(config: &Config, run_config: &RunConfig, cache: &Cache) -> Result<Project, String> {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
run_config.codeowners_file_path.clone(),
|
|
54
|
-
cache,
|
|
55
|
-
);
|
|
50
|
+
use crate::runner::resolve_codeowners_file_path;
|
|
51
|
+
let codeowners_file_path = resolve_codeowners_file_path(run_config, config);
|
|
52
|
+
let mut project_builder = ProjectBuilder::new(config, run_config.project_root.clone(), codeowners_file_path, cache);
|
|
56
53
|
project_builder.build().map_err(|e| e.to_string())
|
|
57
54
|
}
|
|
58
55
|
|
data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/codeowners_file_parser.rs
RENAMED
|
@@ -71,10 +71,10 @@ fn teams_by_github_team_name(team_file_glob: Vec<String>) -> HashMap<String, Tea
|
|
|
71
71
|
match glob::glob(&glob) {
|
|
72
72
|
Ok(paths) => {
|
|
73
73
|
for path in paths.filter_map(Result::ok) {
|
|
74
|
-
let team = match Team::from_team_file_path(path) {
|
|
74
|
+
let team = match Team::from_team_file_path(path.clone()) {
|
|
75
75
|
Ok(team) => team,
|
|
76
76
|
Err(e) => {
|
|
77
|
-
eprintln!("Error parsing team file: {}",
|
|
77
|
+
eprintln!("Error parsing team file: {e:?}, path: {}", path.display());
|
|
78
78
|
continue;
|
|
79
79
|
}
|
|
80
80
|
};
|
|
@@ -95,7 +95,7 @@ fn build_codeowners_lines_in_priority(codeowners_file_path: String) -> Vec<Strin
|
|
|
95
95
|
let codeowners_file = match fs::read_to_string(codeowners_file_path) {
|
|
96
96
|
Ok(codeowners_file) => codeowners_file,
|
|
97
97
|
Err(e) => {
|
|
98
|
-
// we can't return the error because it's not
|
|
98
|
+
// we can't return the error because it's not cloneable
|
|
99
99
|
eprintln!("Error reading codeowners file: {}", e);
|
|
100
100
|
return vec![];
|
|
101
101
|
}
|
data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_owner_resolver.rs
RENAMED
|
@@ -116,7 +116,7 @@ fn load_teams(project_root: &Path, team_file_globs: &[String]) -> std::result::R
|
|
|
116
116
|
match Team::from_team_file_path(path.clone()) {
|
|
117
117
|
Ok(team) => teams.push(team),
|
|
118
118
|
Err(e) => {
|
|
119
|
-
eprintln!("Error parsing team file: {}, path: {}",
|
|
119
|
+
eprintln!("Error parsing team file: {e:?}, path: {}", path.display());
|
|
120
120
|
continue;
|
|
121
121
|
}
|
|
122
122
|
}
|
|
@@ -293,6 +293,8 @@ mod tests {
|
|
|
293
293
|
vendored_gems_path: vendored_path.to_string(),
|
|
294
294
|
cache_directory: "tmp/cache/codeowners".to_string(),
|
|
295
295
|
ignore_dirs: vec![],
|
|
296
|
+
executable_name: "codeowners".to_string(),
|
|
297
|
+
codeowners_path: ".github".to_string(),
|
|
296
298
|
}
|
|
297
299
|
}
|
|
298
300
|
|
data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/package_mapper.rs
RENAMED
|
@@ -95,7 +95,7 @@ impl PackageMapper {
|
|
|
95
95
|
let packages: Vec<&Package> = packages.iter().filter(|package| &package.package_type == package_type).collect();
|
|
96
96
|
|
|
97
97
|
// Nested packs can create a duplicate ownership false positive.
|
|
98
|
-
// We avoid it by treating nested packs as a single top
|
|
98
|
+
// We avoid it by treating nested packs as a single top-level pack for the purposes of validation.
|
|
99
99
|
let packages = remove_nested_packages(&packages);
|
|
100
100
|
|
|
101
101
|
for package in packages {
|
|
@@ -147,7 +147,7 @@ mod tests {
|
|
|
147
147
|
use std::{error::Error, path::Path};
|
|
148
148
|
#[test]
|
|
149
149
|
fn test_remove_nested_packages() {
|
|
150
|
-
let packages =
|
|
150
|
+
let packages = [
|
|
151
151
|
Package {
|
|
152
152
|
path: Path::new("packs/a/package.yml").to_owned(),
|
|
153
153
|
package_type: PackageType::Ruby,
|
|
@@ -48,7 +48,7 @@ impl Display for Source {
|
|
|
48
48
|
Source::TeamGem => write!(f, "Owner specified in Team YML's `owned_gems`"),
|
|
49
49
|
Source::TeamGlob(glob) => write!(f, "Owner specified in Team YML as an owned_glob `{}`", glob),
|
|
50
50
|
Source::Package(package_path, glob) => {
|
|
51
|
-
write!(f, "Owner defined in `{}` with
|
|
51
|
+
write!(f, "Owner defined in `{}` with implicitly owned glob: `{}`", package_path, glob)
|
|
52
52
|
}
|
|
53
53
|
Source::TeamYml => write!(f, "Teams own their configuration files"),
|
|
54
54
|
}
|
|
@@ -208,7 +208,7 @@ mod tests {
|
|
|
208
208
|
);
|
|
209
209
|
assert_eq!(
|
|
210
210
|
Source::Package("packs/bam/packag.yml".to_string(), "packs/bam/**/**".to_string()).to_string(),
|
|
211
|
-
"Owner defined in `packs/bam/packag.yml` with
|
|
211
|
+
"Owner defined in `packs/bam/packag.yml` with implicitly owned glob: `packs/bam/**/**`"
|
|
212
212
|
);
|
|
213
213
|
assert_eq!(Source::TeamYml.to_string(), "Teams own their configuration files");
|
|
214
214
|
}
|
|
@@ -21,6 +21,7 @@ pub struct Validator {
|
|
|
21
21
|
pub project: Arc<Project>,
|
|
22
22
|
pub mappers: Vec<Box<dyn Mapper>>,
|
|
23
23
|
pub file_generator: FileGenerator,
|
|
24
|
+
pub executable_name: String,
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
#[derive(Debug)]
|
|
@@ -28,7 +29,7 @@ enum Error {
|
|
|
28
29
|
InvalidTeam { name: String, path: PathBuf },
|
|
29
30
|
FileWithoutOwner { path: PathBuf },
|
|
30
31
|
FileWithMultipleOwners { path: PathBuf, owners: Vec<Owner> },
|
|
31
|
-
CodeownershipFileIsStale,
|
|
32
|
+
CodeownershipFileIsStale { executable_name: String },
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
#[derive(Debug)]
|
|
@@ -130,12 +131,16 @@ impl Validator {
|
|
|
130
131
|
match self.project.get_codeowners_file() {
|
|
131
132
|
Ok(current_file) => {
|
|
132
133
|
if generated_file != current_file {
|
|
133
|
-
vec![Error::CodeownershipFileIsStale
|
|
134
|
+
vec![Error::CodeownershipFileIsStale {
|
|
135
|
+
executable_name: self.executable_name.to_string(),
|
|
136
|
+
}]
|
|
134
137
|
} else {
|
|
135
138
|
vec![]
|
|
136
139
|
}
|
|
137
140
|
}
|
|
138
|
-
Err(_) => vec![Error::CodeownershipFileIsStale
|
|
141
|
+
Err(_) => vec![Error::CodeownershipFileIsStale {
|
|
142
|
+
executable_name: self.executable_name.to_string(),
|
|
143
|
+
}],
|
|
139
144
|
}
|
|
140
145
|
}
|
|
141
146
|
|
|
@@ -161,13 +166,13 @@ impl Validator {
|
|
|
161
166
|
impl Error {
|
|
162
167
|
pub fn category(&self) -> String {
|
|
163
168
|
match self {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
169
|
+
Error::FileWithoutOwner { path: _ } => "Some files are missing ownership".to_owned(),
|
|
170
|
+
Error::FileWithMultipleOwners { path: _, owners: _ } => "Code ownership should only be defined for each file in one way. The following files have declared ownership in multiple ways".to_owned(),
|
|
171
|
+
Error::CodeownershipFileIsStale { executable_name } => {
|
|
172
|
+
format!("CODEOWNERS out of date. Run `{}` to update the CODEOWNERS file", executable_name)
|
|
173
|
+
}
|
|
174
|
+
Error::InvalidTeam { name: _, path: _ } => "Found invalid team annotations".to_owned(),
|
|
168
175
|
}
|
|
169
|
-
Error::InvalidTeam { name: _, path: _ } => "Found invalid team annotations".to_owned(),
|
|
170
|
-
}
|
|
171
176
|
}
|
|
172
177
|
|
|
173
178
|
pub fn messages(&self) -> Vec<String> {
|
|
@@ -187,7 +192,7 @@ impl Error {
|
|
|
187
192
|
|
|
188
193
|
vec![messages.join("\n")]
|
|
189
194
|
}
|
|
190
|
-
Error::CodeownershipFileIsStale => vec![],
|
|
195
|
+
Error::CodeownershipFileIsStale { executable_name: _ } => vec![],
|
|
191
196
|
Error::InvalidTeam { name, path } => vec![format!("- {} is referencing an invalid team - '{}'", path.to_string_lossy(), name)],
|
|
192
197
|
}
|
|
193
198
|
}
|