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,252 @@
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
+ # @!method call(*, **)
88
+ #
89
+ # @overload call(*mbox, **options)
90
+ #
91
+ # Apply patches from one or more mailbox files to the current branch.
92
+ #
93
+ # @param mbox [Array<String>] zero or more mailbox file paths or Maildir
94
+ # directories
95
+ #
96
+ # If omitted, reads from standard input.
97
+ #
98
+ # @param options [Hash] command options
99
+ #
100
+ # @option options [Boolean, nil] :signoff (nil) add Signed-off-by trailer
101
+ #
102
+ # Alias: `:s`
103
+ #
104
+ # @option options [Boolean, nil] :keep (nil) pass -k flag to git-mailinfo,
105
+ # preserving the Subject line intact
106
+ #
107
+ # Alias: `:k`
108
+ #
109
+ # @option options [Boolean, nil] :keep_non_patch (nil) pass -b flag to
110
+ # git-mailinfo
111
+ #
112
+ # @option options [Boolean, nil] :keep_cr (nil) retain CR at end of lines (`--keep-cr`)
113
+ #
114
+ # @option options [Boolean, nil] :no_keep_cr (nil) strip CR at end of 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 mode (`--no-scissors`)
122
+ #
123
+ # @option options [String] :quoted_cr (nil) how to handle CR in quoted
124
+ # text passed to git-mailinfo
125
+ #
126
+ # Valid actions: `'nowarn'`, `'warn'`, `'error'`.
127
+ #
128
+ # @option options [String] :empty (nil) how to handle an e-mail message
129
+ # lacking a patch
130
+ #
131
+ # Valid values: `'stop'` (fail, default), `'drop'` (skip the message),
132
+ # `'keep'` (create an empty commit).
133
+ #
134
+ # @option options [Boolean, nil] :message_id (nil) pass -m flag to
135
+ # git-mailinfo, adding the Message-ID header to the commit message (`--message-id`)
136
+ #
137
+ # Alias: `:m`
138
+ #
139
+ # @option options [Boolean, nil] :no_message_id (nil) do not add the Message-ID header (`--no-message-id`)
140
+ #
141
+ # @option options [Boolean, nil] :quiet (nil) be quiet; only print error
142
+ # messages
143
+ #
144
+ # Alias: `:q`
145
+ #
146
+ # @option options [Boolean, nil] :utf8 (nil) re-code the commit log message
147
+ # in UTF-8 (`--utf8`)
148
+ #
149
+ # Alias: `:u`
150
+ #
151
+ # @option options [Boolean, nil] :no_utf8 (nil) do not re-code the commit log message (`--no-utf8`)
152
+ #
153
+ # @option options [Boolean, nil] :three_way (nil) attempt 3-way merge when
154
+ # context does not match (`--3way`)
155
+ #
156
+ # @option options [Boolean, nil] :no_three_way (nil) disable 3-way merge fallback (`--no-3way`)
157
+ #
158
+ # @option options [Boolean, nil] :rerere_autoupdate (nil) allow rerere to
159
+ # update the index with auto-resolved conflicts (`--rerere-autoupdate`)
160
+ #
161
+ # @option options [Boolean, nil] :no_rerere_autoupdate (nil) prevent rerere from
162
+ # auto-updating the index (`--no-rerere-autoupdate`)
163
+ #
164
+ # @option options [Boolean, nil] :ignore_space_change (nil) ignore whitespace
165
+ # changes when applying (passed to git-apply)
166
+ #
167
+ # @option options [Boolean, nil] :ignore_whitespace (nil) ignore whitespace
168
+ # when applying (passed to git-apply)
169
+ #
170
+ # @option options [String] :whitespace (nil) whitespace error handling
171
+ # (e.g., `'nowarn'`, `'warn'`, `'fix'`, `'error'`)
172
+ #
173
+ # Passed to git-apply.
174
+ #
175
+ # @option options [Integer] :C (nil) ensure at least `<n>` lines of
176
+ # surrounding context match when applying (`-C<n>`)
177
+ #
178
+ # Passed to git-apply.
179
+ #
180
+ # @option options [Integer] :p (nil) strip `<n>` leading path components
181
+ # from file names (`-p<n>`)
182
+ #
183
+ # Passed to git-apply.
184
+ #
185
+ # @option options [String] :directory (nil) prepend `<dir>` to all
186
+ # filenames
187
+ #
188
+ # Passed to git-apply.
189
+ #
190
+ # @option options [Array<String>] :exclude (nil) skip files matching the
191
+ # given path pattern
192
+ #
193
+ # May be repeated. Passed to git-apply.
194
+ #
195
+ # @option options [Array<String>] :include (nil) apply only to files
196
+ # matching the given path pattern
197
+ #
198
+ # May be repeated. Passed to git-apply.
199
+ #
200
+ # @option options [Boolean, nil] :reject (nil) leave rejected hunks in
201
+ # `*.rej` files instead of aborting
202
+ #
203
+ # Passed to git-apply.
204
+ #
205
+ # @option options [String] :patch_format (nil) override patch format
206
+ # detection
207
+ #
208
+ # Valid formats: `'mbox'`, `'mboxrd'`, `'stgit'`, `'stgit-series'`,
209
+ # `'hg'`.
210
+ #
211
+ # @option options [Boolean, nil] :interactive (nil) run interactively,
212
+ # prompting before each patch is applied
213
+ #
214
+ # Alias: `:i`
215
+ #
216
+ # @option options [Boolean, nil] :verify (nil) run pre-applypatch and
217
+ # applypatch-msg hooks (`--verify`)
218
+ #
219
+ # Hooks are run by default when this option is omitted.
220
+ #
221
+ # @option options [Boolean, nil] :no_verify (nil) bypass pre-applypatch and
222
+ # applypatch-msg hooks (`--no-verify`)
223
+ #
224
+ # @option options [Boolean, nil] :committer_date_is_author_date (nil) use the
225
+ # author date as the committer date
226
+ #
227
+ # @option options [Boolean, nil] :ignore_date (nil) use the committer date as
228
+ # the author date
229
+ #
230
+ # @option options [Boolean, String, nil] :gpg_sign (nil) sign commits using
231
+ # GPG (`--gpg-sign`)
232
+ #
233
+ # Pass a key-ID string to select the signing key; pass `true` to use
234
+ # the committer identity. Alias: `:S`
235
+ #
236
+ # @option options [Boolean, nil] :no_gpg_sign (nil) countermand commit.gpgSign
237
+ # configuration (`--no-gpg-sign`)
238
+ #
239
+ # @option options [String] :chdir (nil) change to this directory before
240
+ # running git
241
+ #
242
+ # Not passed to the git CLI.
243
+ #
244
+ # @return [Git::CommandLineResult] the result of calling `git am`
245
+ #
246
+ # @raise [ArgumentError] if unsupported options are provided
247
+ #
248
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
249
+ end
250
+ end
251
+ end
252
+ 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::CommandLineResult] 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::CommandLineResult] 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,47 @@
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::CommandLineResult] the result of calling `git am --retry`
42
+ #
43
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
44
+ end
45
+ end
46
+ end
47
+ 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::CommandLineResult] 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::CommandLineResult] 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
+ # @api private
27
+ #
28
+ # @see https://git-scm.com/docs/git-am git-am documentation
29
+ #
30
+ module Am
31
+ end
32
+ end
33
+ end