git 4.4.1 → 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 -67
  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 -66
  45. data/CONTRIBUTING.md +694 -53
  46. data/README.md +17 -17
  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 +488 -412
  52. data/lib/git/branch.rb +117 -59
  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 -1085
  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 +226 -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 +117 -56
  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
@@ -1,92 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Git
4
- # The result of running a git command
5
- #
6
- # This object stores the Git command executed and its status, stdout, and stderr.
7
- #
8
- # @api public
9
- #
10
- class CommandLineResult
11
- # Create a CommandLineResult object
12
- #
13
- # @example
14
- # `true`
15
- # git_cmd = %w[git version]
16
- # status = $?
17
- # stdout = "git version 2.39.1\n"
18
- # stderr = ""
19
- # result = Git::CommandLineResult.new(git_cmd, status, stdout, stderr)
20
- #
21
- # @param git_cmd [Array<String>] the git command that was executed
22
- # @param status [ProcessExecuter::ResultWithCapture] the status of the process
23
- # @param stdout [String] the processed stdout of the process
24
- # @param stderr [String] the processed stderr of the process
25
- #
26
- def initialize(git_cmd, status, stdout, stderr)
27
- @git_cmd = git_cmd
28
- @status = status
29
- @stdout = stdout
30
- @stderr = stderr
31
-
32
- # ProcessExecuter::ResultWithCapture changed the timeout? method to timed_out?
33
- # in version 4.x. This is a compatibility layer to maintain the old method name
34
- # for backward compatibility.
35
- #
36
- status.define_singleton_method(:timeout?) { timed_out? }
37
- end
38
-
39
- # @attribute [r] git_cmd
40
- #
41
- # The git command that was executed
42
- #
43
- # @example
44
- # git_cmd = %w[git version]
45
- # result = Git::CommandLineResult.new(git_cmd, $?, "", "")
46
- # result.git_cmd #=> ["git", "version"]
47
- #
48
- # @return [Array<String>]
49
- #
50
- attr_reader :git_cmd
3
+ require 'git/command_line/result'
51
4
 
52
- # @attribute [r] status
53
- #
54
- # The status of the process
55
- #
56
- # @example
57
- # `true`
58
- # status = $?
59
- # result = Git::CommandLineResult.new(status, "", "")
60
- # result.status #=> #<Process::Status: pid 87859 exit 0>
61
- #
62
- # @return [Process::Status]
63
- #
64
- attr_reader :status
65
-
66
- # @attribute [r] stdout
67
- #
68
- # The output of the process
69
- #
70
- # @example
71
- # stdout = "git version 2.39.1\n"
72
- # result = Git::CommandLineResult.new($?, stdout, "")
73
- # result.stdout #=> "git version 2.39.1\n"
74
- #
75
- # @return [String]
76
- #
77
- attr_reader :stdout
78
-
79
- # @attribute [r] stderr
80
- #
81
- # The error output of the process
82
- #
83
- # @example
84
- # stderr = "Tag not found\n"
85
- # result = Git::CommandLineResult.new($?, "", stderr)
86
- # result.stderr #=> "Tag not found\n"
87
- #
88
- # @return [String]
89
- #
90
- attr_reader :stderr
91
- end
5
+ module Git
6
+ # Backward-compatible alias for {Git::CommandLine::Result}
7
+ CommandLineResult = Git::CommandLine::Result
92
8
  end
@@ -0,0 +1,131 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git add` command
8
+ #
9
+ # This command updates the index using the current content found in the working tree,
10
+ # to prepare the content staged for the next commit.
11
+ #
12
+ # @note `arguments` block audited against https://git-scm.com/docs/git-add/2.53.0
13
+ #
14
+ # @see https://git-scm.com/docs/git-add git-add
15
+ #
16
+ # @see Git::Commands
17
+ #
18
+ # @api private
19
+ #
20
+ # @example Basic usage
21
+ # add = Git::Commands::Add.new(execution_context)
22
+ # add.call('path/to/file')
23
+ # add.call('file1.rb', 'file2.rb')
24
+ # add.call(all: true)
25
+ #
26
+ class Add < Git::Commands::Base
27
+ arguments do
28
+ literal 'add'
29
+ flag_option %i[verbose v]
30
+ flag_option %i[dry_run n]
31
+ flag_option %i[force f]
32
+ flag_option %i[all A], negatable: true
33
+ flag_option :ignore_removal, negatable: true
34
+ flag_option %i[update u]
35
+ flag_option :sparse
36
+ flag_option %i[intent_to_add N]
37
+ flag_option :refresh
38
+ flag_option :ignore_errors
39
+ flag_option :ignore_missing
40
+ flag_option :renormalize
41
+ flag_option :no_warn_embedded_repo
42
+ value_option :chmod, inline: true
43
+ value_option :pathspec_from_file, inline: true
44
+ flag_option :pathspec_file_nul
45
+ end_of_options
46
+ operand :pathspec, repeatable: true
47
+ end
48
+
49
+ # @!method call(*, **)
50
+ #
51
+ # @overload call(*pathspec, **options)
52
+ #
53
+ # Execute the `git add` command
54
+ #
55
+ # @param pathspec [Array<String>] files to be added to the repository
56
+ # (relative to the worktree root)
57
+ #
58
+ # @param options [Hash] command options
59
+ #
60
+ # @option options [Boolean, nil] :verbose (nil) be verbose
61
+ #
62
+ # Alias: :v
63
+ #
64
+ # @option options [Boolean, nil] :dry_run (nil) don't actually add files; show what would be added
65
+ #
66
+ # Alias: :n
67
+ #
68
+ # @option options [Boolean, nil] :force (nil) allow adding otherwise ignored files
69
+ #
70
+ # Alias: :f
71
+ #
72
+ # @option options [Boolean, nil] :all (nil) add, modify, and remove index entries to
73
+ # match the worktree (--all)
74
+ #
75
+ # Alias: :A
76
+ #
77
+ # @option options [Boolean, nil] :no_all (nil) add and modify index entries without staging
78
+ # removals (--no-all)
79
+ #
80
+ # @option options [Boolean, nil] :ignore_removal (nil) add and modify files; ignore removals
81
+ # (--ignore-removal)
82
+ #
83
+ # @option options [Boolean, nil] :no_ignore_removal (nil) include file removals (--no-ignore-removal)
84
+ #
85
+ # @option options [Boolean, nil] :update (nil) update tracked files only; does not add new files
86
+ #
87
+ # Alias: :u
88
+ #
89
+ # @option options [Boolean, nil] :sparse (nil) allow updating index entries outside the
90
+ # sparse-checkout cone
91
+ #
92
+ # @option options [Boolean, nil] :intent_to_add (nil) record that the path will be added later,
93
+ # placing an empty entry in the index
94
+ #
95
+ # Alias: :N
96
+ #
97
+ # @option options [Boolean, nil] :refresh (nil) refresh stat() information in the index without
98
+ # adding files
99
+ #
100
+ # @option options [Boolean, nil] :ignore_errors (nil) continue adding other files if some files
101
+ # cannot be added due to indexing errors
102
+ #
103
+ # @option options [Boolean, nil] :ignore_missing (nil) check whether any given files would be
104
+ # ignored
105
+ #
106
+ # @option options [Boolean, nil] :renormalize (nil) apply the "clean" process freshly to all tracked
107
+ # files to forcibly re-add them with correct line endings
108
+ #
109
+ # @option options [Boolean, nil] :no_warn_embedded_repo (nil) suppress warning when adding an
110
+ # embedded repository without using `git submodule add`
111
+ #
112
+ # @option options [String] :chmod (nil) override the executable bit of added files in the index
113
+ #
114
+ # Value must be `'+x'` or `'-x'`
115
+ #
116
+ # @option options [String] :pathspec_from_file (nil) read pathspec from the given file
117
+ # (use `'-'` for stdin)
118
+ #
119
+ # @option options [Boolean, nil] :pathspec_file_nul (nil) separate pathspec elements with NUL
120
+ # when reading from a file
121
+ #
122
+ # @return [Git::CommandLineResult] the result of calling `git add`
123
+ #
124
+ # @raise [ArgumentError] if unsupported options are provided
125
+ #
126
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
127
+ #
128
+ # @api public
129
+ end
130
+ end
131
+ 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 --abort` to abort an in-progress am session
9
+ #
10
+ # Aborts the in-progress patch application and restores the branch to
11
+ # the state it was in before the `git am` session started.
12
+ #
13
+ # @example Abort an am session
14
+ # abort_cmd = Git::Commands::Am::Abort.new(execution_context)
15
+ # abort_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 Abort < Git::Commands::Base
26
+ arguments do
27
+ literal 'am'
28
+ literal '--abort'
29
+ end
30
+
31
+ # @!method call(*, **)
32
+ #
33
+ # @overload call()
34
+ #
35
+ # Abort the in-progress am session and restore the branch
36
+ #
37
+ # @return [Git::CommandLineResult] the result of calling `git am --abort`
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,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