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