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,143 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Tag
|
|
8
|
+
# Implements the `git tag --list` command
|
|
9
|
+
#
|
|
10
|
+
# This command lists existing tags with optional filtering and sorting.
|
|
11
|
+
#
|
|
12
|
+
# @example Basic tag listing
|
|
13
|
+
# list = Git::Commands::Tag::List.new(execution_context)
|
|
14
|
+
# tags = list.call
|
|
15
|
+
#
|
|
16
|
+
# @example List tags matching a pattern
|
|
17
|
+
# list = Git::Commands::Tag::List.new(execution_context)
|
|
18
|
+
# tags = list.call('v1.*')
|
|
19
|
+
#
|
|
20
|
+
# @example List tags containing a commit
|
|
21
|
+
# list = Git::Commands::Tag::List.new(execution_context)
|
|
22
|
+
# tags = list.call(contains: 'abc123')
|
|
23
|
+
#
|
|
24
|
+
# @example List tags with multiple patterns
|
|
25
|
+
# list = Git::Commands::Tag::List.new(execution_context)
|
|
26
|
+
# tags = list.call('v1.*', 'v2.*', sort: 'version:refname')
|
|
27
|
+
#
|
|
28
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-tag/2.53.0
|
|
29
|
+
#
|
|
30
|
+
# @see Git::Commands::Tag
|
|
31
|
+
#
|
|
32
|
+
# @see https://git-scm.com/docs/git-tag git-tag
|
|
33
|
+
#
|
|
34
|
+
# @api private
|
|
35
|
+
#
|
|
36
|
+
class List < Git::Commands::Base
|
|
37
|
+
arguments do
|
|
38
|
+
literal 'tag'
|
|
39
|
+
literal '--list'
|
|
40
|
+
|
|
41
|
+
# Annotation display
|
|
42
|
+
flag_or_value_option :n, inline: true
|
|
43
|
+
|
|
44
|
+
# Output ordering and presentation
|
|
45
|
+
value_option :sort, inline: true, repeatable: true
|
|
46
|
+
flag_or_value_option :color, inline: true
|
|
47
|
+
flag_option %i[ignore_case i]
|
|
48
|
+
flag_option :omit_empty
|
|
49
|
+
flag_or_value_option :column, negatable: true, inline: true
|
|
50
|
+
|
|
51
|
+
# Filtering
|
|
52
|
+
flag_or_value_option :contains
|
|
53
|
+
flag_or_value_option :no_contains
|
|
54
|
+
flag_or_value_option :merged
|
|
55
|
+
flag_or_value_option :no_merged
|
|
56
|
+
flag_or_value_option :points_at
|
|
57
|
+
|
|
58
|
+
# Output format
|
|
59
|
+
value_option :format, inline: true
|
|
60
|
+
|
|
61
|
+
end_of_options
|
|
62
|
+
operand :pattern, repeatable: true
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @!method call(*, **)
|
|
66
|
+
#
|
|
67
|
+
# Execute the git tag --list command
|
|
68
|
+
#
|
|
69
|
+
# @overload call(*pattern, **options)
|
|
70
|
+
#
|
|
71
|
+
# @param pattern [Array<String>] Shell wildcard patterns to filter tags
|
|
72
|
+
#
|
|
73
|
+
# Multiple patterns can be provided; a tag is shown if it matches any pattern.
|
|
74
|
+
#
|
|
75
|
+
# @param options [Hash] command options
|
|
76
|
+
#
|
|
77
|
+
# @option options [Boolean, Integer, nil] :n (nil) Number of annotation lines to print
|
|
78
|
+
#
|
|
79
|
+
# Pass `true` to print the first annotation line, or an integer to print that
|
|
80
|
+
# many lines. If the tag is not annotated, the commit message is displayed instead.
|
|
81
|
+
#
|
|
82
|
+
# @option options [String, Array<String>] :sort (nil) Sort tags by the specified
|
|
83
|
+
# key(s)
|
|
84
|
+
#
|
|
85
|
+
# Prefix `-` to sort in descending order. Common keys: 'refname',
|
|
86
|
+
# '-refname', 'creatordate', '-creatordate', 'version:refname' (for semantic
|
|
87
|
+
# version sorting).
|
|
88
|
+
#
|
|
89
|
+
# @option options [Boolean, String, nil] :color (nil) Colorize output per colors
|
|
90
|
+
# specified in `--format`
|
|
91
|
+
#
|
|
92
|
+
# Pass `true` for `--color`, or one of `'always'`, `'never'`, `'auto'`.
|
|
93
|
+
#
|
|
94
|
+
# @option options [Boolean, nil] :ignore_case (nil) Sorting and filtering tags are
|
|
95
|
+
# case insensitive
|
|
96
|
+
#
|
|
97
|
+
# Alias: :i
|
|
98
|
+
#
|
|
99
|
+
# @option options [Boolean, nil] :omit_empty (nil) Do not print a newline after
|
|
100
|
+
# formatted refs where the format expands to the empty string
|
|
101
|
+
#
|
|
102
|
+
# @option options [Boolean, String, nil] :column (nil) Display tag listing in columns
|
|
103
|
+
#
|
|
104
|
+
# Pass `true` for `--column` or a comma-separated options string
|
|
105
|
+
# (see `column.tag` configuration for syntax) for `--column=<options>`.
|
|
106
|
+
#
|
|
107
|
+
# @option options [Boolean, nil] :no_column (nil) disable column output (`--no-column`)
|
|
108
|
+
#
|
|
109
|
+
# @option options [Boolean, String, nil] :contains (nil) List only tags that contain the
|
|
110
|
+
# specified commit
|
|
111
|
+
#
|
|
112
|
+
# Pass `true` to use HEAD, or a commit reference string.
|
|
113
|
+
#
|
|
114
|
+
# @option options [Boolean, String, nil] :no_contains (nil) List only tags that don't contain
|
|
115
|
+
# the specified commit
|
|
116
|
+
#
|
|
117
|
+
# Pass `true` to use HEAD, or a commit reference string.
|
|
118
|
+
#
|
|
119
|
+
# @option options [Boolean, String, nil] :merged (nil) List only tags whose commits are
|
|
120
|
+
# reachable from the specified commit
|
|
121
|
+
#
|
|
122
|
+
# Pass `true` to use HEAD, or a commit reference string.
|
|
123
|
+
#
|
|
124
|
+
# @option options [Boolean, String, nil] :no_merged (nil) List only tags whose commits are
|
|
125
|
+
# not reachable from the specified commit
|
|
126
|
+
#
|
|
127
|
+
# Pass `true` to use HEAD, or a commit reference string.
|
|
128
|
+
#
|
|
129
|
+
# @option options [Boolean, String, nil] :points_at (nil) List only tags that point at the
|
|
130
|
+
# specified object
|
|
131
|
+
#
|
|
132
|
+
# Pass `true` to use HEAD, or an object reference string.
|
|
133
|
+
#
|
|
134
|
+
# @option options [String] :format (nil) Output format string for each tag
|
|
135
|
+
#
|
|
136
|
+
# @return [Git::CommandLineResult] the result of calling `git tag --list`
|
|
137
|
+
#
|
|
138
|
+
# @raise [Git::FailedError] if git returns a non-zero exit code
|
|
139
|
+
#
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Tag
|
|
8
|
+
# Implements the `git tag --verify` command for verifying tag signatures
|
|
9
|
+
#
|
|
10
|
+
# This command verifies the cryptographic signature of the given tag(s).
|
|
11
|
+
# It requires that the tags were signed with GPG or another supported
|
|
12
|
+
# signing backend.
|
|
13
|
+
#
|
|
14
|
+
# @example Verify a single tag
|
|
15
|
+
# verify = Git::Commands::Tag::Verify.new(execution_context)
|
|
16
|
+
# verify.call('v1.0.0')
|
|
17
|
+
#
|
|
18
|
+
# @example Verify multiple tags
|
|
19
|
+
# verify = Git::Commands::Tag::Verify.new(execution_context)
|
|
20
|
+
# verify.call('v1.0.0', 'v2.0.0')
|
|
21
|
+
#
|
|
22
|
+
# @example Verify with custom format output
|
|
23
|
+
# verify = Git::Commands::Tag::Verify.new(execution_context)
|
|
24
|
+
# verify.call('v1.0.0', format: '%(refname:short) %(contents:subject)')
|
|
25
|
+
#
|
|
26
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-tag/2.53.0
|
|
27
|
+
#
|
|
28
|
+
# @see Git::Commands::Tag
|
|
29
|
+
#
|
|
30
|
+
# @see https://git-scm.com/docs/git-tag git-tag
|
|
31
|
+
#
|
|
32
|
+
# @api private
|
|
33
|
+
#
|
|
34
|
+
class Verify < Git::Commands::Base
|
|
35
|
+
arguments do
|
|
36
|
+
literal 'tag'
|
|
37
|
+
literal '--verify'
|
|
38
|
+
value_option :format, inline: true
|
|
39
|
+
|
|
40
|
+
end_of_options
|
|
41
|
+
|
|
42
|
+
operand :tagname, repeatable: true, required: true
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @!method call(*, **)
|
|
46
|
+
#
|
|
47
|
+
# Execute the git tag --verify command to verify tag signatures
|
|
48
|
+
#
|
|
49
|
+
# @overload call(*tagname, **options)
|
|
50
|
+
#
|
|
51
|
+
# @param tagname [Array<String>] one or more tag names to verify
|
|
52
|
+
#
|
|
53
|
+
# @param options [Hash] command options
|
|
54
|
+
#
|
|
55
|
+
# @option options [String] :format (nil) a format string interpolating
|
|
56
|
+
# `%(fieldname)` from the tag ref being shown and the object it points at
|
|
57
|
+
#
|
|
58
|
+
# The format is the same as that of git-for-each-ref(1).
|
|
59
|
+
#
|
|
60
|
+
# @return [Git::CommandLineResult] the result of calling `git tag --verify`
|
|
61
|
+
#
|
|
62
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
63
|
+
#
|
|
64
|
+
# @raise [ArgumentError] if no tagname operands are provided
|
|
65
|
+
#
|
|
66
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
67
|
+
#
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'tag/create'
|
|
4
|
+
require_relative 'tag/delete'
|
|
5
|
+
require_relative 'tag/list'
|
|
6
|
+
require_relative 'tag/verify'
|
|
7
|
+
|
|
8
|
+
module Git
|
|
9
|
+
module Commands
|
|
10
|
+
# Commands for managing tags via `git tag`
|
|
11
|
+
#
|
|
12
|
+
# This module contains command classes split by tag operation:
|
|
13
|
+
#
|
|
14
|
+
# - {Tag::Create} — create a new lightweight or annotated tag
|
|
15
|
+
# - {Tag::Delete} — delete one or more tags (`--delete`)
|
|
16
|
+
# - {Tag::List} — list tags with optional filtering (`--list`)
|
|
17
|
+
# - {Tag::Verify} — verify GPG signatures of tags (`--verify`)
|
|
18
|
+
#
|
|
19
|
+
# @api private
|
|
20
|
+
#
|
|
21
|
+
# @see https://git-scm.com/docs/git-tag git-tag documentation
|
|
22
|
+
#
|
|
23
|
+
module Tag
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module UpdateRef
|
|
8
|
+
# Performs batch ref updates via the `git update-ref --stdin` protocol
|
|
9
|
+
#
|
|
10
|
+
# Reads update/create/delete/verify instructions from stdin. By default
|
|
11
|
+
# all modifications are applied atomically — either all succeed or none do.
|
|
12
|
+
# Pass `batch_updates: true` to switch to non-atomic mode, where each
|
|
13
|
+
# instruction is applied independently and individual failures are reported
|
|
14
|
+
# without aborting the remaining updates (requires git 2.47+).
|
|
15
|
+
#
|
|
16
|
+
# This is the batch counterpart to the single-ref {UpdateRef::Update} and
|
|
17
|
+
# {UpdateRef::Delete} commands.
|
|
18
|
+
#
|
|
19
|
+
# Instructions are newline-delimited by default; pass `z: true` to switch
|
|
20
|
+
# to NUL-delimited format. See the
|
|
21
|
+
# {https://git-scm.com/docs/git-update-ref#_stdin_mode git-update-ref}
|
|
22
|
+
# documentation for the full instruction grammar.
|
|
23
|
+
#
|
|
24
|
+
# @example Atomically update two refs
|
|
25
|
+
# cmd = Git::Commands::UpdateRef::Batch.new(execution_context)
|
|
26
|
+
# cmd.call(
|
|
27
|
+
# 'update refs/heads/main newsha oldsha',
|
|
28
|
+
# 'delete refs/heads/old-branch'
|
|
29
|
+
# )
|
|
30
|
+
#
|
|
31
|
+
# @example NUL-delimited instructions
|
|
32
|
+
# cmd = Git::Commands::UpdateRef::Batch.new(execution_context)
|
|
33
|
+
# cmd.call("update refs/heads/main\0newsha\0oldsha", z: true)
|
|
34
|
+
#
|
|
35
|
+
# @example Non-atomic batch (independent failures)
|
|
36
|
+
# cmd = Git::Commands::UpdateRef::Batch.new(execution_context)
|
|
37
|
+
# cmd.call(
|
|
38
|
+
# 'update refs/heads/main newsha oldsha',
|
|
39
|
+
# 'delete refs/heads/old-branch',
|
|
40
|
+
# batch_updates: true
|
|
41
|
+
# )
|
|
42
|
+
#
|
|
43
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-update-ref/2.53.0
|
|
44
|
+
#
|
|
45
|
+
# @see Git::Commands::UpdateRef
|
|
46
|
+
#
|
|
47
|
+
# @see https://git-scm.com/docs/git-update-ref git-update-ref documentation
|
|
48
|
+
#
|
|
49
|
+
# @api private
|
|
50
|
+
#
|
|
51
|
+
class Batch < Git::Commands::Base
|
|
52
|
+
arguments do
|
|
53
|
+
literal 'update-ref'
|
|
54
|
+
|
|
55
|
+
# Reflog message appended to each update entry
|
|
56
|
+
value_option :m
|
|
57
|
+
|
|
58
|
+
# Overwrite refs themselves rather than following symbolic refs
|
|
59
|
+
flag_option :no_deref
|
|
60
|
+
|
|
61
|
+
# Read instructions from stdin
|
|
62
|
+
literal '--stdin'
|
|
63
|
+
|
|
64
|
+
# Use NUL-delimited input instead of newline-delimited
|
|
65
|
+
flag_option :z
|
|
66
|
+
|
|
67
|
+
# Allow individual updates to fail without aborting the batch
|
|
68
|
+
flag_option :batch_updates
|
|
69
|
+
|
|
70
|
+
execution_option :timeout
|
|
71
|
+
|
|
72
|
+
# Instructions written to stdin, not argv.
|
|
73
|
+
# Using skip_cli: true because these values are fed via stdin —
|
|
74
|
+
# git never sees them as CLI arguments so Ruby must enforce
|
|
75
|
+
# the constraint below.
|
|
76
|
+
operand :instructions, repeatable: true, skip_cli: true, required: true
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# @overload call(*instructions, **options)
|
|
80
|
+
#
|
|
81
|
+
# Execute `git update-ref --stdin` with instructions fed via stdin
|
|
82
|
+
#
|
|
83
|
+
# @param instructions [Array<String>] one or more instruction lines
|
|
84
|
+
# written to stdin of the `git update-ref` process
|
|
85
|
+
#
|
|
86
|
+
# Each element is written as a separate line (or NUL-terminated
|
|
87
|
+
# record when `z: true`). The instruction format is documented in
|
|
88
|
+
# the
|
|
89
|
+
# {https://git-scm.com/docs/git-update-ref#_stdin_mode git-update-ref}
|
|
90
|
+
# man page.
|
|
91
|
+
#
|
|
92
|
+
# @param options [Hash] command options
|
|
93
|
+
#
|
|
94
|
+
# @option options [String] :m (nil) a reflog message for each
|
|
95
|
+
# update
|
|
96
|
+
#
|
|
97
|
+
# @option options [Boolean, nil] :no_deref (nil) overwrite refs
|
|
98
|
+
# themselves rather than following symbolic refs
|
|
99
|
+
#
|
|
100
|
+
# @option options [Boolean, nil] :z (nil) use NUL-delimited input
|
|
101
|
+
# instead of newline-delimited
|
|
102
|
+
#
|
|
103
|
+
# @option options [Boolean, nil] :batch_updates (nil) allow individual updates to fail
|
|
104
|
+
#
|
|
105
|
+
# When set, each instruction is applied independently; failed instructions are
|
|
106
|
+
# reported but do not abort the remaining updates. System-level failures (I/O,
|
|
107
|
+
# memory) still abort all updates.
|
|
108
|
+
#
|
|
109
|
+
# @option options [Numeric] :timeout (nil) abort the command after this many seconds
|
|
110
|
+
#
|
|
111
|
+
# @return [Git::CommandLineResult] the result of calling
|
|
112
|
+
# `git update-ref --stdin`
|
|
113
|
+
#
|
|
114
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
115
|
+
#
|
|
116
|
+
# @raise [ArgumentError] if no instructions are provided
|
|
117
|
+
#
|
|
118
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
119
|
+
def call(*, **)
|
|
120
|
+
bound = args_definition.bind(*, **)
|
|
121
|
+
validate_version!
|
|
122
|
+
with_stdin(build_stdin(bound)) do |reader|
|
|
123
|
+
result = @execution_context.command_capturing(
|
|
124
|
+
*bound, in: reader, **bound.execution_options, raise_on_failure: false
|
|
125
|
+
)
|
|
126
|
+
validate_exit_status!(result)
|
|
127
|
+
result
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
private
|
|
132
|
+
|
|
133
|
+
def build_stdin(bound)
|
|
134
|
+
delimiter = bound.z? ? "\0" : "\n"
|
|
135
|
+
Array(bound.instructions).map { |i| "#{i}#{delimiter}" }.join
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module UpdateRef
|
|
8
|
+
# Deletes a ref via `git update-ref -d`
|
|
9
|
+
#
|
|
10
|
+
# Removes the named ref after optionally verifying it still contains
|
|
11
|
+
# `<oldvalue>`. Follows symbolic refs by default unless `no_deref: true`
|
|
12
|
+
# is given.
|
|
13
|
+
#
|
|
14
|
+
# @example Delete a branch ref
|
|
15
|
+
# cmd = Git::Commands::UpdateRef::Delete.new(execution_context)
|
|
16
|
+
# cmd.call('refs/heads/old-branch')
|
|
17
|
+
#
|
|
18
|
+
# @example Delete with old-value verification
|
|
19
|
+
# cmd = Git::Commands::UpdateRef::Delete.new(execution_context)
|
|
20
|
+
# cmd.call('refs/heads/old-branch', 'expected-sha')
|
|
21
|
+
#
|
|
22
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-update-ref/2.53.0
|
|
23
|
+
#
|
|
24
|
+
# @see Git::Commands::UpdateRef
|
|
25
|
+
#
|
|
26
|
+
# @see https://git-scm.com/docs/git-update-ref git-update-ref documentation
|
|
27
|
+
#
|
|
28
|
+
# @api private
|
|
29
|
+
#
|
|
30
|
+
class Delete < Git::Commands::Base
|
|
31
|
+
arguments do
|
|
32
|
+
literal 'update-ref'
|
|
33
|
+
|
|
34
|
+
# Reflog message appended to the delete entry
|
|
35
|
+
value_option :m
|
|
36
|
+
|
|
37
|
+
# Overwrite the ref itself rather than following symbolic refs
|
|
38
|
+
flag_option :no_deref
|
|
39
|
+
|
|
40
|
+
# Delete the named ref
|
|
41
|
+
literal '-d'
|
|
42
|
+
|
|
43
|
+
execution_option :timeout
|
|
44
|
+
|
|
45
|
+
end_of_options
|
|
46
|
+
|
|
47
|
+
# The ref to delete (e.g. `refs/heads/old-branch`)
|
|
48
|
+
operand :ref, required: true
|
|
49
|
+
|
|
50
|
+
# Optional expected current value — the delete is rejected if
|
|
51
|
+
# the ref does not currently point to this object
|
|
52
|
+
operand :oldvalue
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @!method call(*, **)
|
|
56
|
+
#
|
|
57
|
+
# @overload call(ref, oldvalue = nil, **options)
|
|
58
|
+
#
|
|
59
|
+
# Execute the `git update-ref -d` command
|
|
60
|
+
#
|
|
61
|
+
# @param ref [String] the ref to delete
|
|
62
|
+
# (e.g. `refs/heads/old-branch`)
|
|
63
|
+
#
|
|
64
|
+
# @param oldvalue [String, nil] (nil) expected current value of
|
|
65
|
+
# the ref
|
|
66
|
+
#
|
|
67
|
+
# When provided, the delete is rejected unless the ref
|
|
68
|
+
# currently points to this object.
|
|
69
|
+
#
|
|
70
|
+
# @param options [Hash] command options
|
|
71
|
+
#
|
|
72
|
+
# @option options [String] :m (nil) a reflog message for
|
|
73
|
+
# the deletion
|
|
74
|
+
#
|
|
75
|
+
# @option options [Boolean, nil] :no_deref (nil) overwrite the ref
|
|
76
|
+
# itself rather than following symbolic refs
|
|
77
|
+
#
|
|
78
|
+
# @option options [Numeric] :timeout (nil) abort the command after this many
|
|
79
|
+
# seconds
|
|
80
|
+
#
|
|
81
|
+
# @return [Git::CommandLineResult] the result of calling
|
|
82
|
+
# `git update-ref -d`
|
|
83
|
+
#
|
|
84
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
85
|
+
#
|
|
86
|
+
# @raise [ArgumentError] if the ref operand is missing
|
|
87
|
+
#
|
|
88
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module UpdateRef
|
|
8
|
+
# Updates a ref to point to a new object via `git update-ref`
|
|
9
|
+
#
|
|
10
|
+
# Stores `<newvalue>` in `<ref>`, optionally verifying that the current
|
|
11
|
+
# value matches `<oldvalue>` before performing the update. Follows
|
|
12
|
+
# symbolic refs by default unless `no_deref: true` is given.
|
|
13
|
+
#
|
|
14
|
+
# @example Update a branch ref
|
|
15
|
+
# cmd = Git::Commands::UpdateRef::Update.new(execution_context)
|
|
16
|
+
# cmd.call('refs/heads/main', 'abc1234')
|
|
17
|
+
#
|
|
18
|
+
# @example Update with old-value verification
|
|
19
|
+
# cmd = Git::Commands::UpdateRef::Update.new(execution_context)
|
|
20
|
+
# cmd.call('refs/heads/main', 'newsha', 'oldsha')
|
|
21
|
+
#
|
|
22
|
+
# @example Update with a reflog message
|
|
23
|
+
# cmd = Git::Commands::UpdateRef::Update.new(execution_context)
|
|
24
|
+
# cmd.call('refs/heads/main', 'abc1234', m: 'reset to upstream')
|
|
25
|
+
#
|
|
26
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-update-ref/2.53.0
|
|
27
|
+
#
|
|
28
|
+
# @see Git::Commands::UpdateRef
|
|
29
|
+
#
|
|
30
|
+
# @see https://git-scm.com/docs/git-update-ref git-update-ref documentation
|
|
31
|
+
#
|
|
32
|
+
# @api private
|
|
33
|
+
#
|
|
34
|
+
class Update < Git::Commands::Base
|
|
35
|
+
arguments do
|
|
36
|
+
literal 'update-ref'
|
|
37
|
+
|
|
38
|
+
# Reflog message appended to the update entry
|
|
39
|
+
value_option :m
|
|
40
|
+
|
|
41
|
+
# Overwrite the ref itself rather than following symbolic refs
|
|
42
|
+
flag_option :no_deref
|
|
43
|
+
|
|
44
|
+
# Create a reflog for the ref even if one would not ordinarily
|
|
45
|
+
# be created
|
|
46
|
+
flag_option :create_reflog
|
|
47
|
+
|
|
48
|
+
execution_option :timeout
|
|
49
|
+
|
|
50
|
+
end_of_options
|
|
51
|
+
|
|
52
|
+
# The ref to update (e.g. `refs/heads/main`)
|
|
53
|
+
operand :ref, required: true
|
|
54
|
+
|
|
55
|
+
# The new object name to store in the ref
|
|
56
|
+
operand :newvalue, required: true
|
|
57
|
+
|
|
58
|
+
# Optional expected current value — the update is rejected if
|
|
59
|
+
# the ref does not currently point to this object
|
|
60
|
+
operand :oldvalue
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# @!method call(*, **)
|
|
64
|
+
#
|
|
65
|
+
# @overload call(ref, newvalue, oldvalue = nil, **options)
|
|
66
|
+
#
|
|
67
|
+
# Execute the `git update-ref` command
|
|
68
|
+
#
|
|
69
|
+
# @param ref [String] the ref to update (e.g. `refs/heads/main`)
|
|
70
|
+
#
|
|
71
|
+
# @param newvalue [String] the new object name to store
|
|
72
|
+
#
|
|
73
|
+
# @param oldvalue [String, nil] (nil) expected current value of
|
|
74
|
+
# the ref
|
|
75
|
+
#
|
|
76
|
+
# When provided, the update is rejected unless the ref
|
|
77
|
+
# currently points to this object. Use 40 `"0"` characters
|
|
78
|
+
# or an empty string to assert the ref does not yet exist.
|
|
79
|
+
#
|
|
80
|
+
# @param options [Hash] command options
|
|
81
|
+
#
|
|
82
|
+
# @option options [String] :m (nil) a reflog message for
|
|
83
|
+
# the update
|
|
84
|
+
#
|
|
85
|
+
# @option options [Boolean, nil] :no_deref (nil) overwrite the ref
|
|
86
|
+
# itself rather than following symbolic refs
|
|
87
|
+
#
|
|
88
|
+
# @option options [Boolean, nil] :create_reflog (nil) create a reflog
|
|
89
|
+
# even if one would not ordinarily be created
|
|
90
|
+
#
|
|
91
|
+
# @option options [Numeric] :timeout (nil) abort the command after this many
|
|
92
|
+
# seconds
|
|
93
|
+
#
|
|
94
|
+
# @return [Git::CommandLineResult] the result of calling
|
|
95
|
+
# `git update-ref`
|
|
96
|
+
#
|
|
97
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
98
|
+
#
|
|
99
|
+
# @raise [ArgumentError] if the ref or newvalue operand is
|
|
100
|
+
# missing
|
|
101
|
+
#
|
|
102
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'update_ref/batch'
|
|
4
|
+
require_relative 'update_ref/delete'
|
|
5
|
+
require_relative 'update_ref/update'
|
|
6
|
+
|
|
7
|
+
module Git
|
|
8
|
+
module Commands
|
|
9
|
+
# Commands for safely updating ref values via `git update-ref`
|
|
10
|
+
#
|
|
11
|
+
# This module contains command classes split by invocation mode:
|
|
12
|
+
#
|
|
13
|
+
# - {UpdateRef::Update} — set a ref to a new value (the default mode);
|
|
14
|
+
# also supports verifying the old value before updating
|
|
15
|
+
# - {UpdateRef::Delete} — delete a ref (`-d` flag); optionally verifies
|
|
16
|
+
# the current value before deleting
|
|
17
|
+
# - {UpdateRef::Batch} — read update/create/delete/verify instructions
|
|
18
|
+
# from stdin (`--stdin`); all modifications are applied atomically
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
#
|
|
22
|
+
# @see https://git-scm.com/docs/git-update-ref git-update-ref documentation
|
|
23
|
+
#
|
|
24
|
+
# @example Update a branch ref to a new commit SHA
|
|
25
|
+
# cmd = Git::Commands::UpdateRef::Update.new(lib)
|
|
26
|
+
# cmd.call('refs/heads/main', 'abc1234')
|
|
27
|
+
#
|
|
28
|
+
# @example Delete a ref
|
|
29
|
+
# cmd = Git::Commands::UpdateRef::Delete.new(lib)
|
|
30
|
+
# cmd.call('refs/heads/old-branch')
|
|
31
|
+
#
|
|
32
|
+
# @example Atomically update multiple refs via stdin
|
|
33
|
+
# cmd = Git::Commands::UpdateRef::Batch.new(execution_context)
|
|
34
|
+
# cmd.call(
|
|
35
|
+
# 'update refs/heads/main newsha oldsha',
|
|
36
|
+
# 'delete refs/heads/old'
|
|
37
|
+
# )
|
|
38
|
+
#
|
|
39
|
+
module UpdateRef
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
# Wrapper for the `git version` command
|
|
8
|
+
#
|
|
9
|
+
# Prints the git suite version.
|
|
10
|
+
#
|
|
11
|
+
# @example Basic usage
|
|
12
|
+
# version = Git::Commands::Version.new(execution_context)
|
|
13
|
+
# result = version.call
|
|
14
|
+
# result.stdout #=> "git version 2.42.0"
|
|
15
|
+
#
|
|
16
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-version/2.53.0
|
|
17
|
+
#
|
|
18
|
+
# @see Git::Commands
|
|
19
|
+
#
|
|
20
|
+
# @see https://git-scm.com/docs/git-version git-version documentation
|
|
21
|
+
#
|
|
22
|
+
# @api private
|
|
23
|
+
#
|
|
24
|
+
class Version < Git::Commands::Base
|
|
25
|
+
# Skip version validation for this command since this command is used to
|
|
26
|
+
# determine the version.
|
|
27
|
+
#
|
|
28
|
+
skip_version_validation
|
|
29
|
+
|
|
30
|
+
arguments do
|
|
31
|
+
literal 'version'
|
|
32
|
+
flag_option :build_options
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# @!method call(*, **)
|
|
36
|
+
#
|
|
37
|
+
# @overload call(**options)
|
|
38
|
+
#
|
|
39
|
+
# Execute the `git version` command.
|
|
40
|
+
#
|
|
41
|
+
# @param options [Hash] command options
|
|
42
|
+
#
|
|
43
|
+
# @option options [Boolean, nil] :build_options (nil) include build options in the output
|
|
44
|
+
#
|
|
45
|
+
# @return [Git::CommandLineResult] the result of calling `git version`
|
|
46
|
+
#
|
|
47
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
48
|
+
#
|
|
49
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|