git 4.3.2 → 5.0.0.beta.1

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 (280) hide show
  1. checksums.yaml +4 -4
  2. data/.github/copilot-instructions.md +67 -2705
  3. data/.github/pull_request_template.md +3 -1
  4. data/.github/skills/breaking-change-analysis/SKILL.md +102 -0
  5. data/.github/skills/ci-cd-troubleshooting/SKILL.md +264 -0
  6. data/.github/skills/command-implementation/REFERENCE.md +993 -0
  7. data/.github/skills/command-implementation/SKILL.md +229 -0
  8. data/.github/skills/command-test-conventions/SKILL.md +660 -0
  9. data/.github/skills/command-yard-documentation/SKILL.md +426 -0
  10. data/.github/skills/dependency-management/SKILL.md +72 -0
  11. data/.github/skills/development-workflow/SKILL.md +506 -0
  12. data/.github/skills/extract-command-from-lib/SKILL.md +487 -0
  13. data/.github/skills/extract-facade-from-base-lib/SKILL.md +586 -0
  14. data/.github/skills/facade-implementation/REFERENCE.md +840 -0
  15. data/.github/skills/facade-implementation/SKILL.md +260 -0
  16. data/.github/skills/facade-test-conventions/SKILL.md +380 -0
  17. data/.github/skills/facade-yard-documentation/SKILL.md +429 -0
  18. data/.github/skills/make-skill-template/SKILL.md +176 -0
  19. data/.github/skills/pr-readiness-review/SKILL.md +185 -0
  20. data/.github/skills/project-context/SKILL.md +313 -0
  21. data/.github/skills/pull-request-review/SKILL.md +168 -0
  22. data/.github/skills/refactor-command-to-commandlineresult/SKILL.md +131 -0
  23. data/.github/skills/release-management/SKILL.md +125 -0
  24. data/.github/skills/review-arguments-dsl/CHECKLIST.md +788 -0
  25. data/.github/skills/review-arguments-dsl/SKILL.md +214 -0
  26. data/.github/skills/review-backward-compatibility/SKILL.md +275 -0
  27. data/.github/skills/review-cross-command-consistency/SKILL.md +139 -0
  28. data/.github/skills/reviewing-skills/SKILL.md +189 -0
  29. data/.github/skills/rspec-unit-testing-standards/SKILL.md +639 -0
  30. data/.github/skills/tdd-refactor-step/SKILL.md +236 -0
  31. data/.github/skills/test-debugging/SKILL.md +160 -0
  32. data/.github/skills/yard-documentation/SKILL.md +793 -0
  33. data/.github/workflows/continuous_integration.yml +3 -2
  34. data/.github/workflows/enforce_conventional_commits.yml +1 -1
  35. data/.github/workflows/experimental_continuous_integration.yml +2 -2
  36. data/.github/workflows/release.yml +3 -4
  37. data/.gitignore +8 -0
  38. data/.husky/pre-commit +13 -0
  39. data/.release-please-manifest.json +1 -1
  40. data/.rspec +3 -0
  41. data/.rubocop.yml +7 -3
  42. data/.rubocop_todo.yml +23 -5
  43. data/.yardopts +1 -0
  44. data/CHANGELOG.md +0 -40
  45. data/CONTRIBUTING.md +694 -53
  46. data/README.md +17 -5
  47. data/Rakefile +61 -9
  48. data/commitlint.test +4 -0
  49. data/git.gemspec +14 -8
  50. data/lib/git/args_builder.rb +0 -8
  51. data/lib/git/base.rb +486 -410
  52. data/lib/git/branch.rb +380 -43
  53. data/lib/git/branch_delete_failure.rb +31 -0
  54. data/lib/git/branch_delete_result.rb +63 -0
  55. data/lib/git/branch_info.rb +178 -0
  56. data/lib/git/branches.rb +130 -24
  57. data/lib/git/command_line/base.rb +245 -0
  58. data/lib/git/command_line/capturing.rb +249 -0
  59. data/lib/git/command_line/result.rb +96 -0
  60. data/lib/git/command_line/streaming.rb +194 -0
  61. data/lib/git/command_line.rb +43 -322
  62. data/lib/git/command_line_result.rb +4 -88
  63. data/lib/git/commands/add.rb +131 -0
  64. data/lib/git/commands/am/abort.rb +43 -0
  65. data/lib/git/commands/am/apply.rb +252 -0
  66. data/lib/git/commands/am/continue.rb +43 -0
  67. data/lib/git/commands/am/quit.rb +43 -0
  68. data/lib/git/commands/am/retry.rb +47 -0
  69. data/lib/git/commands/am/show_current_patch.rb +64 -0
  70. data/lib/git/commands/am/skip.rb +42 -0
  71. data/lib/git/commands/am.rb +33 -0
  72. data/lib/git/commands/apply.rb +237 -0
  73. data/lib/git/commands/archive/list_formats.rb +46 -0
  74. data/lib/git/commands/archive.rb +140 -0
  75. data/lib/git/commands/arguments.rb +3510 -0
  76. data/lib/git/commands/base.rb +403 -0
  77. data/lib/git/commands/branch/copy.rb +94 -0
  78. data/lib/git/commands/branch/create.rb +173 -0
  79. data/lib/git/commands/branch/delete.rb +80 -0
  80. data/lib/git/commands/branch/list.rb +162 -0
  81. data/lib/git/commands/branch/move.rb +94 -0
  82. data/lib/git/commands/branch/set_upstream.rb +86 -0
  83. data/lib/git/commands/branch/show_current.rb +49 -0
  84. data/lib/git/commands/branch/unset_upstream.rb +57 -0
  85. data/lib/git/commands/branch.rb +34 -0
  86. data/lib/git/commands/cat_file/batch.rb +364 -0
  87. data/lib/git/commands/cat_file/filtered.rb +105 -0
  88. data/lib/git/commands/cat_file/raw.rb +210 -0
  89. data/lib/git/commands/cat_file.rb +49 -0
  90. data/lib/git/commands/checkout/branch.rb +151 -0
  91. data/lib/git/commands/checkout/files.rb +115 -0
  92. data/lib/git/commands/checkout.rb +38 -0
  93. data/lib/git/commands/checkout_index.rb +105 -0
  94. data/lib/git/commands/clean.rb +100 -0
  95. data/lib/git/commands/clone.rb +240 -0
  96. data/lib/git/commands/commit.rb +272 -0
  97. data/lib/git/commands/commit_tree.rb +100 -0
  98. data/lib/git/commands/config_option_syntax/add.rb +83 -0
  99. data/lib/git/commands/config_option_syntax/get.rb +117 -0
  100. data/lib/git/commands/config_option_syntax/get_all.rb +115 -0
  101. data/lib/git/commands/config_option_syntax/get_color.rb +91 -0
  102. data/lib/git/commands/config_option_syntax/get_color_bool.rb +93 -0
  103. data/lib/git/commands/config_option_syntax/get_regexp.rb +115 -0
  104. data/lib/git/commands/config_option_syntax/get_urlmatch.rb +102 -0
  105. data/lib/git/commands/config_option_syntax/list.rb +107 -0
  106. data/lib/git/commands/config_option_syntax/remove_section.rb +74 -0
  107. data/lib/git/commands/config_option_syntax/rename_section.rb +78 -0
  108. data/lib/git/commands/config_option_syntax/replace_all.rb +104 -0
  109. data/lib/git/commands/config_option_syntax/set.rb +114 -0
  110. data/lib/git/commands/config_option_syntax/unset.rb +89 -0
  111. data/lib/git/commands/config_option_syntax/unset_all.rb +89 -0
  112. data/lib/git/commands/config_option_syntax.rb +56 -0
  113. data/lib/git/commands/describe.rb +155 -0
  114. data/lib/git/commands/diff.rb +656 -0
  115. data/lib/git/commands/diff_files.rb +518 -0
  116. data/lib/git/commands/diff_index.rb +496 -0
  117. data/lib/git/commands/fetch.rb +352 -0
  118. data/lib/git/commands/fsck.rb +136 -0
  119. data/lib/git/commands/gc.rb +132 -0
  120. data/lib/git/commands/grep.rb +338 -0
  121. data/lib/git/commands/init.rb +99 -0
  122. data/lib/git/commands/log.rb +632 -0
  123. data/lib/git/commands/ls_files.rb +191 -0
  124. data/lib/git/commands/ls_remote.rb +155 -0
  125. data/lib/git/commands/ls_tree.rb +131 -0
  126. data/lib/git/commands/maintenance/register.rb +75 -0
  127. data/lib/git/commands/maintenance/run.rb +104 -0
  128. data/lib/git/commands/maintenance/start.rb +66 -0
  129. data/lib/git/commands/maintenance/stop.rb +55 -0
  130. data/lib/git/commands/maintenance/unregister.rb +79 -0
  131. data/lib/git/commands/maintenance.rb +31 -0
  132. data/lib/git/commands/merge/abort.rb +44 -0
  133. data/lib/git/commands/merge/continue.rb +44 -0
  134. data/lib/git/commands/merge/quit.rb +46 -0
  135. data/lib/git/commands/merge/start.rb +245 -0
  136. data/lib/git/commands/merge.rb +28 -0
  137. data/lib/git/commands/merge_base.rb +86 -0
  138. data/lib/git/commands/mv.rb +77 -0
  139. data/lib/git/commands/name_rev.rb +114 -0
  140. data/lib/git/commands/pull.rb +377 -0
  141. data/lib/git/commands/push.rb +246 -0
  142. data/lib/git/commands/read_tree.rb +149 -0
  143. data/lib/git/commands/remote/add.rb +91 -0
  144. data/lib/git/commands/remote/get_url.rb +66 -0
  145. data/lib/git/commands/remote/list.rb +54 -0
  146. data/lib/git/commands/remote/prune.rb +61 -0
  147. data/lib/git/commands/remote/remove.rb +52 -0
  148. data/lib/git/commands/remote/rename.rb +69 -0
  149. data/lib/git/commands/remote/set_branches.rb +63 -0
  150. data/lib/git/commands/remote/set_head.rb +82 -0
  151. data/lib/git/commands/remote/set_url.rb +71 -0
  152. data/lib/git/commands/remote/set_url_add.rb +61 -0
  153. data/lib/git/commands/remote/set_url_delete.rb +64 -0
  154. data/lib/git/commands/remote/show.rb +71 -0
  155. data/lib/git/commands/remote/update.rb +72 -0
  156. data/lib/git/commands/remote.rb +42 -0
  157. data/lib/git/commands/repack.rb +277 -0
  158. data/lib/git/commands/reset.rb +147 -0
  159. data/lib/git/commands/rev_parse.rb +297 -0
  160. data/lib/git/commands/revert/abort.rb +45 -0
  161. data/lib/git/commands/revert/continue.rb +57 -0
  162. data/lib/git/commands/revert/quit.rb +47 -0
  163. data/lib/git/commands/revert/skip.rb +44 -0
  164. data/lib/git/commands/revert/start.rb +153 -0
  165. data/lib/git/commands/revert.rb +29 -0
  166. data/lib/git/commands/rm.rb +114 -0
  167. data/lib/git/commands/show.rb +632 -0
  168. data/lib/git/commands/show_ref/exclude_existing.rb +120 -0
  169. data/lib/git/commands/show_ref/exists.rb +78 -0
  170. data/lib/git/commands/show_ref/list.rb +145 -0
  171. data/lib/git/commands/show_ref/verify.rb +120 -0
  172. data/lib/git/commands/show_ref.rb +42 -0
  173. data/lib/git/commands/stash/apply.rb +75 -0
  174. data/lib/git/commands/stash/branch.rb +65 -0
  175. data/lib/git/commands/stash/clear.rb +41 -0
  176. data/lib/git/commands/stash/create.rb +58 -0
  177. data/lib/git/commands/stash/drop.rb +67 -0
  178. data/lib/git/commands/stash/list.rb +39 -0
  179. data/lib/git/commands/stash/pop.rb +78 -0
  180. data/lib/git/commands/stash/push.rb +103 -0
  181. data/lib/git/commands/stash/show.rb +149 -0
  182. data/lib/git/commands/stash/store.rb +63 -0
  183. data/lib/git/commands/stash.rb +38 -0
  184. data/lib/git/commands/status.rb +169 -0
  185. data/lib/git/commands/symbolic_ref/delete.rb +68 -0
  186. data/lib/git/commands/symbolic_ref/read.rb +95 -0
  187. data/lib/git/commands/symbolic_ref/update.rb +76 -0
  188. data/lib/git/commands/symbolic_ref.rb +38 -0
  189. data/lib/git/commands/tag/create.rb +139 -0
  190. data/lib/git/commands/tag/delete.rb +55 -0
  191. data/lib/git/commands/tag/list.rb +143 -0
  192. data/lib/git/commands/tag/verify.rb +71 -0
  193. data/lib/git/commands/tag.rb +26 -0
  194. data/lib/git/commands/update_ref/batch.rb +140 -0
  195. data/lib/git/commands/update_ref/delete.rb +92 -0
  196. data/lib/git/commands/update_ref/update.rb +106 -0
  197. data/lib/git/commands/update_ref.rb +42 -0
  198. data/lib/git/commands/version.rb +52 -0
  199. data/lib/git/commands/worktree/add.rb +140 -0
  200. data/lib/git/commands/worktree/list.rb +64 -0
  201. data/lib/git/commands/worktree/lock.rb +58 -0
  202. data/lib/git/commands/worktree/management_base.rb +51 -0
  203. data/lib/git/commands/worktree/move.rb +66 -0
  204. data/lib/git/commands/worktree/prune.rb +67 -0
  205. data/lib/git/commands/worktree/remove.rb +63 -0
  206. data/lib/git/commands/worktree/repair.rb +76 -0
  207. data/lib/git/commands/worktree/unlock.rb +47 -0
  208. data/lib/git/commands/worktree.rb +43 -0
  209. data/lib/git/commands/write_tree.rb +68 -0
  210. data/lib/git/commands.rb +89 -0
  211. data/lib/git/detached_head_info.rb +54 -0
  212. data/lib/git/diff.rb +297 -7
  213. data/lib/git/diff_file_numstat_info.rb +29 -0
  214. data/lib/git/diff_file_patch_info.rb +134 -0
  215. data/lib/git/diff_file_raw_info.rb +127 -0
  216. data/lib/git/diff_info.rb +169 -0
  217. data/lib/git/diff_path_status.rb +78 -19
  218. data/lib/git/diff_result.rb +32 -0
  219. data/lib/git/diff_stats.rb +59 -14
  220. data/lib/git/dirstat_info.rb +86 -0
  221. data/lib/git/errors.rb +65 -2
  222. data/lib/git/execution_context/global.rb +56 -0
  223. data/lib/git/execution_context/repository.rb +147 -0
  224. data/lib/git/execution_context.rb +482 -0
  225. data/lib/git/file_ref.rb +74 -0
  226. data/lib/git/fsck_object.rb +9 -9
  227. data/lib/git/fsck_result.rb +1 -1
  228. data/lib/git/lib.rb +1606 -1028
  229. data/lib/git/log.rb +15 -2
  230. data/lib/git/object.rb +92 -22
  231. data/lib/git/parsers/branch.rb +224 -0
  232. data/lib/git/parsers/cat_file.rb +111 -0
  233. data/lib/git/parsers/diff.rb +585 -0
  234. data/lib/git/parsers/fsck.rb +133 -0
  235. data/lib/git/parsers/grep.rb +42 -0
  236. data/lib/git/parsers/ls_tree.rb +58 -0
  237. data/lib/git/parsers/stash.rb +208 -0
  238. data/lib/git/parsers/tag.rb +257 -0
  239. data/lib/git/remote.rb +133 -9
  240. data/lib/git/repository/branching.rb +572 -0
  241. data/lib/git/repository/committing.rb +191 -0
  242. data/lib/git/repository/configuring.rb +156 -0
  243. data/lib/git/repository/diffing.rb +775 -0
  244. data/lib/git/repository/inspecting.rb +153 -0
  245. data/lib/git/repository/logging.rb +247 -0
  246. data/lib/git/repository/merging.rb +295 -0
  247. data/lib/git/repository/object_operations.rb +1101 -0
  248. data/lib/git/repository/path_resolver.rb +207 -0
  249. data/lib/git/repository/remote_operations.rb +753 -0
  250. data/lib/git/repository/shared_private.rb +51 -0
  251. data/lib/git/repository/staging.rb +390 -0
  252. data/lib/git/repository/stashing.rb +107 -0
  253. data/lib/git/repository/status_operations.rb +180 -0
  254. data/lib/git/repository/worktree_operations.rb +159 -0
  255. data/lib/git/repository.rb +264 -1
  256. data/lib/git/stash.rb +85 -4
  257. data/lib/git/stash_info.rb +104 -0
  258. data/lib/git/stashes.rb +130 -13
  259. data/lib/git/status.rb +224 -18
  260. data/lib/git/tag_delete_failure.rb +31 -0
  261. data/lib/git/tag_delete_result.rb +63 -0
  262. data/lib/git/tag_info.rb +105 -0
  263. data/lib/git/version.rb +109 -2
  264. data/lib/git/version_constraint.rb +81 -0
  265. data/lib/git/worktree.rb +120 -5
  266. data/lib/git/worktrees.rb +107 -7
  267. data/lib/git.rb +114 -18
  268. data/redesign/1_architecture_existing.md +54 -18
  269. data/redesign/2_architecture_redesign.md +365 -46
  270. data/redesign/3_architecture_implementation.md +1451 -54
  271. data/tasks/gem_tasks.rake +4 -0
  272. data/tasks/npm_tasks.rake +7 -0
  273. data/tasks/rspec.rake +48 -0
  274. data/tasks/test.rake +13 -1
  275. data/tasks/yard.rake +34 -7
  276. metadata +349 -20
  277. data/lib/git/index.rb +0 -6
  278. data/lib/git/path.rb +0 -38
  279. data/lib/git/working_directory.rb +0 -6
  280. /data/{release-please-config.json → .release-please-config.json} +0 -0
@@ -0,0 +1,518 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git diff-files` command
8
+ #
9
+ # Compares the index (staging area) to the working tree, showing files that
10
+ # have been modified but not yet staged. This is the plumbing equivalent of
11
+ # checking for unstaged changes.
12
+ #
13
+ # @example Typical usage
14
+ # diff_files = Git::Commands::DiffFiles.new(execution_context)
15
+ # diff_files.call
16
+ # diff_files.call(patch: true)
17
+ # diff_files.call('lib/', 'spec/')
18
+ # diff_files.call(q: true)
19
+ #
20
+ # @note `arguments` block audited against
21
+ # https://git-scm.com/docs/git-diff-files/2.53.0
22
+ #
23
+ # @see https://git-scm.com/docs/git-diff-files git-diff-files
24
+ #
25
+ # @see Git::Commands
26
+ #
27
+ # @api private
28
+ #
29
+ class DiffFiles < Git::Commands::Base
30
+ arguments do
31
+ literal 'diff-files'
32
+
33
+ # diff-files-specific options
34
+ flag_option :q
35
+ flag_option :unmerged, as: '-0'
36
+ flag_option :base
37
+ flag_option :ours
38
+ flag_option :theirs
39
+ flag_option :c
40
+ flag_option :cc
41
+
42
+ # Output format selection
43
+ flag_option %i[patch p u]
44
+ flag_option %i[no_patch s]
45
+ flag_option :raw
46
+ flag_option :patch_with_raw
47
+ value_option %i[unified U], inline: true
48
+ value_option :output, inline: true
49
+ value_option :output_indicator_new, inline: true
50
+ value_option :output_indicator_old, inline: true
51
+ value_option :output_indicator_context, inline: true
52
+
53
+ # Diff algorithm
54
+ flag_option :indent_heuristic, negatable: true
55
+ flag_option :minimal
56
+ flag_option :patience
57
+ flag_option :histogram
58
+ value_option :anchored, inline: true, repeatable: true
59
+ value_option :diff_algorithm, inline: true
60
+
61
+ # Statistics output formats
62
+ flag_or_value_option :stat, inline: true
63
+ value_option :stat_width, inline: true
64
+ value_option :stat_name_width, inline: true
65
+ value_option :stat_graph_width, inline: true
66
+ value_option :stat_count, inline: true
67
+ flag_option :compact_summary
68
+ flag_option :numstat
69
+ flag_option :shortstat
70
+ flag_or_value_option %i[dirstat X], inline: true
71
+ flag_option :cumulative
72
+ flag_or_value_option :dirstat_by_file, inline: true
73
+ flag_option :summary
74
+ flag_option :patch_with_stat
75
+
76
+ # Name and path display
77
+ flag_option :z
78
+ flag_option :name_only
79
+ flag_option :name_status
80
+ flag_or_value_option :submodule, inline: true
81
+
82
+ # Color output
83
+ flag_or_value_option :color, inline: true, negatable: true
84
+ flag_or_value_option :color_moved, inline: true, negatable: true
85
+ value_option :color_moved_ws, inline: true
86
+ flag_option :no_color_moved_ws
87
+
88
+ # Word diff
89
+ flag_or_value_option :word_diff, inline: true
90
+ value_option :word_diff_regex, inline: true
91
+ flag_or_value_option :color_words, inline: true
92
+
93
+ # Whitespace handling
94
+ flag_option :ignore_cr_at_eol
95
+ flag_option :ignore_space_at_eol
96
+ flag_option %i[ignore_space_change b]
97
+ flag_option %i[ignore_all_space w]
98
+ flag_option :ignore_blank_lines
99
+ value_option %i[ignore_matching_lines I], inline: true, repeatable: true
100
+ flag_option :check
101
+ value_option :ws_error_highlight, inline: true
102
+
103
+ # Rename/copy detection
104
+ flag_option :no_renames
105
+ flag_option :rename_empty, negatable: true
106
+ flag_option :full_index
107
+ flag_option :binary
108
+ flag_or_value_option :abbrev, inline: true
109
+ flag_or_value_option %i[break_rewrites B], inline: true
110
+ flag_or_value_option %i[find_renames M], inline: true
111
+ flag_or_value_option %i[find_copies C], inline: true
112
+ flag_option :find_copies_harder
113
+ flag_option %i[irreversible_delete D]
114
+
115
+ # Pickaxe / filtering
116
+ value_option :l, inline: true
117
+ value_option :diff_filter, inline: true
118
+ value_option :S, inline: true
119
+ value_option :G, inline: true
120
+ value_option :find_object, inline: true
121
+ flag_option :pickaxe_all
122
+ flag_option :pickaxe_regex
123
+ value_option :O, inline: true
124
+ value_option :skip_to, inline: true
125
+ value_option :rotate_to, inline: true
126
+
127
+ # Miscellaneous diff options
128
+ flag_option :R
129
+ flag_or_value_option :relative, inline: true, negatable: true
130
+ flag_option %i[text a]
131
+ value_option :inter_hunk_context, inline: true
132
+ flag_option %i[function_context W]
133
+ flag_option :exit_code
134
+ flag_option :quiet
135
+ flag_option :ext_diff, negatable: true
136
+ flag_option :textconv, negatable: true
137
+ flag_or_value_option :ignore_submodules, inline: true
138
+ value_option :src_prefix, inline: true
139
+ value_option :dst_prefix, inline: true
140
+ flag_option :no_prefix
141
+ flag_option :default_prefix
142
+ value_option :line_prefix, inline: true
143
+ flag_option :ita_invisible_in_index
144
+ value_option :max_depth, inline: true
145
+
146
+ # Operands: git diff-files has no required <tree-ish>; options precede end_of_options.
147
+ # end_of_options emits -- only when path arguments are present, protecting paths
148
+ # that start with '-' from being misinterpreted as flags.
149
+ end_of_options
150
+ operand :path, repeatable: true
151
+ end
152
+
153
+ # git diff-files exits 1 when differences are found (not an error)
154
+ allow_exit_status 0..1
155
+
156
+ # @!method call(*, **)
157
+ #
158
+ # @overload call(**options)
159
+ # Compare the index to the working tree with no path restriction
160
+ #
161
+ # @param options [Hash] command options
162
+ #
163
+ # @option options [Boolean, nil] :q (nil) do not complain about nonexistent files; only
164
+ # report exit status
165
+ #
166
+ # @option options [Boolean, nil] :unmerged (nil) for unmerged entries, suppress diff output
167
+ # and show only "Unmerged"
168
+ #
169
+ # @option options [Boolean, nil] :base (nil) for unmerged entries, diff against stage 1
170
+ # (common ancestor)
171
+ #
172
+ # Short form: `-1`
173
+ #
174
+ # @option options [Boolean, nil] :ours (nil) for unmerged entries, diff against stage 2
175
+ # (our changes)
176
+ #
177
+ # Short form: `-2`
178
+ #
179
+ # @option options [Boolean, nil] :theirs (nil) for unmerged entries, diff against stage 3
180
+ # (their changes)
181
+ #
182
+ # Short form: `-3`
183
+ #
184
+ # @option options [Boolean, nil] :c (nil) for unmerged entries, show a combined diff of
185
+ # stage 2, stage 3, and the working tree
186
+ #
187
+ # @option options [Boolean, nil] :cc (nil) synonym for `c: true`
188
+ #
189
+ # @option options [Boolean, nil] :patch (nil) generate unified diff patch output
190
+ #
191
+ # Alias: :p, :u
192
+ #
193
+ # @option options [Boolean, nil] :no_patch (nil) suppress all diff output
194
+ #
195
+ # Alias: :s
196
+ #
197
+ # @option options [Boolean, nil] :raw (nil) generate diff in raw format (default output)
198
+ #
199
+ # @option options [Boolean, nil] :patch_with_raw (nil) synonym for `patch: true, raw: true`
200
+ #
201
+ # @option options [Integer, String] :unified (nil) number of context lines around diff
202
+ # hunks
203
+ #
204
+ # Alias: :U
205
+ #
206
+ # @option options [String] :output (nil) write diff output to a file instead of stdout
207
+ #
208
+ # @option options [String] :output_indicator_new (nil) character for new lines in patch output
209
+ #
210
+ # @option options [String] :output_indicator_old (nil) character for old lines in patch output
211
+ #
212
+ # @option options [String] :output_indicator_context (nil) character for context lines in
213
+ # patch output
214
+ #
215
+ # @option options [Boolean, nil] :indent_heuristic (nil) shift hunk boundaries for readability
216
+ # (`--indent-heuristic`)
217
+ #
218
+ # @option options [Boolean, nil] :no_indent_heuristic (nil) do not shift hunk boundaries
219
+ # for readability (`--no-indent-heuristic`)
220
+ #
221
+ # @option options [Boolean, nil] :minimal (nil) spend extra time to minimize diff size
222
+ #
223
+ # @option options [Boolean, nil] :patience (nil) use patience diff algorithm
224
+ #
225
+ # @option options [Boolean, nil] :histogram (nil) use histogram diff algorithm
226
+ #
227
+ # @option options [String, Array<String>] :anchored (nil) anchor lines matching the
228
+ # given text (repeatable)
229
+ #
230
+ # @option options [String] :diff_algorithm (nil) diff algorithm to use
231
+ #
232
+ # Accepted values: `'default'`, `'myers'`, `'minimal'`, `'patience'`, `'histogram'`.
233
+ #
234
+ # @option options [Boolean, String, nil] :stat (nil) show a diffstat
235
+ #
236
+ # Pass `true` for the default format, or a string like `'80,40,5'` for custom limits.
237
+ #
238
+ # @option options [Integer, String] :stat_width (nil) override diffstat total width
239
+ #
240
+ # @option options [Integer, String] :stat_name_width (nil) override diffstat filename
241
+ # column width
242
+ #
243
+ # @option options [Integer, String] :stat_graph_width (nil) override diffstat graph
244
+ # column width
245
+ #
246
+ # @option options [Integer, String] :stat_count (nil) limit diffstat to this many lines
247
+ #
248
+ # @option options [Boolean, nil] :compact_summary (nil) include creation/deletion mode
249
+ # changes in stat
250
+ #
251
+ # @option options [Boolean, nil] :numstat (nil) show per-file insertion/deletion counts
252
+ # (machine-friendly)
253
+ #
254
+ # @option options [Boolean, nil] :shortstat (nil) show aggregate totals line only
255
+ #
256
+ # @option options [Boolean, String, nil] :dirstat (nil) show distribution of changes per
257
+ # directory
258
+ #
259
+ # Pass `true` for the default, or a string like `'lines,cumulative,10'` for params.
260
+ #
261
+ # Alias: :X
262
+ #
263
+ # @option options [Boolean, nil] :cumulative (nil) synonym for `dirstat: 'cumulative'`
264
+ #
265
+ # @option options [Boolean, String, nil] :dirstat_by_file (nil) synonym for
266
+ # `dirstat: 'files,...'`
267
+ #
268
+ # @option options [Boolean, nil] :summary (nil) show condensed extended header information
269
+ #
270
+ # @option options [Boolean, nil] :patch_with_stat (nil) synonym for
271
+ # `patch: true, stat: true`
272
+ #
273
+ # @option options [Boolean, nil] :z (nil) use NUL as output field terminator instead of
274
+ # newline
275
+ #
276
+ # @option options [Boolean, nil] :name_only (nil) show only changed file names
277
+ #
278
+ # @option options [Boolean, nil] :name_status (nil) show changed file names with status
279
+ # letters
280
+ #
281
+ # @option options [Boolean, String, nil] :submodule (nil) how to show submodule differences
282
+ #
283
+ # Pass `true` for the default, or a string like `'log'` or `'diff'` for a format
284
+ # name.
285
+ #
286
+ # @option options [Boolean, String, nil] :color (nil) control diff colorization (`--color`)
287
+ #
288
+ # Pass `true` for `--color` or a string like `'always'` or `'auto'` for a specific mode.
289
+ #
290
+ # @option options [Boolean, nil] :no_color (nil) suppress colorized output (`--no-color`)
291
+ #
292
+ # @option options [Boolean, String, nil] :color_moved (nil) color moved lines differently
293
+ # (`--color-moved`)
294
+ #
295
+ # Pass `true` for the default, or a mode string such as `'zebra'` or `'dimmed-zebra'`.
296
+ #
297
+ # @option options [Boolean, nil] :no_color_moved (nil) disable moved-line coloring (`--no-color-moved`)
298
+ #
299
+ # @option options [String] :color_moved_ws (nil) whitespace handling for moved-line
300
+ # color detection
301
+ #
302
+ # Comma-separated list of modes, e.g.
303
+ # `'ignore-space-at-eol,ignore-space-change'`.
304
+ #
305
+ # @option options [Boolean, nil] :no_color_moved_ws (nil) synonym for
306
+ # `color_moved_ws: 'no'`
307
+ #
308
+ # @option options [Boolean, String, nil] :word_diff (nil) show a word-level diff
309
+ #
310
+ # Pass `true` for the default `plain` mode, or a string like `'color'`,
311
+ # `'porcelain'`, or `'none'` for a specific mode.
312
+ #
313
+ # @option options [String] :word_diff_regex (nil) regular expression defining word
314
+ # boundaries for word diff
315
+ #
316
+ # @option options [Boolean, String, nil] :color_words (nil) equivalent to
317
+ # `word_diff: 'color'` plus an optional word regex
318
+ #
319
+ # @option options [Boolean, nil] :ignore_cr_at_eol (nil) ignore carriage-return at end
320
+ # of line
321
+ #
322
+ # @option options [Boolean, nil] :ignore_space_at_eol (nil) ignore whitespace changes
323
+ # at end of line
324
+ #
325
+ # @option options [Boolean, nil] :ignore_space_change (nil) ignore changes in amount of
326
+ # whitespace
327
+ #
328
+ # Alias: :b
329
+ #
330
+ # @option options [Boolean, nil] :ignore_all_space (nil) ignore all whitespace when
331
+ # comparing lines
332
+ #
333
+ # Alias: :w
334
+ #
335
+ # @option options [Boolean, nil] :ignore_blank_lines (nil) ignore changes whose lines
336
+ # are all blank
337
+ #
338
+ # @option options [String, Array<String>] :ignore_matching_lines (nil) ignore changes
339
+ # whose lines all match the given regex (repeatable)
340
+ #
341
+ # Alias: :I
342
+ #
343
+ # @option options [Boolean, nil] :check (nil) warn if changes introduce whitespace errors
344
+ # or conflict markers
345
+ #
346
+ # @option options [String] :ws_error_highlight (nil) highlight whitespace errors in
347
+ # the given diff line types (e.g. `'new'`, `'old,new'`, `'all'`)
348
+ #
349
+ # @option options [Boolean, nil] :no_renames (nil) disable rename detection
350
+ #
351
+ # @option options [Boolean, nil] :rename_empty (nil) use empty blobs as rename sources
352
+ # (`--rename-empty`)
353
+ #
354
+ # @option options [Boolean, nil] :no_rename_empty (nil) disallow empty blobs as rename
355
+ # sources (`--no-rename-empty`)
356
+ #
357
+ # @option options [Boolean, nil] :full_index (nil) show full blob SHA in index line
358
+ #
359
+ # @option options [Boolean, nil] :binary (nil) output binary diff suitable for
360
+ # `git apply`
361
+ #
362
+ # @option options [Boolean, String, nil] :abbrev (nil) abbreviate blob names in raw output
363
+ #
364
+ # Pass `true` for the default, or an integer string like `'10'` for a specific
365
+ # length.
366
+ #
367
+ # @option options [Boolean, String, nil] :break_rewrites (nil) break total rewrites into
368
+ # delete-and-create pairs
369
+ #
370
+ # Alias: :B
371
+ #
372
+ # @option options [Boolean, String, nil] :find_renames (nil) detect renames
373
+ #
374
+ # Pass `true` for the default threshold, or a string like `'90%'` for a custom
375
+ # similarity threshold.
376
+ #
377
+ # Alias: :M
378
+ #
379
+ # @option options [Boolean, String, nil] :find_copies (nil) detect copies as well as
380
+ # renames
381
+ #
382
+ # Pass `true` for the default threshold, or a string like `'75%'` for a custom
383
+ # similarity threshold.
384
+ #
385
+ # Alias: :C
386
+ #
387
+ # @option options [Boolean, nil] :find_copies_harder (nil) inspect all unmodified files
388
+ # as copy sources (very expensive for large repos)
389
+ #
390
+ # @option options [Boolean, nil] :irreversible_delete (nil) omit preimage for deleted
391
+ # files
392
+ #
393
+ # Alias: :D
394
+ #
395
+ # @option options [Integer, String] :l (nil) limit the number of rename/copy
396
+ # candidates considered during exhaustive detection
397
+ #
398
+ # @option options [String] :diff_filter (nil) select only certain kinds of changed
399
+ # files
400
+ #
401
+ # A string of status letters such as `'A'`, `'M'`, `'D'`, `'ACDM'`, or lowercase
402
+ # to exclude.
403
+ #
404
+ # @option options [String] :S (nil) find changes that alter the occurrence count of
405
+ # the given string (pickaxe)
406
+ #
407
+ # @option options [String] :G (nil) find changes whose patch text contains lines
408
+ # matching the given regex (pickaxe)
409
+ #
410
+ # @option options [String] :find_object (nil) find changes involving the given
411
+ # object id
412
+ #
413
+ # @option options [Boolean, nil] :pickaxe_all (nil) show all changes in a changeset
414
+ # when using `-S` or `-G`
415
+ #
416
+ # @option options [Boolean, nil] :pickaxe_regex (nil) treat the `-S` string as an
417
+ # extended POSIX regular expression
418
+ #
419
+ # @option options [String] :O (nil) path to an orderfile controlling output file
420
+ # order
421
+ #
422
+ # @option options [String] :skip_to (nil) discard files before the named file in
423
+ # the output
424
+ #
425
+ # @option options [String] :rotate_to (nil) move files before the named file to end
426
+ # of output
427
+ #
428
+ # @option options [Boolean, nil] :R (nil) swap the two diff inputs
429
+ #
430
+ # @option options [Boolean, String, nil] :relative (nil) show paths relative to a
431
+ # directory (`--relative`)
432
+ #
433
+ # Pass `true` to use the current directory, or a path string to name the directory
434
+ # explicitly.
435
+ #
436
+ # @option options [Boolean, nil] :no_relative (nil) use absolute paths in output (`--no-relative`)
437
+ #
438
+ # @option options [Boolean, nil] :text (nil) treat all files as text
439
+ #
440
+ # Alias: :a
441
+ #
442
+ # @option options [Integer, String] :inter_hunk_context (nil) show context between
443
+ # diff hunks up to this many lines, fusing close hunks
444
+ #
445
+ # @option options [Boolean, nil] :function_context (nil) show whole function as context
446
+ # for each change
447
+ #
448
+ # Alias: :W
449
+ #
450
+ # @option options [Boolean, nil] :exit_code (nil) exit with status 1 if differences
451
+ # are found, 0 if none
452
+ #
453
+ # @option options [Boolean, nil] :quiet (nil) suppress all output
454
+ #
455
+ # Implies `--exit-code`.
456
+ #
457
+ # @option options [Boolean, nil] :ext_diff (nil) allow external diff helpers (`--ext-diff`)
458
+ #
459
+ # @option options [Boolean, nil] :no_ext_diff (nil) disallow external diff helpers (`--no-ext-diff`)
460
+ #
461
+ # @option options [Boolean, nil] :textconv (nil) allow external text-conversion
462
+ # filters (`--textconv`)
463
+ #
464
+ # @option options [Boolean, nil] :no_textconv (nil) disallow external text-conversion
465
+ # filters (`--no-textconv`)
466
+ #
467
+ # @option options [Boolean, String, nil] :ignore_submodules (nil) ignore submodule changes
468
+ #
469
+ # Pass `true` for `--ignore-submodules` (equivalent to `'all'`), or a string such
470
+ # as `'untracked'`, `'dirty'`, `'none'`, or `'all'`.
471
+ #
472
+ # @option options [String] :src_prefix (nil) source prefix for diff headers
473
+ # (e.g. `'a/'`)
474
+ #
475
+ # @option options [String] :dst_prefix (nil) destination prefix for diff headers
476
+ # (e.g. `'b/'`)
477
+ #
478
+ # @option options [Boolean, nil] :no_prefix (nil) omit source and destination prefixes
479
+ #
480
+ # @option options [Boolean, nil] :default_prefix (nil) use the default `a/` and `b/`
481
+ # prefixes
482
+ #
483
+ # @option options [String] :line_prefix (nil) prepend this prefix to every output
484
+ # line
485
+ #
486
+ # @option options [Boolean, nil] :ita_invisible_in_index (nil) make `git add -N` entries
487
+ # appear as new files in `git diff` and non-existent in `git diff --cached`
488
+ #
489
+ # @option options [Integer, String] :max_depth (nil) maximum directory depth to
490
+ # descend for pathspecs
491
+ #
492
+ # @return [Git::CommandLineResult] the result of calling `git diff-files`
493
+ #
494
+ # @raise [ArgumentError] if unsupported options are provided
495
+ #
496
+ # @raise [Git::FailedError] if git exits outside the allowed range
497
+ # (exit code > 1)
498
+ #
499
+ # @api public
500
+ #
501
+ # @overload call(*path, **options)
502
+ # Compare the index to the working tree, limiting output to specific paths
503
+ #
504
+ # @param path [Array<String>] pathspecs limiting which files are compared
505
+ #
506
+ # @param options [Hash] command options (same as the no-path overload)
507
+ #
508
+ # @return [Git::CommandLineResult] the result of calling `git diff-files`
509
+ #
510
+ # @raise [ArgumentError] if unsupported options are provided
511
+ #
512
+ # @raise [Git::FailedError] if git exits outside the allowed range
513
+ # (exit code > 1)
514
+ #
515
+ # @api public
516
+ end
517
+ end
518
+ end