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,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Maintenance
8
+ # Initialize and start background maintenance on the current repository
9
+ #
10
+ # @example Start background maintenance with default scheduler
11
+ # Git::Commands::Maintenance::Start.new(execution_context).call
12
+ #
13
+ # @example Start with a specific scheduler
14
+ # Git::Commands::Maintenance::Start.new(execution_context).call(scheduler: 'crontab')
15
+ #
16
+ # @note `arguments` block audited against https://git-scm.com/docs/git-maintenance/2.54.0
17
+ #
18
+ # @see Git::Commands::Maintenance Git::Commands::Maintenance for the full sub-command list
19
+ #
20
+ # @see https://git-scm.com/docs/git-maintenance git-maintenance documentation
21
+ #
22
+ # @api private
23
+ #
24
+ class Start < Git::Commands::Base
25
+ requires_git_version '2.30.0'
26
+
27
+ arguments do
28
+ literal 'maintenance'
29
+ literal 'start'
30
+
31
+ value_option :scheduler, inline: true
32
+ execution_option :env
33
+ end
34
+
35
+ # @!method call(*, **)
36
+ #
37
+ # @overload call(**options)
38
+ #
39
+ # Initialize config values and start background maintenance
40
+ #
41
+ # This performs the same config updates as `register`, then updates
42
+ # the background scheduler to run `git maintenance run --scheduled`
43
+ # on an hourly basis.
44
+ #
45
+ # @param options [Hash] command options
46
+ #
47
+ # @option options [String] :scheduler (nil) specify the scheduler to use
48
+ #
49
+ # Must be one of 'auto', 'crontab', 'systemd-timer', 'launchctl', or 'schtasks'.
50
+ # When 'auto', the appropriate platform-specific scheduler is used.
51
+ # Default is 'auto'.
52
+ #
53
+ # @option options [Hash] :env (nil) environment variables to set for the git
54
+ # process; merged with the default environment; not passed to the git CLI
55
+ #
56
+ # @return [Git::CommandLineResult] the result of calling `git maintenance start`
57
+ #
58
+ # @raise [ArgumentError] if unsupported options are provided
59
+ #
60
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
61
+ #
62
+ # @raise [Git::VersionError] if git version is below 2.30.0
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Maintenance
8
+ # Halt the background maintenance schedule
9
+ #
10
+ # @example Stop background maintenance
11
+ # Git::Commands::Maintenance::Stop.new(execution_context).call
12
+ #
13
+ # @note `arguments` block audited against https://git-scm.com/docs/git-maintenance/2.54.0
14
+ #
15
+ # @see Git::Commands::Maintenance Git::Commands::Maintenance for the full sub-command list
16
+ #
17
+ # @see https://git-scm.com/docs/git-maintenance git-maintenance documentation
18
+ #
19
+ # @api private
20
+ #
21
+ class Stop < Git::Commands::Base
22
+ requires_git_version '2.30.0'
23
+
24
+ arguments do
25
+ literal 'maintenance'
26
+ literal 'stop'
27
+
28
+ execution_option :env
29
+ end
30
+
31
+ # @!method call(*, **)
32
+ #
33
+ # @overload call(**options)
34
+ #
35
+ # Halt the background maintenance schedule
36
+ #
37
+ # The current repository is not removed from the list of maintained
38
+ # repositories, in case the background maintenance is restarted later.
39
+ #
40
+ # @param options [Hash] command options
41
+ #
42
+ # @option options [Hash] :env (nil) environment variables to set for the git
43
+ # process; merged with the default environment; not passed to the git CLI
44
+ #
45
+ # @return [Git::CommandLineResult] the result of calling `git maintenance stop`
46
+ #
47
+ # @raise [ArgumentError] if unsupported options are provided
48
+ #
49
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
50
+ #
51
+ # @raise [Git::VersionError] if git version is below 2.30.0
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Maintenance
8
+ # Remove the current repository from background maintenance
9
+ #
10
+ # @example Unregister the repository from maintenance
11
+ # Git::Commands::Maintenance::Unregister.new(execution_context).call
12
+ #
13
+ # @example Force unregister even if repository is not registered
14
+ # Git::Commands::Maintenance::Unregister.new(execution_context).call(force: true)
15
+ #
16
+ # @note `arguments` block audited against https://git-scm.com/docs/git-maintenance/2.54.0
17
+ #
18
+ # @see Git::Commands::Maintenance Git::Commands::Maintenance for the full sub-command list
19
+ #
20
+ # @see https://git-scm.com/docs/git-maintenance git-maintenance documentation
21
+ #
22
+ # @api private
23
+ #
24
+ class Unregister < Git::Commands::Base
25
+ requires_git_version '2.30.0'
26
+
27
+ arguments do
28
+ literal 'maintenance'
29
+ literal 'unregister'
30
+
31
+ flag_or_value_option :config_file, negatable: true
32
+ flag_option :force, negatable: true
33
+ execution_option :env
34
+ end
35
+
36
+ # @!method call(*, **)
37
+ #
38
+ # @overload call(**options)
39
+ #
40
+ # Remove the current repository from background maintenance
41
+ #
42
+ # This only removes the repository from the configured list.
43
+ # It does not stop the background maintenance processes from running.
44
+ #
45
+ # Reports an error if the current repository is not already registered,
46
+ # unless `--force` is used.
47
+ #
48
+ # @param options [Hash] command options
49
+ #
50
+ # @option options [Boolean, String, nil] :config_file (nil) use a specified
51
+ # config file instead of the global config (`--config-file`)
52
+ #
53
+ # When a String, the path is passed as `--config-file <file>`.
54
+ #
55
+ # @option options [Boolean, nil] :no_config_file (nil) disable the config file
56
+ # (`--no-config-file`)
57
+ #
58
+ # @option options [Boolean, nil] :force (nil) return success even if repository is not registered
59
+ # (`--force`)
60
+ #
61
+ # @option options [Boolean, nil] :no_force (nil) fail if the repository is not registered
62
+ # (`--no-force`)
63
+ #
64
+ # @option options [Hash] :env (nil) environment variables to set for the git
65
+ # process; merged with the default environment; not passed to the git CLI
66
+ #
67
+ # @return [Git::CommandLineResult] the result of calling `git maintenance unregister`
68
+ #
69
+ # @raise [ArgumentError] if unsupported options are provided
70
+ #
71
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
72
+ #
73
+ # @raise [Git::VersionError] if git version is below 2.30.0
74
+ #
75
+ # @api public
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'maintenance/register'
4
+ require_relative 'maintenance/run'
5
+ require_relative 'maintenance/start'
6
+ require_relative 'maintenance/stop'
7
+ require_relative 'maintenance/unregister'
8
+
9
+ module Git
10
+ module Commands
11
+ # Implements `git maintenance` subcommands for repository optimization
12
+ #
13
+ # Split into subclasses because each subcommand has a distinct purpose
14
+ # and option set:
15
+ #
16
+ # - {Maintenance::Run} — run one or more maintenance tasks
17
+ # - {Maintenance::Start} — initialize and start background maintenance
18
+ # - {Maintenance::Stop} — halt the background maintenance schedule
19
+ # - {Maintenance::Register} — add repository to maintenance config
20
+ # - {Maintenance::Unregister} — remove repository from maintenance config
21
+ #
22
+ # All subcommands require Git 2.30.0 or later.
23
+ #
24
+ # @see https://git-scm.com/docs/git-maintenance git-maintenance documentation
25
+ #
26
+ # @api private
27
+ #
28
+ module Maintenance
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Merge
8
+ # Implements `git merge --abort` to abort an in-progress merge
9
+ #
10
+ # Aborts the current merge and reconstructs the pre-merge state.
11
+ # If an autostash entry is present, applies it to the worktree.
12
+ #
13
+ # @example Abort a merge
14
+ # abort_cmd = Git::Commands::Merge::Abort.new(execution_context)
15
+ # abort_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-merge/2.53.0
18
+ #
19
+ # @see Git::Commands::Merge
20
+ #
21
+ # @see https://git-scm.com/docs/git-merge git-merge
22
+ #
23
+ # @api private
24
+ #
25
+ class Abort < Git::Commands::Base
26
+ arguments do
27
+ literal 'merge'
28
+ literal '--abort'
29
+ end
30
+
31
+ # @!method call(*, **)
32
+ #
33
+ # @overload call()
34
+ #
35
+ # Abort the current merge and reconstruct the pre-merge state
36
+ #
37
+ # @return [Git::CommandLineResult] the result of calling
38
+ # `git merge --abort`
39
+ #
40
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Merge
8
+ # Implements `git merge --continue` to complete a merge after conflict resolution
9
+ #
10
+ # After the user has resolved conflicts and staged the changes, the
11
+ # merge can be concluded with this command.
12
+ #
13
+ # @example Continue after resolving conflicts
14
+ # continue_cmd = Git::Commands::Merge::Continue.new(execution_context)
15
+ # continue_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-merge/2.53.0
18
+ #
19
+ # @see Git::Commands::Merge
20
+ #
21
+ # @see https://git-scm.com/docs/git-merge git-merge
22
+ #
23
+ # @api private
24
+ #
25
+ class Continue < Git::Commands::Base
26
+ arguments do
27
+ literal 'merge'
28
+ literal '--continue'
29
+ end
30
+
31
+ # @!method call(*, **)
32
+ #
33
+ # @overload call()
34
+ #
35
+ # Resume the in-progress merge after conflicts have been resolved
36
+ #
37
+ # @return [Git::CommandLineResult] the result of calling
38
+ # `git merge --continue`
39
+ #
40
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Merge
8
+ # Implements `git merge --quit` to quit an in-progress merge
9
+ #
10
+ # Forgets about the current merge in progress. Leaves the index and
11
+ # working tree as-is. If an autostash entry is present, saves it to
12
+ # the stash list.
13
+ #
14
+ # @example Quit the merge, leaving working tree as-is
15
+ # quit_cmd = Git::Commands::Merge::Quit.new(execution_context)
16
+ # quit_cmd.call
17
+ #
18
+ # @note `arguments` block audited against https://git-scm.com/docs/git-merge/2.53.0
19
+ #
20
+ # @see Git::Commands::Merge
21
+ #
22
+ # @see https://git-scm.com/docs/git-merge git-merge
23
+ #
24
+ # @api private
25
+ #
26
+ class Quit < Git::Commands::Base
27
+ arguments do
28
+ literal 'merge'
29
+ literal '--quit'
30
+ end
31
+
32
+ # @!method call(*, **)
33
+ #
34
+ # @overload call()
35
+ #
36
+ # Forget about the current merge in progress, leaving the index
37
+ # and working tree as-is
38
+ #
39
+ # @return [Git::CommandLineResult] the result of calling
40
+ # `git merge --quit`
41
+ #
42
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,245 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Merge
8
+ # Implements `git merge` to incorporate changes from named commits
9
+ #
10
+ # Joins two or more development histories together by incorporating
11
+ # changes from the named commits into the current branch.
12
+ #
13
+ # @example Simple merge
14
+ # merge = Git::Commands::Merge::Start.new(execution_context)
15
+ # merge.call('feature')
16
+ #
17
+ # @example Merge with no fast-forward
18
+ # merge.call('feature', ff: false, m: 'Merge feature branch')
19
+ #
20
+ # @example Squash merge
21
+ # merge.call('feature', squash: true)
22
+ #
23
+ # @example Merge with strategy option
24
+ # merge.call('feature', strategy: 'ort', strategy_option: 'theirs')
25
+ #
26
+ # @example Octopus merge (multiple branches)
27
+ # merge.call('branch1', 'branch2', 'branch3')
28
+ #
29
+ # @note `arguments` block audited against https://git-scm.com/docs/git-merge/2.53.0
30
+ #
31
+ # @see Git::Commands::Merge
32
+ #
33
+ # @see https://git-scm.com/docs/git-merge git-merge
34
+ #
35
+ # @api private
36
+ #
37
+ class Start < Git::Commands::Base
38
+ arguments do
39
+ literal 'merge'
40
+
41
+ # Commit behavior
42
+ flag_option :commit, negatable: true
43
+ flag_option %i[edit e], negatable: true
44
+
45
+ # Commit message cleanup
46
+ value_option :cleanup, inline: true
47
+
48
+ # Fast-forward behavior
49
+ flag_option :ff, negatable: true
50
+ flag_option :ff_only
51
+
52
+ # Signing
53
+ flag_or_value_option %i[gpg_sign S], negatable: true, inline: true
54
+
55
+ # Log message
56
+ flag_or_value_option :log, negatable: true, inline: true
57
+
58
+ # Trailers
59
+ flag_option :signoff, negatable: true
60
+
61
+ # Stat display
62
+ flag_option :stat, negatable: true
63
+ flag_option :compact_summary
64
+
65
+ # Squash
66
+ flag_option :squash
67
+
68
+ # Verification
69
+ flag_option :verify, negatable: true
70
+
71
+ # Strategy options
72
+ value_option %i[strategy s], inline: true
73
+ value_option %i[strategy_option X], inline: true, repeatable: true
74
+
75
+ # Signature verification
76
+ flag_option :verify_signatures, negatable: true
77
+
78
+ # Verbosity and progress
79
+ flag_option %i[quiet q]
80
+ flag_option %i[verbose v]
81
+ flag_option :progress, negatable: true
82
+
83
+ # Stash and history
84
+ flag_option :autostash, negatable: true
85
+ flag_option :allow_unrelated_histories, negatable: true
86
+
87
+ # Message options
88
+ value_option :m
89
+ value_option :into_name
90
+ value_option %i[file F], inline: true
91
+
92
+ # Conflict resolution
93
+ flag_option :rerere_autoupdate, negatable: true
94
+ flag_option :overwrite_ignore, negatable: true
95
+
96
+ end_of_options
97
+
98
+ # Positional: commits to merge (variadic, required)
99
+ operand :commit, repeatable: true, required: true
100
+ end
101
+
102
+ # @!method call(*, **)
103
+ #
104
+ # @overload call(*commit, **options)
105
+ #
106
+ # Execute the git merge command
107
+ #
108
+ # @param commit [Array<String>] one or more branch names, commit SHAs,
109
+ # or refs to merge into the current branch; multiple commits create
110
+ # an octopus merge
111
+ #
112
+ # @param options [Hash] command options
113
+ #
114
+ # @option options [Boolean, nil] :commit (nil) perform merge and commit the result (`--commit`)
115
+ #
116
+ # @option options [Boolean, nil] :no_commit (nil) do not perform a merge commit (`--no-commit`)
117
+ #
118
+ # @option options [Boolean, nil] :edit (nil) open an editor for the merge commit message (`--edit`)
119
+ #
120
+ # Alias: `:e`
121
+ #
122
+ # @option options [Boolean, nil] :no_edit (nil) skip the editor for the merge commit message (`--no-edit`)
123
+ #
124
+ # @option options [String] :cleanup (nil) how the merge message will be cleaned
125
+ # up before committing
126
+ #
127
+ # Accepted values include `strip`, `whitespace`, `verbatim`,
128
+ # `scissors`, and `default`. Emits `--cleanup=<mode>`.
129
+ #
130
+ # @option options [Boolean, nil] :ff (nil) allow fast-forward merges (`--ff`)
131
+ #
132
+ # @option options [Boolean, nil] :no_ff (nil) create a merge commit even when fast-forward is
133
+ # possible (`--no-ff`)
134
+ #
135
+ # @option options [Boolean, nil] :ff_only (nil) refuse to merge unless
136
+ # fast-forward is possible; emits `--ff-only`
137
+ #
138
+ # @option options [Boolean, String, nil] :gpg_sign (nil) GPG-sign the resulting
139
+ # merge commit (`--gpg-sign`)
140
+ #
141
+ # Pass a key ID string to select the signing key; pass `true` to use the
142
+ # committer identity. Alias: `:S`
143
+ #
144
+ # @option options [Boolean, nil] :no_gpg_sign (nil) countermand commit.gpgSign
145
+ # configuration (`--no-gpg-sign`)
146
+ #
147
+ # @option options [Boolean, Integer, nil] :log (nil) populate the merge message
148
+ # with one-line commit descriptions (`--log`)
149
+ #
150
+ # Pass an Integer `n` to limit to `n` entries (`--log=<n>`).
151
+ #
152
+ # @option options [Boolean, nil] :no_log (nil) do not list one-line commit descriptions
153
+ # (`--no-log`)
154
+ #
155
+ # @option options [Boolean, nil] :signoff (nil) add a Signed-off-by trailer to the commit
156
+ # message (`--signoff`)
157
+ #
158
+ # @option options [Boolean, nil] :no_signoff (nil) remove a Signed-off-by trailer from the
159
+ # commit message (`--no-signoff`)
160
+ #
161
+ # @option options [Boolean, nil] :stat (nil) show a diffstat at the end of the merge (`--stat`)
162
+ #
163
+ # @option options [Boolean, nil] :no_stat (nil) suppress the diffstat at the end of the merge (`--no-stat`)
164
+ #
165
+ # @option options [Boolean, nil] :compact_summary (nil) show a compact summary
166
+ # at the end of the merge; emits `--compact-summary`
167
+ #
168
+ # @option options [Boolean, nil] :squash (nil) produce working tree and index
169
+ # state as if a real merge happened, but do not commit; emits `--squash`
170
+ #
171
+ # @option options [Boolean, nil] :verify (nil) run pre-merge and commit-msg hooks (`--verify`)
172
+ #
173
+ # @option options [Boolean, nil] :no_verify (nil) bypass pre-merge and commit-msg hooks (`--no-verify`)
174
+ #
175
+ # @option options [String] :strategy (nil) merge strategy to use
176
+ # (e.g., `'ort'`, `'recursive'`, `'resolve'`, `'octopus'`, `'ours'`, `'subtree'`)
177
+ #
178
+ # Emits `--strategy=<strategy>`. Alias: `:s`
179
+ #
180
+ # @option options [String, Array<String>] :strategy_option (nil) pass
181
+ # option(s) to the merge strategy (e.g., `'ours'`, `'theirs'`, `'patience'`)
182
+ #
183
+ # Can be a single value or an array for multiple `--strategy-option` flags.
184
+ # Emits `--strategy-option=<option>`. Alias: `:X`
185
+ #
186
+ # @option options [Boolean, nil] :verify_signatures (nil) verify commit signatures
187
+ # on the tip of the side branch (`--verify-signatures`)
188
+ #
189
+ # @option options [Boolean, nil] :no_verify_signatures (nil) do not verify commit
190
+ # signatures (`--no-verify-signatures`)
191
+ #
192
+ # @option options [Boolean, nil] :quiet (nil) operate quietly; emits `--quiet`
193
+ #
194
+ # Alias: `:q`
195
+ #
196
+ # @option options [Boolean, nil] :verbose (nil) be verbose; emits `--verbose`
197
+ #
198
+ # Alias: `:v`
199
+ #
200
+ # @option options [Boolean, nil] :progress (nil) force progress status reporting (`--progress`)
201
+ #
202
+ # @option options [Boolean, nil] :no_progress (nil) suppress progress status reporting (`--no-progress`)
203
+ #
204
+ # @option options [Boolean, nil] :autostash (nil) automatically stash and unstash
205
+ # the working tree before and after the operation (`--autostash`)
206
+ #
207
+ # @option options [Boolean, nil] :no_autostash (nil) do not automatically stash and unstash
208
+ # the working tree (`--no-autostash`)
209
+ #
210
+ # @option options [Boolean, nil] :allow_unrelated_histories (nil) allow merging
211
+ # histories that do not share a common ancestor (`--allow-unrelated-histories`)
212
+ #
213
+ # @option options [Boolean, nil] :no_allow_unrelated_histories (nil) disallow merging
214
+ # unrelated histories (`--no-allow-unrelated-histories`)
215
+ #
216
+ # @option options [String] :m (nil) commit message for the merge commit;
217
+ # emits `-m <msg>`
218
+ #
219
+ # @option options [String] :into_name (nil) prepare the default merge message
220
+ # as if merging to the named branch; emits `--into-name <branch>`
221
+ #
222
+ # @option options [String] :file (nil) read the commit message from the given
223
+ # file; emits `--file=<file>`. Alias: `:F`
224
+ #
225
+ # @option options [Boolean, nil] :rerere_autoupdate (nil) allow rerere to update
226
+ # the index with the auto-resolved conflict result (`--rerere-autoupdate`)
227
+ #
228
+ # @option options [Boolean, nil] :no_rerere_autoupdate (nil) prevent rerere from
229
+ # auto-updating the index (`--no-rerere-autoupdate`)
230
+ #
231
+ # @option options [Boolean, nil] :overwrite_ignore (nil) silently overwrite ignored
232
+ # files from the merge result (`--overwrite-ignore`)
233
+ #
234
+ # @option options [Boolean, nil] :no_overwrite_ignore (nil) abort if the merge result
235
+ # would overwrite any ignored files (`--no-overwrite-ignore`)
236
+ #
237
+ # @return [Git::CommandLineResult] the result of calling `git merge`
238
+ #
239
+ # @raise [ArgumentError] if unsupported options are provided
240
+ #
241
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
242
+ end
243
+ end
244
+ end
245
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'merge/abort'
4
+ require_relative 'merge/continue'
5
+ require_relative 'merge/quit'
6
+ require_relative 'merge/start'
7
+
8
+ module Git
9
+ module Commands
10
+ # Commands for joining development histories via `git merge`
11
+ #
12
+ # This module contains command classes for the initial merge ({Start}) and
13
+ # session management ({Continue}, {Abort}, {Quit}):
14
+ #
15
+ # - {Merge::Start} — merge one or more branches into the current branch
16
+ # - {Merge::Continue} — resume after resolving merge conflicts (`--continue`)
17
+ # - {Merge::Abort} — abort the in-progress merge (`--abort`)
18
+ # - {Merge::Quit} — forget the in-progress merge but leave the working tree
19
+ # as-is (`--quit`)
20
+ #
21
+ # @api private
22
+ #
23
+ # @see https://git-scm.com/docs/git-merge git-merge documentation
24
+ #
25
+ module Merge
26
+ end
27
+ end
28
+ end