git 1.19.1 → 5.5.0

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