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,339 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git grep` command
8
+ #
9
+ # Searches for a pattern in the contents of tracked files within a repository
10
+ # tree.
11
+ #
12
+ # @example Typical usage
13
+ # grep = Git::Commands::Grep.new(execution_context)
14
+ # grep.call('HEAD', pattern: 'search')
15
+ # grep.call('HEAD', pattern: 'SEARCH', ignore_case: true)
16
+ # grep.call('HEAD', pattern: 'search', invert_match: true)
17
+ # grep.call('HEAD', pattern: 'foo|bar', extended_regexp: true)
18
+ # grep.call('HEAD', pattern: 'search', pathspec: 'lib/**')
19
+ #
20
+ # @note `arguments` block audited against
21
+ # https://git-scm.com/docs/git-grep/2.53.0
22
+ #
23
+ # @see https://git-scm.com/docs/git-grep git-grep
24
+ #
25
+ # @see Git::Commands
26
+ #
27
+ # @api private
28
+ #
29
+ class Grep < Git::Commands::Base
30
+ arguments do
31
+ literal 'grep'
32
+
33
+ # Encoding and binary handling
34
+ flag_option %i[text a]
35
+ flag_option :I
36
+ flag_option :textconv, negatable: true
37
+
38
+ # Pattern matching
39
+ flag_option %i[ignore_case i]
40
+ flag_option %i[word_regexp w]
41
+ flag_option %i[invert_match v]
42
+ flag_option :h
43
+ flag_option :H
44
+ flag_option :full_name
45
+
46
+ # Regexp flavour
47
+ flag_option %i[extended_regexp E]
48
+ flag_option %i[basic_regexp G]
49
+ flag_option %i[perl_regexp P]
50
+ flag_option %i[fixed_strings F]
51
+
52
+ # Output format
53
+ flag_option %i[line_number n]
54
+ flag_option :column
55
+ flag_option %i[files_with_matches name_only l]
56
+ flag_option %i[files_without_match L]
57
+ flag_option %i[null z]
58
+ flag_option %i[only_matching o]
59
+ flag_option %i[count c]
60
+ flag_option :all_match
61
+ flag_option %i[quiet q]
62
+
63
+ # Depth and recursion
64
+ value_option :max_depth
65
+ flag_option %i[recursive r], negatable: true
66
+
67
+ # Color
68
+ flag_or_value_option :color, inline: true
69
+ flag_option :no_color
70
+
71
+ # Display
72
+ flag_option :break
73
+ flag_option :heading
74
+ flag_option %i[show_function p]
75
+
76
+ # Context lines
77
+ value_option %i[after_context A], inline: true
78
+ value_option %i[before_context B], inline: true
79
+ value_option %i[context C], inline: true
80
+ flag_option %i[function_context W]
81
+
82
+ # Limits and performance
83
+ value_option %i[max_count m]
84
+ value_option :threads
85
+
86
+ # Pattern input
87
+ value_option :f, repeatable: true
88
+
89
+ # Accepts a String (simple pattern) or an Array (raw CLI args passthrough
90
+ # for compound boolean expressions like ['-e', 'foo', '--and', '-e', 'bar']).
91
+ custom_option :pattern, required: true, allow_nil: false do |value|
92
+ case value
93
+ when String then ['-e', value]
94
+ when Array then value
95
+ else raise ArgumentError, ":pattern must be a String or Array, got #{value.class}"
96
+ end
97
+ end
98
+
99
+ # Source selection
100
+ flag_option :recurse_submodules
101
+ value_option :parent_basename
102
+ flag_option :exclude_standard, negatable: true
103
+ flag_option :cached
104
+ flag_option :untracked
105
+ flag_option :no_index
106
+
107
+ operand :tree, repeatable: true
108
+ end_of_options
109
+ value_option :pathspec, as_operand: true, repeatable: true
110
+ end
111
+
112
+ # `git grep` exits with 1 when no lines are selected — not an error
113
+ allow_exit_status 0..1
114
+
115
+ # @overload call(*tree, **options)
116
+ #
117
+ # Execute the `git grep` command
118
+ #
119
+ # @param tree [Array<String>] zero or more tree-ish references to search
120
+ # (e.g. commit SHAs, tags, or branch names); when omitted, git
121
+ # searches the working tree
122
+ #
123
+ # @param options [Hash] command options
124
+ #
125
+ # @option options [Boolean, nil] :text (nil) process binary files as if they
126
+ # were text
127
+ #
128
+ # Alias: :a
129
+ #
130
+ # @option options [Boolean, nil] :I (nil) do not match the pattern in binary
131
+ # files
132
+ #
133
+ # @option options [Boolean, nil] :textconv (nil) honor textconv filter
134
+ # settings (`--textconv`)
135
+ #
136
+ # @option options [Boolean, nil] :no_textconv (nil) suppress textconv filter
137
+ # processing (`--no-textconv`)
138
+ #
139
+ # @option options [Boolean, nil] :ignore_case (nil) ignore case distinctions
140
+ # in both the pattern and the file contents
141
+ #
142
+ # Alias: :i
143
+ #
144
+ # @option options [Boolean, nil] :word_regexp (nil) match the pattern only at
145
+ # word boundary
146
+ #
147
+ # Alias: :w
148
+ #
149
+ # @option options [Boolean, nil] :invert_match (nil) select non-matching lines
150
+ #
151
+ # Alias: :v
152
+ #
153
+ # @option options [Boolean, nil] :h (nil) suppress the filename prefix for
154
+ # each match
155
+ #
156
+ # @option options [Boolean, nil] :H (nil) print the filename for each match;
157
+ # overrides `:h` given earlier
158
+ #
159
+ # @option options [Boolean, nil] :full_name (nil) output paths relative to
160
+ # the project top directory rather than the current directory
161
+ #
162
+ # @option options [Boolean, nil] :extended_regexp (nil) use POSIX extended
163
+ # regular expressions for the pattern
164
+ #
165
+ # Alias: :E
166
+ #
167
+ # @option options [Boolean, nil] :basic_regexp (nil) use POSIX basic regular
168
+ # expressions for the pattern (the default regexp flavour)
169
+ #
170
+ # Alias: :G
171
+ #
172
+ # @option options [Boolean, nil] :perl_regexp (nil) use Perl-compatible
173
+ # regular expressions for the pattern
174
+ #
175
+ # Alias: :P
176
+ #
177
+ # @option options [Boolean, nil] :fixed_strings (nil) treat the pattern as a
178
+ # fixed string rather than a regular expression
179
+ #
180
+ # Alias: :F
181
+ #
182
+ # @option options [Boolean, nil] :line_number (nil) prefix each matching line
183
+ # with its line number within the file
184
+ #
185
+ # Alias: :n
186
+ #
187
+ # @option options [Boolean, nil] :column (nil) prefix the 1-indexed
188
+ # byte-offset of the first match from the start of the matching line
189
+ #
190
+ # @option options [Boolean, nil] :files_with_matches (nil) show only the
191
+ # names of files that contain matches, not the matching lines
192
+ #
193
+ # Aliases: :name_only, :l
194
+ #
195
+ # @option options [Boolean, nil] :files_without_match (nil) show only the
196
+ # names of files that do not contain matches
197
+ #
198
+ # Alias: :L
199
+ #
200
+ # @option options [Boolean, nil] :null (nil) use NUL as the delimiter for
201
+ # pathnames in the output, printing them verbatim
202
+ #
203
+ # Alias: :z
204
+ #
205
+ # @option options [Boolean, nil] :only_matching (nil) print only the matched
206
+ # (non-empty) parts of a matching line, each on a separate output line
207
+ #
208
+ # Alias: :o
209
+ #
210
+ # @option options [Boolean, nil] :count (nil) show the number of matching
211
+ # lines per file instead of the matching lines themselves
212
+ #
213
+ # Alias: :c
214
+ #
215
+ # @option options [Boolean, nil] :all_match (nil) when using multiple `--or`
216
+ # patterns, limit matches to files that have lines matching all of them
217
+ #
218
+ # @option options [Boolean, nil] :quiet (nil) do not output matching lines;
219
+ # exit 0 when there is a match and non-zero when there is not
220
+ #
221
+ # Alias: :q
222
+ #
223
+ # @option options [Integer, String] :max_depth (nil) descend at most this
224
+ # many directory levels for each pathspec argument
225
+ #
226
+ # @option options [Boolean, nil] :recursive (nil) recurse into subdirectories
227
+ # (same as `--max-depth=-1`; this is the default)
228
+ #
229
+ # Alias: :r
230
+ #
231
+ # @option options [Boolean, nil] :no_recursive (nil) do not recurse into
232
+ # subdirectories (`--no-recursive`, equivalent to `--max-depth=0`)
233
+ #
234
+ # @option options [Boolean, String, nil] :color (nil) show colored matches
235
+ #
236
+ # When `true`, emits bare `--color`. Pass a string to emit
237
+ # `--color=<when>` (values: `'always'`, `'never'`, `'auto'`).
238
+ #
239
+ # @option options [Boolean, nil] :no_color (nil) turn off match highlighting,
240
+ # even when the configuration file gives the default to color output
241
+ #
242
+ # @option options [Boolean, nil] :break (nil) print an empty line between
243
+ # matches from different files
244
+ #
245
+ # @option options [Boolean, nil] :heading (nil) show the filename above the
246
+ # matches in that file instead of at the start of each shown line
247
+ #
248
+ # @option options [Boolean, nil] :show_function (nil) show the nearest
249
+ # function name preceding each match
250
+ #
251
+ # Alias: :p
252
+ #
253
+ # @option options [Integer, String] :after_context (nil) show this many
254
+ # trailing lines after each match
255
+ #
256
+ # Alias: :A
257
+ #
258
+ # @option options [Integer, String] :before_context (nil) show this many
259
+ # leading lines before each match
260
+ #
261
+ # Alias: :B
262
+ #
263
+ # @option options [Integer, String] :context (nil) show this many leading
264
+ # and trailing lines around each match
265
+ #
266
+ # Alias: :C
267
+ #
268
+ # @option options [Boolean, nil] :function_context (nil) show the surrounding
269
+ # text from the previous function name up to the next
270
+ #
271
+ # Alias: :W
272
+ #
273
+ # @option options [Integer, String] :max_count (nil) limit the number of
274
+ # matches per file
275
+ #
276
+ # Alias: :m
277
+ #
278
+ # @option options [Integer, String] :threads (nil) number of grep worker
279
+ # threads to use
280
+ #
281
+ # @option options [String, Array<String>] :f (nil) read patterns from a
282
+ # file, one per line; may be passed as an Array to supply multiple
283
+ # pattern files
284
+ #
285
+ # @option options [String, Array<String>] :pattern (nil) the search
286
+ # pattern (required; must not be nil)
287
+ #
288
+ # Pass a String for a simple pattern (emitted as `-e <pattern>`).
289
+ # Pass an Array of raw CLI arguments for compound boolean
290
+ # expressions (e.g. `['-e', 'foo', '--and', '-e', 'bar']`).
291
+ #
292
+ # @option options [Boolean, nil] :recurse_submodules (nil) recursively search
293
+ # in each active, checked-out submodule
294
+ #
295
+ # @option options [String] :parent_basename (nil) override the name used
296
+ # as a prefix for submodule output when used with `:recurse_submodules`
297
+ #
298
+ # @option options [Boolean, nil] :exclude_standard (nil) honor the `.gitignore`
299
+ # mechanism when searching untracked files (`--exclude-standard`)
300
+ #
301
+ # @option options [Boolean, nil] :no_exclude_standard (nil) do not honor the
302
+ # `.gitignore` mechanism; also search ignored files
303
+ # (`--no-exclude-standard`); only useful with `:untracked` or `:no_index`
304
+ #
305
+ # @option options [Boolean, nil] :cached (nil) search blobs registered in the
306
+ # index instead of tracked files in the working tree
307
+ #
308
+ # @option options [Boolean, nil] :untracked (nil) search untracked files in
309
+ # addition to tracked files in the working tree
310
+ #
311
+ # @option options [Boolean, nil] :no_index (nil) search files in the current
312
+ # directory without regard to whether it is managed by Git
313
+ #
314
+ # @option options [String, Array<String>] :pathspec (nil) limit the
315
+ # search to files matching the given pathspec(s)
316
+ #
317
+ # Multiple pathspecs may be passed as an Array. Appended to the
318
+ # command after `--`.
319
+ #
320
+ # @return [Git::CommandLine::Result] the result of calling `git grep`
321
+ #
322
+ # Exit status 0 means matches were found; exit status 1 means no
323
+ # lines were selected (not an error).
324
+ #
325
+ # @raise [ArgumentError] if `:pattern` is missing or nil
326
+ #
327
+ # @raise [ArgumentError] if unsupported options are provided
328
+ #
329
+ # @raise [Git::FailedError] if git exits outside the allowed range
330
+ # (exit code > 1)
331
+ #
332
+ # @api public
333
+ #
334
+ def call(*, **)
335
+ super
336
+ end
337
+ end
338
+ end
339
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git init` command
8
+ #
9
+ # Create an empty Git repository or reinitialize an existing one.
10
+ #
11
+ # @example Typical usage
12
+ # init = Git::Commands::Init.new(execution_context)
13
+ # init.call
14
+ # init.call('my-repo')
15
+ # init.call('my-repo.git', bare: true)
16
+ # init.call('my-repo', initial_branch: 'main')
17
+ # init.call('my-repo', template: '/path/to/templates')
18
+ #
19
+ # @note `arguments` block audited against https://git-scm.com/docs/git-init/2.53.0
20
+ #
21
+ # @see https://git-scm.com/docs/git-init git-init
22
+ #
23
+ # @see Git::Commands
24
+ #
25
+ # @api private
26
+ #
27
+ class Init < Git::Commands::Base
28
+ arguments do
29
+ literal 'init'
30
+ flag_option %i[quiet q]
31
+ flag_option :bare
32
+ value_option :template, inline: true
33
+ value_option :separate_git_dir, inline: true
34
+ value_option :object_format, inline: true
35
+ value_option :ref_format, inline: true
36
+ value_option %i[initial_branch b], inline: true
37
+ flag_or_value_option :shared, inline: true
38
+
39
+ end_of_options
40
+ operand :directory
41
+ end
42
+
43
+ # @overload call(directory = nil, **options)
44
+ #
45
+ # Execute the `git init` command
46
+ #
47
+ # @param directory [String, nil] path to the directory to initialize
48
+ #
49
+ # If `nil` or omitted, initializes the repository in the current
50
+ # directory (`.`).
51
+ #
52
+ # If `:bare` is false, initializes `.git` inside this directory. If
53
+ # `:bare` is true, creates the bare repository directly in this directory.
54
+ #
55
+ # @param options [Hash] command options
56
+ #
57
+ # @option options [Boolean, nil] :quiet (nil) suppress all output except errors
58
+ # and warnings
59
+ #
60
+ # Alias: `:q`
61
+ #
62
+ # @option options [Boolean, nil] :bare (nil) create a bare repository
63
+ #
64
+ # @option options [String] :template (nil) path to the directory from which
65
+ # templates will be used
66
+ #
67
+ # @option options [String] :separate_git_dir (nil) path at which to create
68
+ # the repository; writes a gitfile at the working-tree root pointing to it
69
+ #
70
+ # @option options [String] :object_format (nil) hash algorithm for the
71
+ # repository (`sha1` or `sha256`)
72
+ #
73
+ # @option options [String] :ref_format (nil) ref storage format for the
74
+ # repository (`files` or `reftable`)
75
+ #
76
+ # @option options [String] :initial_branch (nil) name to use for the initial
77
+ # branch in the newly created repository
78
+ #
79
+ # Alias: `:b`
80
+ #
81
+ # @option options [Boolean, String, nil] :shared (nil) configure the repository
82
+ # to be shared among multiple users
83
+ #
84
+ # Pass `true` to emit `--shared` (which defaults to `group` permissions).
85
+ # Pass a string (e.g. `'group'`, `'all'`, `'0660'`) to emit
86
+ # `--shared=<permissions>`.
87
+ #
88
+ # @return [Git::CommandLine::Result] the result of calling `git init`
89
+ #
90
+ # @raise [ArgumentError] if unsupported options are provided
91
+ #
92
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
93
+ #
94
+ # @api public
95
+ #
96
+ def call(*, **)
97
+ super
98
+ end
99
+ end
100
+ end
101
+ end