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.
- checksums.yaml +4 -4
- data/.github/copilot-instructions.md +67 -2705
- data/.github/pull_request_template.md +3 -1
- data/.github/skills/breaking-change-analysis/SKILL.md +102 -0
- data/.github/skills/ci-cd-troubleshooting/SKILL.md +264 -0
- data/.github/skills/command-implementation/REFERENCE.md +993 -0
- data/.github/skills/command-implementation/SKILL.md +229 -0
- data/.github/skills/command-test-conventions/SKILL.md +660 -0
- data/.github/skills/command-yard-documentation/SKILL.md +426 -0
- data/.github/skills/dependency-management/SKILL.md +72 -0
- data/.github/skills/development-workflow/SKILL.md +506 -0
- data/.github/skills/extract-command-from-lib/SKILL.md +487 -0
- data/.github/skills/extract-facade-from-base-lib/SKILL.md +586 -0
- data/.github/skills/facade-implementation/REFERENCE.md +840 -0
- data/.github/skills/facade-implementation/SKILL.md +260 -0
- data/.github/skills/facade-test-conventions/SKILL.md +380 -0
- data/.github/skills/facade-yard-documentation/SKILL.md +429 -0
- data/.github/skills/make-skill-template/SKILL.md +176 -0
- data/.github/skills/pr-readiness-review/SKILL.md +185 -0
- data/.github/skills/project-context/SKILL.md +313 -0
- data/.github/skills/pull-request-review/SKILL.md +168 -0
- data/.github/skills/refactor-command-to-commandlineresult/SKILL.md +131 -0
- data/.github/skills/release-management/SKILL.md +125 -0
- data/.github/skills/review-arguments-dsl/CHECKLIST.md +788 -0
- data/.github/skills/review-arguments-dsl/SKILL.md +214 -0
- data/.github/skills/review-backward-compatibility/SKILL.md +275 -0
- data/.github/skills/review-cross-command-consistency/SKILL.md +139 -0
- data/.github/skills/reviewing-skills/SKILL.md +189 -0
- data/.github/skills/rspec-unit-testing-standards/SKILL.md +639 -0
- data/.github/skills/tdd-refactor-step/SKILL.md +236 -0
- data/.github/skills/test-debugging/SKILL.md +160 -0
- data/.github/skills/yard-documentation/SKILL.md +793 -0
- data/.github/workflows/continuous_integration.yml +3 -2
- data/.github/workflows/enforce_conventional_commits.yml +1 -1
- data/.github/workflows/experimental_continuous_integration.yml +2 -2
- data/.github/workflows/release.yml +3 -4
- data/.gitignore +8 -0
- data/.husky/pre-commit +13 -0
- data/.release-please-manifest.json +1 -1
- data/.rspec +3 -0
- data/.rubocop.yml +7 -3
- data/.rubocop_todo.yml +23 -5
- data/.yardopts +1 -0
- data/CHANGELOG.md +0 -40
- data/CONTRIBUTING.md +694 -53
- data/README.md +17 -5
- data/Rakefile +61 -9
- data/commitlint.test +4 -0
- data/git.gemspec +14 -8
- data/lib/git/args_builder.rb +0 -8
- data/lib/git/base.rb +486 -410
- data/lib/git/branch.rb +380 -43
- data/lib/git/branch_delete_failure.rb +31 -0
- data/lib/git/branch_delete_result.rb +63 -0
- data/lib/git/branch_info.rb +178 -0
- data/lib/git/branches.rb +130 -24
- data/lib/git/command_line/base.rb +245 -0
- data/lib/git/command_line/capturing.rb +249 -0
- data/lib/git/command_line/result.rb +96 -0
- data/lib/git/command_line/streaming.rb +194 -0
- data/lib/git/command_line.rb +43 -322
- data/lib/git/command_line_result.rb +4 -88
- data/lib/git/commands/add.rb +131 -0
- data/lib/git/commands/am/abort.rb +43 -0
- data/lib/git/commands/am/apply.rb +252 -0
- data/lib/git/commands/am/continue.rb +43 -0
- data/lib/git/commands/am/quit.rb +43 -0
- data/lib/git/commands/am/retry.rb +47 -0
- data/lib/git/commands/am/show_current_patch.rb +64 -0
- data/lib/git/commands/am/skip.rb +42 -0
- data/lib/git/commands/am.rb +33 -0
- data/lib/git/commands/apply.rb +237 -0
- data/lib/git/commands/archive/list_formats.rb +46 -0
- data/lib/git/commands/archive.rb +140 -0
- data/lib/git/commands/arguments.rb +3510 -0
- data/lib/git/commands/base.rb +403 -0
- data/lib/git/commands/branch/copy.rb +94 -0
- data/lib/git/commands/branch/create.rb +173 -0
- data/lib/git/commands/branch/delete.rb +80 -0
- data/lib/git/commands/branch/list.rb +162 -0
- data/lib/git/commands/branch/move.rb +94 -0
- data/lib/git/commands/branch/set_upstream.rb +86 -0
- data/lib/git/commands/branch/show_current.rb +49 -0
- data/lib/git/commands/branch/unset_upstream.rb +57 -0
- data/lib/git/commands/branch.rb +34 -0
- data/lib/git/commands/cat_file/batch.rb +364 -0
- data/lib/git/commands/cat_file/filtered.rb +105 -0
- data/lib/git/commands/cat_file/raw.rb +210 -0
- data/lib/git/commands/cat_file.rb +49 -0
- data/lib/git/commands/checkout/branch.rb +151 -0
- data/lib/git/commands/checkout/files.rb +115 -0
- data/lib/git/commands/checkout.rb +38 -0
- data/lib/git/commands/checkout_index.rb +105 -0
- data/lib/git/commands/clean.rb +100 -0
- data/lib/git/commands/clone.rb +240 -0
- data/lib/git/commands/commit.rb +272 -0
- data/lib/git/commands/commit_tree.rb +100 -0
- data/lib/git/commands/config_option_syntax/add.rb +83 -0
- data/lib/git/commands/config_option_syntax/get.rb +117 -0
- data/lib/git/commands/config_option_syntax/get_all.rb +115 -0
- data/lib/git/commands/config_option_syntax/get_color.rb +91 -0
- data/lib/git/commands/config_option_syntax/get_color_bool.rb +93 -0
- data/lib/git/commands/config_option_syntax/get_regexp.rb +115 -0
- data/lib/git/commands/config_option_syntax/get_urlmatch.rb +102 -0
- data/lib/git/commands/config_option_syntax/list.rb +107 -0
- data/lib/git/commands/config_option_syntax/remove_section.rb +74 -0
- data/lib/git/commands/config_option_syntax/rename_section.rb +78 -0
- data/lib/git/commands/config_option_syntax/replace_all.rb +104 -0
- data/lib/git/commands/config_option_syntax/set.rb +114 -0
- data/lib/git/commands/config_option_syntax/unset.rb +89 -0
- data/lib/git/commands/config_option_syntax/unset_all.rb +89 -0
- data/lib/git/commands/config_option_syntax.rb +56 -0
- data/lib/git/commands/describe.rb +155 -0
- data/lib/git/commands/diff.rb +656 -0
- data/lib/git/commands/diff_files.rb +518 -0
- data/lib/git/commands/diff_index.rb +496 -0
- data/lib/git/commands/fetch.rb +352 -0
- data/lib/git/commands/fsck.rb +136 -0
- data/lib/git/commands/gc.rb +132 -0
- data/lib/git/commands/grep.rb +338 -0
- data/lib/git/commands/init.rb +99 -0
- data/lib/git/commands/log.rb +632 -0
- data/lib/git/commands/ls_files.rb +191 -0
- data/lib/git/commands/ls_remote.rb +155 -0
- data/lib/git/commands/ls_tree.rb +131 -0
- data/lib/git/commands/maintenance/register.rb +75 -0
- data/lib/git/commands/maintenance/run.rb +104 -0
- data/lib/git/commands/maintenance/start.rb +66 -0
- data/lib/git/commands/maintenance/stop.rb +55 -0
- data/lib/git/commands/maintenance/unregister.rb +79 -0
- data/lib/git/commands/maintenance.rb +31 -0
- data/lib/git/commands/merge/abort.rb +44 -0
- data/lib/git/commands/merge/continue.rb +44 -0
- data/lib/git/commands/merge/quit.rb +46 -0
- data/lib/git/commands/merge/start.rb +245 -0
- data/lib/git/commands/merge.rb +28 -0
- data/lib/git/commands/merge_base.rb +86 -0
- data/lib/git/commands/mv.rb +77 -0
- data/lib/git/commands/name_rev.rb +114 -0
- data/lib/git/commands/pull.rb +377 -0
- data/lib/git/commands/push.rb +246 -0
- data/lib/git/commands/read_tree.rb +149 -0
- data/lib/git/commands/remote/add.rb +91 -0
- data/lib/git/commands/remote/get_url.rb +66 -0
- data/lib/git/commands/remote/list.rb +54 -0
- data/lib/git/commands/remote/prune.rb +61 -0
- data/lib/git/commands/remote/remove.rb +52 -0
- data/lib/git/commands/remote/rename.rb +69 -0
- data/lib/git/commands/remote/set_branches.rb +63 -0
- data/lib/git/commands/remote/set_head.rb +82 -0
- data/lib/git/commands/remote/set_url.rb +71 -0
- data/lib/git/commands/remote/set_url_add.rb +61 -0
- data/lib/git/commands/remote/set_url_delete.rb +64 -0
- data/lib/git/commands/remote/show.rb +71 -0
- data/lib/git/commands/remote/update.rb +72 -0
- data/lib/git/commands/remote.rb +42 -0
- data/lib/git/commands/repack.rb +277 -0
- data/lib/git/commands/reset.rb +147 -0
- data/lib/git/commands/rev_parse.rb +297 -0
- data/lib/git/commands/revert/abort.rb +45 -0
- data/lib/git/commands/revert/continue.rb +57 -0
- data/lib/git/commands/revert/quit.rb +47 -0
- data/lib/git/commands/revert/skip.rb +44 -0
- data/lib/git/commands/revert/start.rb +153 -0
- data/lib/git/commands/revert.rb +29 -0
- data/lib/git/commands/rm.rb +114 -0
- data/lib/git/commands/show.rb +632 -0
- data/lib/git/commands/show_ref/exclude_existing.rb +120 -0
- data/lib/git/commands/show_ref/exists.rb +78 -0
- data/lib/git/commands/show_ref/list.rb +145 -0
- data/lib/git/commands/show_ref/verify.rb +120 -0
- data/lib/git/commands/show_ref.rb +42 -0
- data/lib/git/commands/stash/apply.rb +75 -0
- data/lib/git/commands/stash/branch.rb +65 -0
- data/lib/git/commands/stash/clear.rb +41 -0
- data/lib/git/commands/stash/create.rb +58 -0
- data/lib/git/commands/stash/drop.rb +67 -0
- data/lib/git/commands/stash/list.rb +39 -0
- data/lib/git/commands/stash/pop.rb +78 -0
- data/lib/git/commands/stash/push.rb +103 -0
- data/lib/git/commands/stash/show.rb +149 -0
- data/lib/git/commands/stash/store.rb +63 -0
- data/lib/git/commands/stash.rb +38 -0
- data/lib/git/commands/status.rb +169 -0
- data/lib/git/commands/symbolic_ref/delete.rb +68 -0
- data/lib/git/commands/symbolic_ref/read.rb +95 -0
- data/lib/git/commands/symbolic_ref/update.rb +76 -0
- data/lib/git/commands/symbolic_ref.rb +38 -0
- data/lib/git/commands/tag/create.rb +139 -0
- data/lib/git/commands/tag/delete.rb +55 -0
- data/lib/git/commands/tag/list.rb +143 -0
- data/lib/git/commands/tag/verify.rb +71 -0
- data/lib/git/commands/tag.rb +26 -0
- data/lib/git/commands/update_ref/batch.rb +140 -0
- data/lib/git/commands/update_ref/delete.rb +92 -0
- data/lib/git/commands/update_ref/update.rb +106 -0
- data/lib/git/commands/update_ref.rb +42 -0
- data/lib/git/commands/version.rb +52 -0
- data/lib/git/commands/worktree/add.rb +140 -0
- data/lib/git/commands/worktree/list.rb +64 -0
- data/lib/git/commands/worktree/lock.rb +58 -0
- data/lib/git/commands/worktree/management_base.rb +51 -0
- data/lib/git/commands/worktree/move.rb +66 -0
- data/lib/git/commands/worktree/prune.rb +67 -0
- data/lib/git/commands/worktree/remove.rb +63 -0
- data/lib/git/commands/worktree/repair.rb +76 -0
- data/lib/git/commands/worktree/unlock.rb +47 -0
- data/lib/git/commands/worktree.rb +43 -0
- data/lib/git/commands/write_tree.rb +68 -0
- data/lib/git/commands.rb +89 -0
- data/lib/git/detached_head_info.rb +54 -0
- data/lib/git/diff.rb +297 -7
- data/lib/git/diff_file_numstat_info.rb +29 -0
- data/lib/git/diff_file_patch_info.rb +134 -0
- data/lib/git/diff_file_raw_info.rb +127 -0
- data/lib/git/diff_info.rb +169 -0
- data/lib/git/diff_path_status.rb +78 -19
- data/lib/git/diff_result.rb +32 -0
- data/lib/git/diff_stats.rb +59 -14
- data/lib/git/dirstat_info.rb +86 -0
- data/lib/git/errors.rb +65 -2
- data/lib/git/execution_context/global.rb +56 -0
- data/lib/git/execution_context/repository.rb +147 -0
- data/lib/git/execution_context.rb +482 -0
- data/lib/git/file_ref.rb +74 -0
- data/lib/git/fsck_object.rb +9 -9
- data/lib/git/fsck_result.rb +1 -1
- data/lib/git/lib.rb +1606 -1028
- data/lib/git/log.rb +15 -2
- data/lib/git/object.rb +92 -22
- data/lib/git/parsers/branch.rb +224 -0
- data/lib/git/parsers/cat_file.rb +111 -0
- data/lib/git/parsers/diff.rb +585 -0
- data/lib/git/parsers/fsck.rb +133 -0
- data/lib/git/parsers/grep.rb +42 -0
- data/lib/git/parsers/ls_tree.rb +58 -0
- data/lib/git/parsers/stash.rb +208 -0
- data/lib/git/parsers/tag.rb +257 -0
- data/lib/git/remote.rb +133 -9
- data/lib/git/repository/branching.rb +572 -0
- data/lib/git/repository/committing.rb +191 -0
- data/lib/git/repository/configuring.rb +156 -0
- data/lib/git/repository/diffing.rb +775 -0
- data/lib/git/repository/inspecting.rb +153 -0
- data/lib/git/repository/logging.rb +247 -0
- data/lib/git/repository/merging.rb +295 -0
- data/lib/git/repository/object_operations.rb +1101 -0
- data/lib/git/repository/path_resolver.rb +207 -0
- data/lib/git/repository/remote_operations.rb +753 -0
- data/lib/git/repository/shared_private.rb +51 -0
- data/lib/git/repository/staging.rb +390 -0
- data/lib/git/repository/stashing.rb +107 -0
- data/lib/git/repository/status_operations.rb +180 -0
- data/lib/git/repository/worktree_operations.rb +159 -0
- data/lib/git/repository.rb +264 -1
- data/lib/git/stash.rb +85 -4
- data/lib/git/stash_info.rb +104 -0
- data/lib/git/stashes.rb +130 -13
- data/lib/git/status.rb +224 -18
- data/lib/git/tag_delete_failure.rb +31 -0
- data/lib/git/tag_delete_result.rb +63 -0
- data/lib/git/tag_info.rb +105 -0
- data/lib/git/version.rb +109 -2
- data/lib/git/version_constraint.rb +81 -0
- data/lib/git/worktree.rb +120 -5
- data/lib/git/worktrees.rb +107 -7
- data/lib/git.rb +114 -18
- data/redesign/1_architecture_existing.md +54 -18
- data/redesign/2_architecture_redesign.md +365 -46
- data/redesign/3_architecture_implementation.md +1451 -54
- data/tasks/gem_tasks.rake +4 -0
- data/tasks/npm_tasks.rake +7 -0
- data/tasks/rspec.rake +48 -0
- data/tasks/test.rake +13 -1
- data/tasks/yard.rake +34 -7
- metadata +349 -20
- data/lib/git/index.rb +0 -6
- data/lib/git/path.rb +0 -38
- data/lib/git/working_directory.rb +0 -6
- /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
|