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,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Branch
8
+ # Implements the `git branch --delete` command for deleting branches
9
+ #
10
+ # @example Delete a single branch
11
+ # delete = Git::Commands::Branch::Delete.new(execution_context)
12
+ # result = delete.call('feature-branch')
13
+ #
14
+ # @example Delete multiple branches
15
+ # delete = Git::Commands::Branch::Delete.new(execution_context)
16
+ # result = delete.call('branch1', 'branch2')
17
+ #
18
+ # @example Force delete (works even if not merged)
19
+ # delete = Git::Commands::Branch::Delete.new(execution_context)
20
+ # result = delete.call('feature-branch', force: true)
21
+ #
22
+ # @example Delete remote-tracking branch
23
+ # delete = Git::Commands::Branch::Delete.new(execution_context)
24
+ # result = delete.call('origin/feature', remotes: true)
25
+ #
26
+ # @note `arguments` block audited against https://git-scm.com/docs/git-branch/2.53.0
27
+ #
28
+ # @see Git::Commands::Branch
29
+ #
30
+ # @see https://git-scm.com/docs/git-branch git-branch
31
+ #
32
+ # @api private
33
+ #
34
+ class Delete < Git::Commands::Base
35
+ arguments do
36
+ literal 'branch'
37
+ literal '--delete'
38
+ flag_option %i[force f]
39
+ flag_option %i[remotes r]
40
+
41
+ end_of_options
42
+
43
+ operand :branch_name, repeatable: true, required: true
44
+ end
45
+
46
+ # git branch --delete exits 1 when one or more branches cannot be deleted
47
+ allow_exit_status 0..1
48
+
49
+ # @!method call(*, **)
50
+ #
51
+ # Execute the git branch --delete command to delete branches
52
+ #
53
+ # @overload call(*branch_name, **options)
54
+ #
55
+ # @param branch_name [Array<String>] One or more branch names to delete.
56
+ #
57
+ # @param options [Hash] command options
58
+ #
59
+ # @option options [Boolean, nil] :force (nil) allow deleting the branch irrespective of its merged
60
+ # status, or whether it even points to a valid commit. This is equivalent
61
+ # to the `-D` shortcut (`--delete --force`).
62
+ #
63
+ # Alias: :f
64
+ #
65
+ # @option options [Boolean, nil] :remotes (nil) delete remote-tracking branches. Use this together
66
+ # with `--delete` to delete remote-tracking branches. Note that this only
67
+ # makes sense if the remote-tracking branches no longer exist in the remote
68
+ # repository or if `git fetch` was configured not to fetch them again.
69
+ #
70
+ # Alias: :r
71
+ #
72
+ # @return [Git::CommandLineResult] the result of calling `git branch --delete`
73
+ #
74
+ # @raise [ArgumentError] if no branch names are provided
75
+ #
76
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 1)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,162 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Branch
8
+ # Implements the `git branch --list` command
9
+ #
10
+ # @example Basic branch listing
11
+ # list = Git::Commands::Branch::List.new(execution_context)
12
+ # branches = list.call
13
+ #
14
+ # @example List all branches (local and remote)
15
+ # list = Git::Commands::Branch::List.new(execution_context)
16
+ # all_branches = list.call(all: true)
17
+ #
18
+ # @example List branches containing a commit
19
+ # list = Git::Commands::Branch::List.new(execution_context)
20
+ # branches = list.call(contains: 'abc123')
21
+ #
22
+ # @example List branches with patterns
23
+ # list = Git::Commands::Branch::List.new(execution_context)
24
+ # feature_branches = list.call('feature/*')
25
+ #
26
+ # @note `arguments` block audited against https://git-scm.com/docs/git-branch/2.53.0
27
+ #
28
+ # @see Git::Commands::Branch
29
+ #
30
+ # @see https://git-scm.com/docs/git-branch git-branch
31
+ #
32
+ # @api private
33
+ #
34
+ class List < Git::Commands::Base
35
+ arguments do
36
+ literal 'branch'
37
+ literal '--list'
38
+
39
+ flag_or_value_option :color, inline: true, negatable: true
40
+ flag_option %i[verbose v], max_times: 2
41
+ flag_or_value_option :abbrev, inline: true, negatable: true
42
+ flag_or_value_option :column, inline: true, negatable: true
43
+ value_option :sort, inline: true, repeatable: true
44
+ flag_or_value_option :merged
45
+ flag_or_value_option :no_merged
46
+ flag_or_value_option :contains
47
+ flag_or_value_option :no_contains
48
+ value_option :points_at
49
+ value_option :format, inline: true
50
+ flag_option %i[remotes r]
51
+ flag_option %i[all a]
52
+ flag_option %i[ignore_case i]
53
+ flag_option :omit_empty
54
+
55
+ end_of_options
56
+
57
+ operand :pattern, repeatable: true
58
+ end
59
+
60
+ # @!method call(*, **)
61
+ #
62
+ # @overload call(*pattern, **options)
63
+ #
64
+ # Execute the `git branch --list` command
65
+ #
66
+ # @param pattern [Array<String>] shell wildcard patterns to filter branches
67
+ #
68
+ # If multiple patterns are given, a branch is shown if it matches any of the patterns.
69
+ #
70
+ # @param options [Hash] command options
71
+ #
72
+ # @option options [Boolean, String, nil] :color (nil) color branches output
73
+ #
74
+ # Pass `true` for `--color` or a string (`'always'`, `'never'`, `'auto'`) for `--color=<when>`.
75
+ #
76
+ # @option options [Boolean, nil] :no_color (nil) suppress colored output (`--no-color`)
77
+ #
78
+ # @option options [Boolean, Integer, nil] :verbose (nil) show sha1 and commit
79
+ # subject for each branch
80
+ #
81
+ # Pass `true` for `--verbose` (show sha1 and subject); pass `2` for
82
+ # `--verbose --verbose` (also show the linked worktree path and upstream
83
+ # branch name).
84
+ #
85
+ # Alias: :v
86
+ #
87
+ # @option options [Boolean, Integer, nil] :abbrev (nil) minimum sha1 display
88
+ # length when used with verbose mode
89
+ #
90
+ # Pass an integer for `--abbrev=<n>` or `true` for `--abbrev` (default length).
91
+ #
92
+ # @option options [Boolean, nil] :no_abbrev (nil) show full sha1s (`--no-abbrev`)
93
+ #
94
+ # @option options [Boolean, String, nil] :column (nil) display branch listing in
95
+ # columns
96
+ #
97
+ # Pass `true` for `--column` or a string of options for `--column=<options>`.
98
+ # Only applicable in non-verbose mode.
99
+ #
100
+ # @option options [Boolean, nil] :no_column (nil) disable column output (`--no-column`)
101
+ #
102
+ # @option options [String, Array<String>] :sort (nil) sort branches by the
103
+ # specified key(s)
104
+ #
105
+ # Give an array to add multiple --sort options. Prefix each key with '-' for
106
+ # descending order. For example, sort: ['refname', '-committerdate'].
107
+ #
108
+ # @option options [Boolean, String, nil] :merged (nil) list only branches merged
109
+ # into the specified commit
110
+ #
111
+ # Pass `true` to default to HEAD or a commit ref string to filter by
112
+ # that commit.
113
+ #
114
+ # @option options [Boolean, String, nil] :no_merged (nil) list only branches not
115
+ # merged into the specified commit
116
+ #
117
+ # Pass `true` to default to HEAD or a commit ref string to filter by
118
+ # that commit.
119
+ #
120
+ # @option options [Boolean, String, nil] :contains (nil) list only branches that
121
+ # contain the specified commit
122
+ #
123
+ # Pass `true` to default to HEAD or a commit ref string to filter by
124
+ # that commit.
125
+ #
126
+ # @option options [Boolean, String, nil] :no_contains (nil) list only branches
127
+ # that don't contain the specified commit
128
+ #
129
+ # Pass `true` to default to HEAD or a commit ref string to filter by
130
+ # that commit.
131
+ #
132
+ # @option options [String] :points_at (nil) list only branches that point
133
+ # at the specified object
134
+ #
135
+ # @option options [String] :format (nil) output format string for each branch
136
+ #
137
+ # @option options [Boolean, nil] :remotes (nil) list only remote-tracking
138
+ # branches
139
+ #
140
+ # Alias: :r
141
+ #
142
+ # @option options [Boolean, nil] :all (nil) list both local and remote branches
143
+ #
144
+ # Alias: :a
145
+ #
146
+ # @option options [Boolean, nil] :ignore_case (nil) sort and filter branches
147
+ # case insensitively
148
+ #
149
+ # Alias: :i
150
+ #
151
+ # @option options [Boolean, nil] :omit_empty (nil) do not print a newline after
152
+ # formatted refs where the format expands to the empty string
153
+ #
154
+ # @return [Git::CommandLineResult] the result of calling `git branch --list`
155
+ #
156
+ # @raise [ArgumentError] if unsupported options are provided
157
+ #
158
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
159
+ end
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Branch
8
+ # Implements the `git branch --move` command for renaming branches
9
+ #
10
+ # This command moves/renames a branch, together with its config and reflog.
11
+ # If the old branch name is omitted, renames the current branch.
12
+ #
13
+ # @example Rename the current branch
14
+ # move = Git::Commands::Branch::Move.new(execution_context)
15
+ # move.call('new-branch-name')
16
+ #
17
+ # @example Rename a specific branch
18
+ # move = Git::Commands::Branch::Move.new(execution_context)
19
+ # move.call('old-branch-name', 'new-branch-name')
20
+ #
21
+ # @example Force rename (overwrite existing branch)
22
+ # move = Git::Commands::Branch::Move.new(execution_context)
23
+ # move.call('old-branch', 'existing-branch', force: true)
24
+ #
25
+ # @note `arguments` block audited against https://git-scm.com/docs/git-branch/2.53.0
26
+ #
27
+ # @see Git::Commands::Branch
28
+ #
29
+ # @see https://git-scm.com/docs/git-branch git-branch
30
+ #
31
+ # @api private
32
+ #
33
+ class Move < Git::Commands::Base
34
+ # NOTE: The positional arguments follow Ruby semantics:
35
+ # - When one positional is provided, it fills new_branch (required)
36
+ # - When two positionals are provided, they fill old_branch and new_branch
37
+ #
38
+ # This matches the git CLI: `git branch -m [<old-branch>] <new-branch>`
39
+ arguments do
40
+ literal 'branch'
41
+ literal '--move'
42
+ flag_option %i[force f]
43
+
44
+ end_of_options
45
+
46
+ operand :old_branch
47
+ operand :new_branch, required: true
48
+ end
49
+
50
+ # @!method call(*, **)
51
+ #
52
+ # Execute the git branch --move command to rename a branch
53
+ #
54
+ # @overload call(new_branch, **options)
55
+ #
56
+ # Rename the current branch to new_branch
57
+ #
58
+ # @param new_branch [String] the new name for the branch
59
+ #
60
+ # @param options [Hash] command options
61
+ #
62
+ # @option options [Boolean, nil] :force (nil) allow renaming even if new_branch already exists
63
+ #
64
+ # Alias: :f
65
+ #
66
+ # @return [Git::CommandLineResult] the result of calling `git branch --move`
67
+ #
68
+ # @raise [ArgumentError] if unsupported options are provided
69
+ #
70
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
71
+ #
72
+ # @overload call(old_branch, new_branch, **options)
73
+ #
74
+ # Rename old_branch to new_branch
75
+ #
76
+ # @param old_branch [String] the current name of the branch
77
+ #
78
+ # @param new_branch [String] the new name for the branch
79
+ #
80
+ # @param options [Hash] command options
81
+ #
82
+ # @option options [Boolean, nil] :force (nil) allow renaming even if new_branch already exists
83
+ #
84
+ # Alias: :f
85
+ #
86
+ # @return [Git::CommandLineResult] the result of calling `git branch --move`
87
+ #
88
+ # @raise [ArgumentError] if unsupported options are provided
89
+ #
90
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Branch
8
+ # Implements the `git branch --set-upstream-to` command for configuring upstream tracking
9
+ #
10
+ # This command sets up tracking information so the specified upstream branch is considered
11
+ # the upstream for the given branch (or current branch if not specified).
12
+ #
13
+ # @example Set upstream for current branch
14
+ # set_upstream = Git::Commands::Branch::SetUpstream.new(execution_context)
15
+ # set_upstream.call(set_upstream_to: 'origin/main')
16
+ #
17
+ # @example Set upstream for a specific branch
18
+ # set_upstream = Git::Commands::Branch::SetUpstream.new(execution_context)
19
+ # set_upstream.call('feature', set_upstream_to: 'origin/main')
20
+ #
21
+ # @note `arguments` block audited against https://git-scm.com/docs/git-branch/2.53.0
22
+ #
23
+ # @see Git::Commands::Branch
24
+ #
25
+ # @see https://git-scm.com/docs/git-branch git-branch
26
+ #
27
+ # @api private
28
+ #
29
+ class SetUpstream < Git::Commands::Base
30
+ # NOTE: The set_upstream_to option maps to git's --set-upstream-to=<upstream> syntax.
31
+ # The branch_name positional is optional; if omitted, git uses the current branch.
32
+ # The set_upstream_to keyword is required by the Ruby method signature, not the DSL.
33
+ arguments do
34
+ literal 'branch'
35
+ value_option %i[set_upstream_to u], inline: true, required: true, allow_nil: false
36
+
37
+ end_of_options
38
+
39
+ operand :branch_name
40
+ end
41
+
42
+ # @!method call(*, **)
43
+ #
44
+ # Execute the git branch --set-upstream-to command
45
+ #
46
+ # @overload call(**options)
47
+ #
48
+ # Sets upstream for the current branch
49
+ #
50
+ # @param options [Hash] command options
51
+ #
52
+ # @option options [String] :set_upstream_to (required) the upstream branch (e.g., 'origin/main')
53
+ #
54
+ # Alias: :u
55
+ #
56
+ # @return [Git::CommandLineResult] the result of calling `git branch --set-upstream-to`
57
+ #
58
+ # @raise [ArgumentError] if set_upstream_to is not provided
59
+ #
60
+ # @raise [ArgumentError] if unsupported options are provided
61
+ #
62
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
63
+ #
64
+ # @overload call(branch_name, **options)
65
+ #
66
+ # Set upstream for the specified branch
67
+ #
68
+ # @param branch_name [String] the branch to set upstream for
69
+ #
70
+ # @param options [Hash] command options
71
+ #
72
+ # @option options [String] :set_upstream_to (required) the upstream branch (e.g., 'origin/main')
73
+ #
74
+ # Alias: :u
75
+ #
76
+ # @return [Git::CommandLineResult] the result of calling `git branch --set-upstream-to`
77
+ #
78
+ # @raise [ArgumentError] if set_upstream_to is not provided
79
+ #
80
+ # @raise [ArgumentError] if unsupported options are provided
81
+ #
82
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Branch
8
+ # Implements the `git branch --show-current` command
9
+ #
10
+ # Prints the name of the current branch. In detached HEAD state, nothing
11
+ # is printed.
12
+ #
13
+ # @example Print the current branch name
14
+ # show_current = Git::Commands::Branch::ShowCurrent.new(execution_context)
15
+ # result = show_current.call
16
+ # puts result.stdout # => "main\n"
17
+ #
18
+ # @example Check for detached HEAD state
19
+ # show_current = Git::Commands::Branch::ShowCurrent.new(execution_context)
20
+ # result = show_current.call
21
+ # # result.stdout is empty ("") when in detached HEAD state
22
+ #
23
+ # @note `arguments` block audited against https://git-scm.com/docs/git-branch/2.53.0
24
+ #
25
+ # @see Git::Commands::Branch
26
+ #
27
+ # @see https://git-scm.com/docs/git-branch git-branch
28
+ #
29
+ # @api private
30
+ #
31
+ class ShowCurrent < Git::Commands::Base
32
+ arguments do
33
+ literal 'branch'
34
+ literal '--show-current'
35
+ end
36
+
37
+ # @!method call(*, **)
38
+ #
39
+ # @overload call()
40
+ #
41
+ # Execute the git branch --show-current command.
42
+ #
43
+ # @return [Git::CommandLineResult] the result of calling `git branch --show-current`
44
+ #
45
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Branch
8
+ # Implements the `git branch --unset-upstream` command for removing upstream tracking
9
+ #
10
+ # This command removes the upstream tracking information for the given branch
11
+ # (or current branch if not specified).
12
+ #
13
+ # @example Unset upstream for current branch
14
+ # unset_upstream = Git::Commands::Branch::UnsetUpstream.new(execution_context)
15
+ # unset_upstream.call
16
+ #
17
+ # @example Unset upstream for a specific branch
18
+ # unset_upstream = Git::Commands::Branch::UnsetUpstream.new(execution_context)
19
+ # unset_upstream.call('feature')
20
+ #
21
+ # @note `arguments` block audited against https://git-scm.com/docs/git-branch/2.53.0
22
+ #
23
+ # @see Git::Commands::Branch
24
+ #
25
+ # @see https://git-scm.com/docs/git-branch git-branch
26
+ #
27
+ # @api private
28
+ #
29
+ class UnsetUpstream < Git::Commands::Base
30
+ # NOTE: The --unset-upstream flag is always present.
31
+ # The branch_name positional is optional; if omitted, git uses the current branch.
32
+ arguments do
33
+ literal 'branch'
34
+ literal '--unset-upstream'
35
+ operand :branch_name
36
+ end
37
+
38
+ # @!method call(*, **)
39
+ #
40
+ # @overload call(branch_name = nil, **options)
41
+ #
42
+ # Execute the `git branch --unset-upstream` command.
43
+ #
44
+ # @param branch_name [String, nil] the branch to remove upstream tracking for
45
+ # (defaults to current branch if omitted)
46
+ #
47
+ # @param options [Hash] command options
48
+ #
49
+ # @return [Git::CommandLineResult] the result of calling `git branch --unset-upstream`
50
+ #
51
+ # @raise [ArgumentError] if unsupported options are provided
52
+ #
53
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'branch/copy'
4
+ require_relative 'branch/create'
5
+ require_relative 'branch/delete'
6
+ require_relative 'branch/list'
7
+ require_relative 'branch/move'
8
+ require_relative 'branch/set_upstream'
9
+ require_relative 'branch/show_current'
10
+ require_relative 'branch/unset_upstream'
11
+
12
+ module Git
13
+ module Commands
14
+ # Commands for managing branches via `git branch`
15
+ #
16
+ # This module contains command classes split by branch operation:
17
+ #
18
+ # - {Branch::Create} — create a new branch
19
+ # - {Branch::Delete} — delete one or more branches (`--delete` / `--delete --force`)
20
+ # - {Branch::List} — list branches with optional filtering
21
+ # - {Branch::Move} — rename a branch (`--move` / `--move --force`)
22
+ # - {Branch::Copy} — copy a branch (`--copy` / `--copy --force`)
23
+ # - {Branch::ShowCurrent} — print the current branch name (`--show-current`)
24
+ # - {Branch::SetUpstream} — set upstream tracking (`--set-upstream-to`)
25
+ # - {Branch::UnsetUpstream} — remove upstream tracking (`--unset-upstream`)
26
+ #
27
+ # @api private
28
+ #
29
+ # @see https://git-scm.com/docs/git-branch git-branch documentation
30
+ #
31
+ module Branch
32
+ end
33
+ end
34
+ end