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,263 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Am
8
+ # Implements `git am` to apply a series of patches from a mailbox
9
+ #
10
+ # Splits mail messages in a mailbox into commit log messages, authorship
11
+ # information, and patches, and applies them to the current branch.
12
+ #
13
+ # @example Apply patches from a mailbox file
14
+ # am = Git::Commands::Am::Apply.new(execution_context)
15
+ # am.call('patches.mbox', chdir: repo.workdir)
16
+ #
17
+ # @example Apply patches with sign-off
18
+ # am.call('patches.mbox', signoff: true, chdir: repo.workdir)
19
+ #
20
+ # @example Apply with 3-way merge fallback
21
+ # am.call('patches.mbox', three_way: true, chdir: repo.workdir)
22
+ #
23
+ # @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
24
+ #
25
+ # @see https://git-scm.com/docs/git-am git-am
26
+ #
27
+ # @api private
28
+ #
29
+ class Apply < Git::Commands::Base
30
+ arguments do
31
+ literal 'am'
32
+
33
+ # Commit message / mailinfo options
34
+ flag_option %i[signoff s]
35
+ flag_option %i[keep k]
36
+ flag_option :keep_non_patch
37
+ flag_option :keep_cr, negatable: true
38
+ flag_option %i[scissors c], negatable: true
39
+ value_option :quoted_cr
40
+ value_option :empty
41
+ flag_option %i[message_id m], negatable: true
42
+
43
+ # Output
44
+ flag_option %i[quiet q]
45
+
46
+ # Encoding
47
+ flag_option %i[utf8 u], negatable: true
48
+
49
+ # Application strategy
50
+ flag_option :three_way, as: '--3way', negatable: true
51
+ flag_option :rerere_autoupdate, negatable: true
52
+
53
+ # Whitespace and patch application options (passed to git-apply)
54
+ flag_option :ignore_space_change
55
+ flag_option :ignore_whitespace
56
+ value_option :whitespace
57
+ value_option :C, inline: true
58
+ value_option :p, inline: true
59
+ value_option :directory
60
+ value_option :exclude, repeatable: true
61
+ value_option :include, repeatable: true
62
+ flag_option :reject
63
+
64
+ # Patch format
65
+ value_option :patch_format
66
+
67
+ # Interactive mode
68
+ flag_option %i[interactive i]
69
+
70
+ # Hook verification
71
+ flag_option :verify, negatable: true
72
+
73
+ # Date handling
74
+ flag_option :committer_date_is_author_date
75
+ flag_option :ignore_date
76
+
77
+ # GPG signing
78
+ flag_or_value_option %i[gpg_sign S], inline: true, negatable: true
79
+
80
+ # Execution
81
+ execution_option :chdir
82
+
83
+ end_of_options
84
+ operand :mbox, repeatable: true
85
+ end
86
+
87
+ # @overload call(*mbox, **options)
88
+ #
89
+ # Apply patches from one or more mailbox files to the current branch
90
+ #
91
+ # @param mbox [Array<String>] zero or more mailbox file paths or Maildir
92
+ # directories
93
+ #
94
+ # If omitted, reads from standard input.
95
+ #
96
+ # @param options [Hash] command options
97
+ #
98
+ # @option options [Boolean, nil] :signoff (nil) add Signed-off-by trailer
99
+ #
100
+ # Alias: `:s`
101
+ #
102
+ # @option options [Boolean, nil] :keep (nil) preserve the Subject line
103
+ # in commit messages (`--keep`)
104
+ #
105
+ # Alias: `:k`
106
+ #
107
+ # @option options [Boolean, nil] :keep_non_patch (nil) retain non-patch
108
+ # parts of the message body (`--keep-non-patch`)
109
+ #
110
+ # @option options [Boolean, nil] :keep_cr (nil) retain CR at end of
111
+ # lines (`--keep-cr`)
112
+ #
113
+ # @option options [Boolean, nil] :no_keep_cr (nil) strip CR at end of
114
+ # lines (`--no-keep-cr`)
115
+ #
116
+ # @option options [Boolean, nil] :scissors (nil) remove everything in the
117
+ # body before a scissors line (`--scissors`)
118
+ #
119
+ # Alias: `:c`
120
+ #
121
+ # @option options [Boolean, nil] :no_scissors (nil) disable scissors
122
+ # mode (`--no-scissors`)
123
+ #
124
+ # @option options [String] :quoted_cr (nil) how to handle CR in quoted
125
+ # text passed to git-mailinfo
126
+ #
127
+ # Valid actions: `'nowarn'`, `'warn'`, `'error'`.
128
+ #
129
+ # @option options [String] :empty (nil) how to handle an e-mail message
130
+ # lacking a patch
131
+ #
132
+ # Valid values: `'stop'` (fail, default), `'drop'` (skip the message),
133
+ # `'keep'` (create an empty commit).
134
+ #
135
+ # @option options [Boolean, nil] :message_id (nil) add the Message-ID
136
+ # header to commit messages (`--message-id`)
137
+ #
138
+ # Alias: `:m`
139
+ #
140
+ # @option options [Boolean, nil] :no_message_id (nil) do not add the
141
+ # Message-ID header (`--no-message-id`)
142
+ #
143
+ # @option options [Boolean, nil] :quiet (nil) be quiet; only print error
144
+ # messages
145
+ #
146
+ # Alias: `:q`
147
+ #
148
+ # @option options [Boolean, nil] :utf8 (nil) re-code the commit log message
149
+ # in UTF-8 (`--utf8`)
150
+ #
151
+ # Alias: `:u`
152
+ #
153
+ # @option options [Boolean, nil] :no_utf8 (nil) do not re-code the
154
+ # commit log message (`--no-utf8`)
155
+ #
156
+ # @option options [Boolean, nil] :three_way (nil) attempt 3-way merge when
157
+ # context does not match (`--3way`)
158
+ #
159
+ # @option options [Boolean, nil] :no_three_way (nil) disable 3-way
160
+ # merge fallback (`--no-3way`)
161
+ #
162
+ # @option options [Boolean, nil] :rerere_autoupdate (nil) allow rerere to
163
+ # update the index with auto-resolved conflicts (`--rerere-autoupdate`)
164
+ #
165
+ # @option options [Boolean, nil] :no_rerere_autoupdate (nil) prevent rerere from
166
+ # auto-updating the index (`--no-rerere-autoupdate`)
167
+ #
168
+ # @option options [Boolean, nil] :ignore_space_change (nil) ignore whitespace
169
+ # changes when applying (passed to git-apply)
170
+ #
171
+ # @option options [Boolean, nil] :ignore_whitespace (nil) ignore whitespace
172
+ # when applying (passed to git-apply)
173
+ #
174
+ # @option options [String] :whitespace (nil) whitespace error handling
175
+ # (e.g., `'nowarn'`, `'warn'`, `'fix'`, `'error'`)
176
+ #
177
+ # Passed to git-apply.
178
+ #
179
+ # @option options [Integer, String] :C (nil) ensure at least `<n>` lines of
180
+ # surrounding context match when applying (`-C<n>`)
181
+ #
182
+ # Passed to git-apply.
183
+ #
184
+ # @option options [Integer, String] :p (nil) strip `<n>` leading path
185
+ # components
186
+ # from file names (`-p<n>`)
187
+ #
188
+ # Passed to git-apply.
189
+ #
190
+ # @option options [String] :directory (nil) prepend `<dir>` to all
191
+ # filenames
192
+ #
193
+ # Passed to git-apply.
194
+ #
195
+ # @option options [String, Array<String>] :exclude (nil) skip files
196
+ # matching the given path pattern
197
+ #
198
+ # May be repeated. Passed to git-apply.
199
+ #
200
+ # @option options [String, Array<String>] :include (nil) apply only to
201
+ # files matching the given path pattern
202
+ #
203
+ # May be repeated. Passed to git-apply.
204
+ #
205
+ # @option options [Boolean, nil] :reject (nil) leave rejected hunks in
206
+ # `*.rej` files instead of aborting
207
+ #
208
+ # Passed to git-apply.
209
+ #
210
+ # @option options [String] :patch_format (nil) override patch format
211
+ # detection
212
+ #
213
+ # Valid formats: `'mbox'`, `'mboxrd'`, `'stgit'`, `'stgit-series'`,
214
+ # `'hg'`.
215
+ #
216
+ # @option options [Boolean, nil] :interactive (nil) run interactively,
217
+ # prompting before each patch is applied
218
+ #
219
+ # Alias: `:i`
220
+ #
221
+ # @option options [Boolean, nil] :verify (nil) run pre-applypatch and
222
+ # applypatch-msg hooks (`--verify`)
223
+ #
224
+ # Hooks are run by default when this option is omitted.
225
+ #
226
+ # @option options [Boolean, nil] :no_verify (nil) bypass pre-applypatch and
227
+ # applypatch-msg hooks (`--no-verify`)
228
+ #
229
+ # @option options [Boolean, nil] :committer_date_is_author_date (nil) use the
230
+ # author date as the committer date
231
+ #
232
+ # @option options [Boolean, nil] :ignore_date (nil) use the committer date as
233
+ # the author date
234
+ #
235
+ # @option options [Boolean, String, nil] :gpg_sign (nil) sign commits using
236
+ # GPG (`--gpg-sign`)
237
+ #
238
+ # Pass a key-ID string to select the signing key; pass `true` to use
239
+ # the committer identity. Alias: `:S`
240
+ #
241
+ # @option options [Boolean, nil] :no_gpg_sign (nil) countermand commit.gpgSign
242
+ # configuration (`--no-gpg-sign`)
243
+ #
244
+ # @option options [String] :chdir (nil) change to this directory before
245
+ # running git
246
+ #
247
+ # Not passed to the git CLI.
248
+ #
249
+ # @return [Git::CommandLine::Result] the result of calling `git am`
250
+ #
251
+ # @raise [ArgumentError] if unsupported options are provided
252
+ #
253
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
254
+ #
255
+ # @api public
256
+ #
257
+ def call(*, **)
258
+ super
259
+ end
260
+ end
261
+ end
262
+ end
263
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Am
8
+ # Implements `git am --continue` to resume after resolving conflicts
9
+ #
10
+ # After the user has resolved a conflict in the working tree and updated
11
+ # the index, this command continues applying the remaining patches.
12
+ #
13
+ # @example Resume an am session after resolving conflicts
14
+ # continue_cmd = Git::Commands::Am::Continue.new(execution_context)
15
+ # continue_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
18
+ #
19
+ # @see Git::Commands::Am
20
+ #
21
+ # @see https://git-scm.com/docs/git-am git-am
22
+ #
23
+ # @api private
24
+ #
25
+ class Continue < Git::Commands::Base
26
+ arguments do
27
+ literal 'am'
28
+ literal '--continue'
29
+ end
30
+
31
+ # @!method call()
32
+ #
33
+ # @overload call()
34
+ #
35
+ # Resume applying patches after conflicts have been resolved
36
+ #
37
+ # @return [Git::CommandLine::Result] the result of calling `git am --continue`
38
+ #
39
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Am
8
+ # Implements `git am --quit` to abort the in-progress am session
9
+ #
10
+ # Aborts the in-progress patch application but keeps the current HEAD
11
+ # position (does not restore the branch to its pre-am state).
12
+ #
13
+ # @example Quit an am session without restoring HEAD
14
+ # quit_cmd = Git::Commands::Am::Quit.new(execution_context)
15
+ # quit_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
18
+ #
19
+ # @see Git::Commands::Am
20
+ #
21
+ # @see https://git-scm.com/docs/git-am git-am
22
+ #
23
+ # @api private
24
+ #
25
+ class Quit < Git::Commands::Base
26
+ arguments do
27
+ literal 'am'
28
+ literal '--quit'
29
+ end
30
+
31
+ # @!method call()
32
+ #
33
+ # @overload call()
34
+ #
35
+ # Abort the am session but keep the current HEAD position
36
+ #
37
+ # @return [Git::CommandLine::Result] the result of calling `git am --quit`
38
+ #
39
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Am
8
+ # Implements `git am --retry` to retry the most-recently-failed patch
9
+ #
10
+ # Tries to apply the last conflicting patch again. Generally only useful
11
+ # when retrying with extra options (e.g. `--3way`), or in scripts where
12
+ # stdin is not a tty and the implicit retry heuristic does not trigger.
13
+ #
14
+ # @example Retry the current patch
15
+ # retry_cmd = Git::Commands::Am::Retry.new(execution_context)
16
+ # retry_cmd.call
17
+ #
18
+ # @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
19
+ #
20
+ # @see Git::Commands::Am
21
+ #
22
+ # @see https://git-scm.com/docs/git-am git-am
23
+ #
24
+ # @api private
25
+ #
26
+ class Retry < Git::Commands::Base
27
+ arguments do
28
+ literal 'am'
29
+ literal '--retry'
30
+ end
31
+
32
+ # git am --retry was introduced in git 2.46.0
33
+ requires_git_version '2.46.0'
34
+
35
+ # @!method call()
36
+ #
37
+ # @overload call()
38
+ #
39
+ # Retry applying the most-recently-failed patch
40
+ #
41
+ # @return [Git::CommandLine::Result] the result of calling `git am --retry`
42
+ #
43
+ # @raise [Git::VersionError] if git version is below 2.46.0
44
+ #
45
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Am
8
+ # Implements the `git am --show-current-patch` command
9
+ #
10
+ # Shows the message currently being applied when `git am` has stopped due to
11
+ # conflicts.
12
+ #
13
+ # @example Show the current patch
14
+ # show_cmd = Git::Commands::Am::ShowCurrentPatch.new(execution_context)
15
+ # show_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
18
+ #
19
+ # @see Git::Commands::Am
20
+ #
21
+ # @see https://git-scm.com/docs/git-am git-am
22
+ #
23
+ # @api private
24
+ #
25
+ class ShowCurrentPatch < Git::Commands::Base
26
+ arguments do
27
+ literal 'am'
28
+ flag_or_value_option :show_current_patch, inline: true
29
+ end
30
+
31
+ # @overload call(*, show_current_patch: true, **options)
32
+ #
33
+ # Execute the `git am --show-current-patch` command
34
+ #
35
+ # @param show_current_patch [true, String] patch format selector
36
+ #
37
+ # Pass `true` (default) to emit `--show-current-patch` (git defaults to
38
+ # `raw` format); pass `'diff'` to emit `--show-current-patch=diff` (diff
39
+ # portion only) or `'raw'` for `--show-current-patch=raw` (full raw email).
40
+ # Passing `false` or `nil` raises `ArgumentError`.
41
+ #
42
+ # @param options [Hash] command options
43
+ #
44
+ # @return [Git::CommandLine::Result] the result of calling
45
+ # `git am --show-current-patch`
46
+ #
47
+ # @raise [ArgumentError] if `show_current_patch` is `false` or `nil`
48
+ #
49
+ # @raise [ArgumentError] if unsupported options are provided
50
+ #
51
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
52
+ #
53
+ def call(*, show_current_patch: true, **)
54
+ unless show_current_patch
55
+ raise ArgumentError,
56
+ ":show_current_patch must be true or a non-empty String, got #{show_current_patch.inspect}"
57
+ end
58
+
59
+ super
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Am
8
+ # Implements `git am --skip` to skip the current patch
9
+ #
10
+ # Skips the current patch and continues applying remaining patches.
11
+ #
12
+ # @example Skip a conflicting patch
13
+ # skip_cmd = Git::Commands::Am::Skip.new(execution_context)
14
+ # skip_cmd.call
15
+ #
16
+ # @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
17
+ #
18
+ # @see Git::Commands::Am
19
+ #
20
+ # @see https://git-scm.com/docs/git-am git-am
21
+ #
22
+ # @api private
23
+ #
24
+ class Skip < Git::Commands::Base
25
+ arguments do
26
+ literal 'am'
27
+ literal '--skip'
28
+ end
29
+
30
+ # @!method call()
31
+ #
32
+ # @overload call()
33
+ #
34
+ # Skip the current patch and continue with remaining patches
35
+ #
36
+ # @return [Git::CommandLine::Result] the result of calling `git am --skip`
37
+ #
38
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'am/apply'
4
+ require_relative 'am/abort'
5
+ require_relative 'am/continue'
6
+ require_relative 'am/quit'
7
+ require_relative 'am/retry'
8
+ require_relative 'am/show_current_patch'
9
+ require_relative 'am/skip'
10
+
11
+ module Git
12
+ module Commands
13
+ # Commands for applying patches from a mailbox via `git am`
14
+ #
15
+ # This module contains command classes for patch application and session
16
+ # management:
17
+ #
18
+ # - {Am::Apply} — apply a series of patches from a mailbox
19
+ # - {Am::Abort} — abort the current patch application (`--abort`)
20
+ # - {Am::Continue} — resume after resolving conflicts (`--continue`)
21
+ # - {Am::Quit} — drop the current patch session (`--quit`)
22
+ # - {Am::Retry} — retry the current patch
23
+ # - {Am::ShowCurrentPatch} — show the patch being applied (`--show-current-patch`)
24
+ # - {Am::Skip} — skip the current patch (`--skip`)
25
+ #
26
+ # @see https://git-scm.com/docs/git-am git-am documentation
27
+ #
28
+ # @api private
29
+ #
30
+ module Am
31
+ end
32
+ end
33
+ end