code_ownership 2.1.2 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config +2 -2
  3. data/Cargo.lock +9 -2
  4. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.cargo-checksum.json +1 -1
  5. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/Cargo.lock +8 -1
  6. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/Cargo.toml +2 -1
  7. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/file_generator.rs +119 -9
  8. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/validator.rs +77 -15
  9. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/executable_name_config_test.rs +25 -4
  10. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/.github/CODEOWNERS +1 -1
  11. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/default_executable_name/.github/CODEOWNERS +1 -1
  12. data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/invalid_project_test.rs +30 -0
  13. data/ext/cargo-vendor/similar-2.7.0/.cargo/config.toml +2 -0
  14. data/ext/cargo-vendor/similar-2.7.0/.cargo-checksum.json +1 -0
  15. data/ext/cargo-vendor/similar-2.7.0/.cargo_vcs_info.json +6 -0
  16. data/ext/cargo-vendor/similar-2.7.0/.github/FUNDING.yml +1 -0
  17. data/ext/cargo-vendor/similar-2.7.0/.github/workflows/clippy.yml +16 -0
  18. data/ext/cargo-vendor/similar-2.7.0/.github/workflows/rustfmt.yml +16 -0
  19. data/ext/cargo-vendor/similar-2.7.0/.github/workflows/tests.yml +49 -0
  20. data/ext/cargo-vendor/similar-2.7.0/.vscode/settings.json +5 -0
  21. data/ext/cargo-vendor/similar-2.7.0/CHANGELOG.md +132 -0
  22. data/ext/cargo-vendor/similar-2.7.0/Cargo.lock +373 -0
  23. data/ext/cargo-vendor/similar-2.7.0/Cargo.lock.msrv +266 -0
  24. data/ext/cargo-vendor/similar-2.7.0/Cargo.toml +149 -0
  25. data/ext/cargo-vendor/similar-2.7.0/Cargo.toml.orig +73 -0
  26. data/ext/cargo-vendor/similar-2.7.0/LICENSE +201 -0
  27. data/ext/cargo-vendor/similar-2.7.0/Makefile +31 -0
  28. data/ext/cargo-vendor/similar-2.7.0/README.md +59 -0
  29. data/ext/cargo-vendor/similar-2.7.0/clippy.toml +1 -0
  30. data/ext/cargo-vendor/similar-2.7.0/examples/close-matches.rs +15 -0
  31. data/ext/cargo-vendor/similar-2.7.0/examples/large.rs +8 -0
  32. data/ext/cargo-vendor/similar-2.7.0/examples/nonstring.rs +13 -0
  33. data/ext/cargo-vendor/similar-2.7.0/examples/original-slices.rs +11 -0
  34. data/ext/cargo-vendor/similar-2.7.0/examples/patience.rs +48 -0
  35. data/ext/cargo-vendor/similar-2.7.0/examples/serde.rs +15 -0
  36. data/ext/cargo-vendor/similar-2.7.0/examples/terminal-inline.rs +60 -0
  37. data/ext/cargo-vendor/similar-2.7.0/examples/terminal.rs +20 -0
  38. data/ext/cargo-vendor/similar-2.7.0/examples/udiff.rs +24 -0
  39. data/ext/cargo-vendor/similar-2.7.0/scripts/wasmtime-wrapper.sh +4 -0
  40. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/capture.rs +117 -0
  41. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/compact.rs +351 -0
  42. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/hook.rs +178 -0
  43. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/lcs.rs +294 -0
  44. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/mod.rs +134 -0
  45. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/myers.rs +442 -0
  46. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/patience.rs +198 -0
  47. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/replace.rs +221 -0
  48. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__capture__capture_hook_grouping-2.snap +60 -0
  49. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__capture__capture_hook_grouping.snap +64 -0
  50. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__contiguous.snap +28 -0
  51. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__diff.snap +22 -0
  52. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__pat.snap +31 -0
  53. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__lcs__same.snap +12 -0
  54. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__contiguous.snap +28 -0
  55. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__deadline_reached.snap +22 -0
  56. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__diff.snap +22 -0
  57. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__myers__pat.snap +31 -0
  58. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__patience__patience.snap +45 -0
  59. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/snapshots/similar__algorithms__patience__patience_out_of_bounds_bug.snap +16 -0
  60. data/ext/cargo-vendor/similar-2.7.0/src/algorithms/utils.rs +379 -0
  61. data/ext/cargo-vendor/similar-2.7.0/src/common.rs +185 -0
  62. data/ext/cargo-vendor/similar-2.7.0/src/deadline_support.rs +37 -0
  63. data/ext/cargo-vendor/similar-2.7.0/src/iter.rs +195 -0
  64. data/ext/cargo-vendor/similar-2.7.0/src/lib.rs +176 -0
  65. data/ext/cargo-vendor/similar-2.7.0/src/snapshots/similar__udiff__unified_diff.snap +25 -0
  66. data/ext/cargo-vendor/similar-2.7.0/src/snapshots/similar__udiff__unified_diff_newline_hint-2.snap +10 -0
  67. data/ext/cargo-vendor/similar-2.7.0/src/snapshots/similar__udiff__unified_diff_newline_hint.snap +11 -0
  68. data/ext/cargo-vendor/similar-2.7.0/src/text/abstraction.rs +446 -0
  69. data/ext/cargo-vendor/similar-2.7.0/src/text/inline.rs +342 -0
  70. data/ext/cargo-vendor/similar-2.7.0/src/text/mod.rs +792 -0
  71. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__captured_ops.snap +22 -0
  72. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__captured_word_ops.snap +202 -0
  73. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__char_diff.snap +39 -0
  74. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__inline__line_ops_inline.snap +126 -0
  75. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__inline__serde.snap +107 -0
  76. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__lifetimes_on_iter.snap +42 -0
  77. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__line_ops.snap +42 -0
  78. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__serde.snap +55 -0
  79. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__serde_ops.snap +38 -0
  80. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__unified_diff.snap +12 -0
  81. data/ext/cargo-vendor/similar-2.7.0/src/text/snapshots/similar__text__virtual_newlines.snap +32 -0
  82. data/ext/cargo-vendor/similar-2.7.0/src/text/utils.rs +55 -0
  83. data/ext/cargo-vendor/similar-2.7.0/src/types.rs +502 -0
  84. data/ext/cargo-vendor/similar-2.7.0/src/udiff.rs +359 -0
  85. data/ext/cargo-vendor/similar-2.7.0/src/utils.rs +412 -0
  86. data/ext/code_ownership/Cargo.toml +1 -1
  87. data/lib/code_ownership/version.rb +1 -1
  88. metadata +252 -178
  89. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.github/CODEOWNERS +0 -0
  90. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.github/workflows/audit.yml +0 -0
  91. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.github/workflows/ci.yml +0 -0
  92. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.github/workflows/dotslash-config.json +0 -0
  93. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.rustfmt.toml +0 -0
  94. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/.rusty-hook.toml +0 -0
  95. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/AGENTS.md +0 -0
  96. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/CLAUDE.md +0 -0
  97. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/README.md +0 -0
  98. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/dev/run_benchmarks_for_file.sh +0 -0
  99. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/dev/run_benchmarks_for_gv.sh +0 -0
  100. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/rust-toolchain.toml +0 -0
  101. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/cache/file.rs +0 -0
  102. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/cache/mod.rs +0 -0
  103. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/cache/noop.rs +0 -0
  104. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/cli.rs +0 -0
  105. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/common_test.rs +0 -0
  106. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/config.rs +0 -0
  107. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/crosscheck.rs +0 -0
  108. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/lib.rs +0 -0
  109. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/main.rs +0 -0
  110. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/codeowners_file_parser.rs +0 -0
  111. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/codeowners_query.rs +0 -0
  112. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/file_owner_finder.rs +0 -0
  113. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/file_owner_resolver.rs +0 -0
  114. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/annotated_file_mapper.rs +0 -0
  115. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/directory_mapper.rs +0 -0
  116. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/escaper.rs +0 -0
  117. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/package_mapper.rs +0 -0
  118. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/team_gem_mapper.rs +0 -0
  119. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/team_glob_mapper.rs +0 -0
  120. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper/team_yml_mapper.rs +0 -0
  121. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership/mapper.rs +0 -0
  122. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/ownership.rs +0 -0
  123. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/path_utils.rs +0 -0
  124. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/project.rs +0 -0
  125. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/project_builder.rs +0 -0
  126. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/project_file_builder.rs +0 -0
  127. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/runner/api.rs +0 -0
  128. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/runner/types.rs +0 -0
  129. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/runner.rs +0 -0
  130. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/src/tracked_files.rs +0 -0
  131. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/cache_test.rs +0 -0
  132. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/codeowners_path_test.rs +0 -0
  133. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/common/mod.rs +0 -0
  134. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/crosscheck_owners_test.rs +0 -0
  135. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_codeowners_path/config/code_ownership.yml +0 -0
  136. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_codeowners_path/config/teams/test_team.yml +0 -0
  137. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_codeowners_path/docs/CODEOWNERS +0 -0
  138. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_codeowners_path/expected/CODEOWNERS +0 -0
  139. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_codeowners_path/ruby/app/models/test.rb +0 -0
  140. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/app/foo.rb +0 -0
  141. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/config/code_ownership.yml +0 -0
  142. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/config/teams/foo.yml +0 -0
  143. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/config/teams/payments.yml +0 -0
  144. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/custom_executable_name/ruby/app/payments/foo.rb +0 -0
  145. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/default_executable_name/app/bar.rb +0 -0
  146. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/default_executable_name/config/code_ownership.yml +0 -0
  147. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/default_executable_name/config/teams/bar.yml +0 -0
  148. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
  149. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
  150. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
  151. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
  152. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
  153. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
  154. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
  155. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
  156. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
  157. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
  158. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
  159. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
  160. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
  161. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/.github/CODEOWNERS +0 -0
  162. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/.keep +0 -0
  163. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/config/code_ownership.yml +0 -0
  164. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/config/teams/design.yml +0 -0
  165. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/config/teams/frontend.yml +0 -0
  166. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +0 -0
  167. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +0 -0
  168. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/src/index.tsx +0 -0
  169. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +0 -0
  170. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/src/button.tsx +0 -0
  171. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/missing_github_team/.github/CODEOWNERS +0 -0
  172. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/missing_github_team/config/code_ownership.yml +0 -0
  173. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/missing_github_team/config/teams/bad_team.yml +0 -0
  174. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/missing_github_team/config/teams/good.yml +0 -0
  175. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/missing_github_team/gems/pets/dog.rb +0 -0
  176. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
  177. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
  178. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/consumers/deep/nesting/nestdir/deep_file.rb +0 -0
  179. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
  180. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/services/.codeowner +0 -0
  181. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
  182. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/app/services/exciting/some_other_file.rb +0 -0
  183. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +0 -0
  184. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
  185. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +0 -0
  186. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/.github/CODEOWNERS +0 -0
  187. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/.ignore +0 -0
  188. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/config/code_ownership.yml +0 -0
  189. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
  190. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
  191. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
  192. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
  193. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/gems/pets/dog.rb +0 -0
  194. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
  195. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
  196. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
  197. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
  198. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
  199. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
  200. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +0 -0
  201. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
  202. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -0
  203. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
  204. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payments/foo/ownedby_payroll.rb +0 -0
  205. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
  206. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
  207. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
  208. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +0 -0
  209. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/views/foos/index.html.erb +0 -0
  210. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/app/views/foos/new.html.erb +0 -0
  211. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
  212. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
  213. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project/should_be_ignored/an_ignored_file.rb +0 -0
  214. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +0 -0
  215. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +0 -0
  216. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +0 -0
  217. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +0 -0
  218. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +0 -0
  219. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +0 -0
  220. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/package.json +0 -0
  221. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/src/picks/dp.tsx +0 -0
  222. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/package.json +0 -0
  223. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/src/item.tsx +0 -0
  224. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/package.json +0 -0
  225. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/field.tsx +0 -0
  226. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/fields/small.tsx +0 -0
  227. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/apollo/lib/apollo.rb +0 -0
  228. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/ivy/lib/ivy.rb +0 -0
  229. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/lager/lib/lager.rb +0 -0
  230. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/gems/summit/lib/summit.rb +0 -0
  231. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/games/app/services/stats.rb +0 -0
  232. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +0 -0
  233. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/locations/app/services/capacity.rb +0 -0
  234. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +0 -0
  235. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/schedule/app/services/date.rb +0 -0
  236. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +0 -0
  237. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/lib/util.rb +0 -0
  238. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/services/play.rb +0 -0
  239. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +0 -0
  240. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/.codeowner +0 -0
  241. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/db/price.rb +0 -0
  242. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/entertainment.rb +0 -0
  243. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/play.rb +0 -0
  244. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/giants/services/play.rb +0 -0
  245. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/fixtures/valid_project_with_overrides/ruby/app/rockies/services/play.rb +0 -0
  246. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/git_stage_test.rs +0 -0
  247. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/invalid_project_structure_test.rs +0 -0
  248. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/missing_github_team_test.rs +0 -0
  249. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/multiple_directory_owners_test.rs +0 -0
  250. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/run_config_executable_override_test.rs +0 -0
  251. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/runner_api.rs +0 -0
  252. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/untracked_files_test.rs +0 -0
  253. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/valid_project_test.rs +0 -0
  254. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/valid_project_with_overrides_test.rs +0 -0
  255. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tests/validate_files_test.rs +0 -0
  256. /data/ext/cargo-vendor/{codeowners-0.3.2 → codeowners-0.3.3}/tmp/.gitkeep +0 -0
@@ -0,0 +1,294 @@
1
+ //! LCS diff algorithm.
2
+ //!
3
+ //! * time: `O((NM)D log (M)D)`
4
+ //! * space `O(MN)`
5
+ use std::collections::BTreeMap;
6
+ use std::ops::{Index, Range};
7
+
8
+ use crate::algorithms::utils::{common_prefix_len, common_suffix_len, is_empty_range};
9
+ use crate::algorithms::DiffHook;
10
+ use crate::deadline_support::{deadline_exceeded, Instant};
11
+
12
+ /// LCS diff algorithm.
13
+ ///
14
+ /// Diff `old`, between indices `old_range` and `new` between indices `new_range`.
15
+ ///
16
+ /// This diff is done with an optional deadline that defines the maximal
17
+ /// execution time permitted before it bails and falls back to an very bad
18
+ /// approximation. Deadlines with LCS do not make a lot of sense and should
19
+ /// not be used.
20
+ pub fn diff<Old, New, D>(
21
+ d: &mut D,
22
+ old: &Old,
23
+ old_range: Range<usize>,
24
+ new: &New,
25
+ new_range: Range<usize>,
26
+ ) -> Result<(), D::Error>
27
+ where
28
+ Old: Index<usize> + ?Sized,
29
+ New: Index<usize> + ?Sized,
30
+ D: DiffHook,
31
+ New::Output: PartialEq<Old::Output>,
32
+ {
33
+ diff_deadline(d, old, old_range, new, new_range, None)
34
+ }
35
+
36
+ /// LCS diff algorithm.
37
+ ///
38
+ /// Diff `old`, between indices `old_range` and `new` between indices `new_range`.
39
+ ///
40
+ /// This diff is done with an optional deadline that defines the maximal
41
+ /// execution time permitted before it bails and falls back to an approximation.
42
+ pub fn diff_deadline<Old, New, D>(
43
+ d: &mut D,
44
+ old: &Old,
45
+ old_range: Range<usize>,
46
+ new: &New,
47
+ new_range: Range<usize>,
48
+ deadline: Option<Instant>,
49
+ ) -> Result<(), D::Error>
50
+ where
51
+ Old: Index<usize> + ?Sized,
52
+ New: Index<usize> + ?Sized,
53
+ D: DiffHook,
54
+ New::Output: PartialEq<Old::Output>,
55
+ {
56
+ if is_empty_range(&new_range) {
57
+ d.delete(old_range.start, old_range.len(), new_range.start)?;
58
+ d.finish()?;
59
+ return Ok(());
60
+ } else if is_empty_range(&old_range) {
61
+ d.insert(old_range.start, new_range.start, new_range.len())?;
62
+ d.finish()?;
63
+ return Ok(());
64
+ }
65
+
66
+ let common_prefix_len = common_prefix_len(old, old_range.clone(), new, new_range.clone());
67
+ let common_suffix_len = common_suffix_len(
68
+ old,
69
+ old_range.start + common_prefix_len..old_range.end,
70
+ new,
71
+ new_range.start + common_prefix_len..new_range.end,
72
+ );
73
+
74
+ // If the sequences are not different then we're done
75
+ if common_prefix_len == old_range.len() && (old_range.len() == new_range.len()) {
76
+ d.equal(0, 0, old_range.len())?;
77
+ d.finish()?;
78
+ return Ok(());
79
+ }
80
+
81
+ let maybe_table = make_table(
82
+ old,
83
+ common_prefix_len..(old_range.len() - common_suffix_len),
84
+ new,
85
+ common_prefix_len..(new_range.len() - common_suffix_len),
86
+ deadline,
87
+ );
88
+ let mut old_idx = 0;
89
+ let mut new_idx = 0;
90
+ let new_len = new_range.len() - common_prefix_len - common_suffix_len;
91
+ let old_len = old_range.len() - common_prefix_len - common_suffix_len;
92
+
93
+ if common_prefix_len > 0 {
94
+ d.equal(old_range.start, new_range.start, common_prefix_len)?;
95
+ }
96
+
97
+ if let Some(table) = maybe_table {
98
+ while new_idx < new_len && old_idx < old_len {
99
+ let old_orig_idx = old_range.start + common_prefix_len + old_idx;
100
+ let new_orig_idx = new_range.start + common_prefix_len + new_idx;
101
+
102
+ if new[new_orig_idx] == old[old_orig_idx] {
103
+ d.equal(old_orig_idx, new_orig_idx, 1)?;
104
+ old_idx += 1;
105
+ new_idx += 1;
106
+ } else if table.get(&(new_idx, old_idx + 1)).unwrap_or(&0)
107
+ >= table.get(&(new_idx + 1, old_idx)).unwrap_or(&0)
108
+ {
109
+ d.delete(old_orig_idx, 1, new_orig_idx)?;
110
+ old_idx += 1;
111
+ } else {
112
+ d.insert(old_orig_idx, new_orig_idx, 1)?;
113
+ new_idx += 1;
114
+ }
115
+ }
116
+ } else {
117
+ let old_orig_idx = old_range.start + common_prefix_len + old_idx;
118
+ let new_orig_idx = new_range.start + common_prefix_len + new_idx;
119
+ d.delete(old_orig_idx, old_len, new_orig_idx)?;
120
+ d.insert(old_orig_idx, new_orig_idx, new_len)?;
121
+ }
122
+
123
+ if old_idx < old_len {
124
+ d.delete(
125
+ old_range.start + common_prefix_len + old_idx,
126
+ old_len - old_idx,
127
+ new_range.start + common_prefix_len + new_idx,
128
+ )?;
129
+ old_idx += old_len - old_idx;
130
+ }
131
+
132
+ if new_idx < new_len {
133
+ d.insert(
134
+ old_range.start + common_prefix_len + old_idx,
135
+ new_range.start + common_prefix_len + new_idx,
136
+ new_len - new_idx,
137
+ )?;
138
+ }
139
+
140
+ if common_suffix_len > 0 {
141
+ d.equal(
142
+ old_range.start + old_len + common_prefix_len,
143
+ new_range.start + new_len + common_prefix_len,
144
+ common_suffix_len,
145
+ )?;
146
+ }
147
+
148
+ d.finish()
149
+ }
150
+
151
+ fn make_table<Old, New>(
152
+ old: &Old,
153
+ old_range: Range<usize>,
154
+ new: &New,
155
+ new_range: Range<usize>,
156
+ deadline: Option<Instant>,
157
+ ) -> Option<BTreeMap<(usize, usize), u32>>
158
+ where
159
+ Old: Index<usize> + ?Sized,
160
+ New: Index<usize> + ?Sized,
161
+ New::Output: PartialEq<Old::Output>,
162
+ {
163
+ let old_len = old_range.len();
164
+ let new_len = new_range.len();
165
+ let mut table = BTreeMap::new();
166
+
167
+ for i in (0..new_len).rev() {
168
+ // are we running for too long? give up on the table
169
+ if deadline_exceeded(deadline) {
170
+ return None;
171
+ }
172
+
173
+ for j in (0..old_len).rev() {
174
+ let val = if new[i] == old[j] {
175
+ table.get(&(i + 1, j + 1)).unwrap_or(&0) + 1
176
+ } else {
177
+ *table
178
+ .get(&(i + 1, j))
179
+ .unwrap_or(&0)
180
+ .max(table.get(&(i, j + 1)).unwrap_or(&0))
181
+ };
182
+ if val > 0 {
183
+ table.insert((i, j), val);
184
+ }
185
+ }
186
+ }
187
+
188
+ Some(table)
189
+ }
190
+
191
+ #[test]
192
+ fn test_table() {
193
+ let table = make_table(&vec![2, 3], 0..2, &vec![0, 1, 2], 0..3, None).unwrap();
194
+ let expected = {
195
+ let mut m = BTreeMap::new();
196
+ m.insert((1, 0), 1);
197
+ m.insert((0, 0), 1);
198
+ m.insert((2, 0), 1);
199
+ m
200
+ };
201
+ assert_eq!(table, expected);
202
+ }
203
+
204
+ #[test]
205
+ fn test_diff() {
206
+ let a: &[usize] = &[0, 1, 2, 3, 4];
207
+ let b: &[usize] = &[0, 1, 2, 9, 4];
208
+
209
+ let mut d = crate::algorithms::Replace::new(crate::algorithms::Capture::new());
210
+ diff(&mut d, a, 0..a.len(), b, 0..b.len()).unwrap();
211
+ insta::assert_debug_snapshot!(d.into_inner().ops());
212
+ }
213
+
214
+ #[test]
215
+ fn test_contiguous() {
216
+ let a: &[usize] = &[0, 1, 2, 3, 4, 4, 4, 5];
217
+ let b: &[usize] = &[0, 1, 2, 8, 9, 4, 4, 7];
218
+
219
+ let mut d = crate::algorithms::Replace::new(crate::algorithms::Capture::new());
220
+ diff(&mut d, a, 0..a.len(), b, 0..b.len()).unwrap();
221
+ insta::assert_debug_snapshot!(d.into_inner().ops());
222
+ }
223
+
224
+ #[test]
225
+ fn test_pat() {
226
+ let a: &[usize] = &[0, 1, 3, 4, 5];
227
+ let b: &[usize] = &[0, 1, 4, 5, 8, 9];
228
+
229
+ let mut d = crate::algorithms::Capture::new();
230
+ diff(&mut d, a, 0..a.len(), b, 0..b.len()).unwrap();
231
+ insta::assert_debug_snapshot!(d.ops());
232
+ }
233
+
234
+ #[test]
235
+ fn test_same() {
236
+ let a: &[usize] = &[0, 1, 2, 3, 4, 4, 4, 5];
237
+ let b: &[usize] = &[0, 1, 2, 3, 4, 4, 4, 5];
238
+
239
+ let mut d = crate::algorithms::Capture::new();
240
+ diff(&mut d, a, 0..a.len(), b, 0..b.len()).unwrap();
241
+ insta::assert_debug_snapshot!(d.ops());
242
+ }
243
+
244
+ #[test]
245
+ fn test_finish_called() {
246
+ struct HasRunFinish(bool);
247
+
248
+ impl DiffHook for HasRunFinish {
249
+ type Error = ();
250
+ fn finish(&mut self) -> Result<(), Self::Error> {
251
+ self.0 = true;
252
+ Ok(())
253
+ }
254
+ }
255
+
256
+ let mut d = HasRunFinish(false);
257
+ let slice = &[1, 2];
258
+ let slice2 = &[1, 2, 3];
259
+ diff(&mut d, slice, 0..slice.len(), slice2, 0..slice2.len()).unwrap();
260
+ assert!(d.0);
261
+
262
+ let mut d = HasRunFinish(false);
263
+ let slice = &[1, 2];
264
+ diff(&mut d, slice, 0..slice.len(), slice, 0..slice.len()).unwrap();
265
+ assert!(d.0);
266
+
267
+ let mut d = HasRunFinish(false);
268
+ let slice: &[u8] = &[];
269
+ diff(&mut d, slice, 0..slice.len(), slice, 0..slice.len()).unwrap();
270
+ assert!(d.0);
271
+ }
272
+
273
+ #[test]
274
+ fn test_bad_range_regression() {
275
+ use crate::algorithms::Capture;
276
+ use crate::DiffOp;
277
+ let mut d = Capture::new();
278
+ diff(&mut d, &[0], 0..1, &[0, 0], 0..2).unwrap();
279
+ assert_eq!(
280
+ d.into_ops(),
281
+ vec![
282
+ DiffOp::Equal {
283
+ old_index: 0,
284
+ new_index: 0,
285
+ len: 1
286
+ },
287
+ DiffOp::Insert {
288
+ old_index: 1,
289
+ new_index: 1,
290
+ new_len: 1
291
+ }
292
+ ]
293
+ );
294
+ }
@@ -0,0 +1,134 @@
1
+ //! Various diff (longest common subsequence) algorithms.
2
+ //!
3
+ //! The implementations of the algorithms in this module are relatively low
4
+ //! level and expose the most generic bounds possible for the algorithm. To
5
+ //! use them you would typically use the higher level API if possible but
6
+ //! direct access to these algorithms can be useful in some cases.
7
+ //!
8
+ //! All these algorithms provide a `diff` function which takes two indexable
9
+ //! objects (for instance slices) and a [`DiffHook`]. As the
10
+ //! diff is generated the diff hook is invoked. Note that the diff hook does
11
+ //! not get access to the actual values but only the indexes. This is why the
12
+ //! diff hook is not used outside of the raw algorithm implementations as for
13
+ //! most situations access to the values is useful of required.
14
+ //!
15
+ //! The algorithms module really is the most low-level module in similar and
16
+ //! generally not the place to start.
17
+ //!
18
+ //! # Example
19
+ //!
20
+ //! This is a simple example that shows how you can calculate the difference
21
+ //! between two sequences and capture the ops into a vector.
22
+ //!
23
+ //! ```rust
24
+ //! use similar::algorithms::{Algorithm, Replace, Capture, diff_slices};
25
+ //!
26
+ //! let a = vec![1, 2, 3, 4, 5];
27
+ //! let b = vec![1, 2, 3, 4, 7];
28
+ //! let mut d = Replace::new(Capture::new());
29
+ //! diff_slices(Algorithm::Myers, &mut d, &a, &b).unwrap();
30
+ //! let ops = d.into_inner().into_ops();
31
+ //! ```
32
+ //!
33
+ //! The above example is equivalent to using
34
+ //! [`capture_diff_slices`](crate::capture_diff_slices).
35
+
36
+ mod capture;
37
+ mod compact;
38
+ mod hook;
39
+ mod replace;
40
+ pub(crate) mod utils;
41
+
42
+ use std::hash::Hash;
43
+ use std::ops::{Index, Range};
44
+
45
+ use crate::deadline_support::Instant;
46
+ pub use capture::Capture;
47
+ pub use compact::Compact;
48
+ pub use hook::{DiffHook, NoFinishHook};
49
+ pub use replace::Replace;
50
+ pub use utils::IdentifyDistinct;
51
+
52
+ #[doc(no_inline)]
53
+ pub use crate::Algorithm;
54
+
55
+ pub mod lcs;
56
+ pub mod myers;
57
+ pub mod patience;
58
+
59
+ /// Creates a diff between old and new with the given algorithm.
60
+ ///
61
+ /// Diffs `old`, between indices `old_range` and `new` between indices `new_range`.
62
+ pub fn diff<Old, New, D>(
63
+ alg: Algorithm,
64
+ d: &mut D,
65
+ old: &Old,
66
+ old_range: Range<usize>,
67
+ new: &New,
68
+ new_range: Range<usize>,
69
+ ) -> Result<(), D::Error>
70
+ where
71
+ Old: Index<usize> + ?Sized,
72
+ New: Index<usize> + ?Sized,
73
+ D: DiffHook,
74
+ Old::Output: Hash + Eq + Ord,
75
+ New::Output: PartialEq<Old::Output> + Hash + Eq + Ord,
76
+ {
77
+ diff_deadline(alg, d, old, old_range, new, new_range, None)
78
+ }
79
+
80
+ /// Creates a diff between old and new with the given algorithm with deadline.
81
+ ///
82
+ /// Diffs `old`, between indices `old_range` and `new` between indices `new_range`.
83
+ ///
84
+ /// This diff is done with an optional deadline that defines the maximal
85
+ /// execution time permitted before it bails and falls back to an approximation.
86
+ /// Note that not all algorithms behave well if they reach the deadline (LCS
87
+ /// for instance produces a very simplistic diff when the deadline is reached
88
+ /// in all cases).
89
+ pub fn diff_deadline<Old, New, D>(
90
+ alg: Algorithm,
91
+ d: &mut D,
92
+ old: &Old,
93
+ old_range: Range<usize>,
94
+ new: &New,
95
+ new_range: Range<usize>,
96
+ deadline: Option<Instant>,
97
+ ) -> Result<(), D::Error>
98
+ where
99
+ Old: Index<usize> + ?Sized,
100
+ New: Index<usize> + ?Sized,
101
+ D: DiffHook,
102
+ Old::Output: Hash + Eq + Ord,
103
+ New::Output: PartialEq<Old::Output> + Hash + Eq + Ord,
104
+ {
105
+ match alg {
106
+ Algorithm::Myers => myers::diff_deadline(d, old, old_range, new, new_range, deadline),
107
+ Algorithm::Patience => patience::diff_deadline(d, old, old_range, new, new_range, deadline),
108
+ Algorithm::Lcs => lcs::diff_deadline(d, old, old_range, new, new_range, deadline),
109
+ }
110
+ }
111
+
112
+ /// Shortcut for diffing slices with a specific algorithm.
113
+ pub fn diff_slices<D, T>(alg: Algorithm, d: &mut D, old: &[T], new: &[T]) -> Result<(), D::Error>
114
+ where
115
+ D: DiffHook,
116
+ T: Eq + Hash + Ord,
117
+ {
118
+ diff(alg, d, old, 0..old.len(), new, 0..new.len())
119
+ }
120
+
121
+ /// Shortcut for diffing slices with a specific algorithm.
122
+ pub fn diff_slices_deadline<D, T>(
123
+ alg: Algorithm,
124
+ d: &mut D,
125
+ old: &[T],
126
+ new: &[T],
127
+ deadline: Option<Instant>,
128
+ ) -> Result<(), D::Error>
129
+ where
130
+ D: DiffHook,
131
+ T: Eq + Hash + Ord,
132
+ {
133
+ diff_deadline(alg, d, old, 0..old.len(), new, 0..new.len(), deadline)
134
+ }