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,252 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Am
|
|
8
|
+
# Implements `git am` to apply a series of patches from a mailbox
|
|
9
|
+
#
|
|
10
|
+
# Splits mail messages in a mailbox into commit log messages, authorship
|
|
11
|
+
# information, and patches, and applies them to the current branch.
|
|
12
|
+
#
|
|
13
|
+
# @example Apply patches from a mailbox file
|
|
14
|
+
# am = Git::Commands::Am::Apply.new(execution_context)
|
|
15
|
+
# am.call('patches.mbox', chdir: repo.workdir)
|
|
16
|
+
#
|
|
17
|
+
# @example Apply patches with sign-off
|
|
18
|
+
# am.call('patches.mbox', signoff: true, chdir: repo.workdir)
|
|
19
|
+
#
|
|
20
|
+
# @example Apply with 3-way merge fallback
|
|
21
|
+
# am.call('patches.mbox', three_way: true, chdir: repo.workdir)
|
|
22
|
+
#
|
|
23
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
|
|
24
|
+
#
|
|
25
|
+
# @see https://git-scm.com/docs/git-am git-am
|
|
26
|
+
#
|
|
27
|
+
# @api private
|
|
28
|
+
#
|
|
29
|
+
class Apply < Git::Commands::Base
|
|
30
|
+
arguments do
|
|
31
|
+
literal 'am'
|
|
32
|
+
|
|
33
|
+
# Commit message / mailinfo options
|
|
34
|
+
flag_option %i[signoff s]
|
|
35
|
+
flag_option %i[keep k]
|
|
36
|
+
flag_option :keep_non_patch
|
|
37
|
+
flag_option :keep_cr, negatable: true
|
|
38
|
+
flag_option %i[scissors c], negatable: true
|
|
39
|
+
value_option :quoted_cr
|
|
40
|
+
value_option :empty
|
|
41
|
+
flag_option %i[message_id m], negatable: true
|
|
42
|
+
|
|
43
|
+
# Output
|
|
44
|
+
flag_option %i[quiet q]
|
|
45
|
+
|
|
46
|
+
# Encoding
|
|
47
|
+
flag_option %i[utf8 u], negatable: true
|
|
48
|
+
|
|
49
|
+
# Application strategy
|
|
50
|
+
flag_option :three_way, as: '--3way', negatable: true
|
|
51
|
+
flag_option :rerere_autoupdate, negatable: true
|
|
52
|
+
|
|
53
|
+
# Whitespace and patch application options (passed to git-apply)
|
|
54
|
+
flag_option :ignore_space_change
|
|
55
|
+
flag_option :ignore_whitespace
|
|
56
|
+
value_option :whitespace
|
|
57
|
+
value_option :C, inline: true
|
|
58
|
+
value_option :p, inline: true
|
|
59
|
+
value_option :directory
|
|
60
|
+
value_option :exclude, repeatable: true
|
|
61
|
+
value_option :include, repeatable: true
|
|
62
|
+
flag_option :reject
|
|
63
|
+
|
|
64
|
+
# Patch format
|
|
65
|
+
value_option :patch_format
|
|
66
|
+
|
|
67
|
+
# Interactive mode
|
|
68
|
+
flag_option %i[interactive i]
|
|
69
|
+
|
|
70
|
+
# Hook verification
|
|
71
|
+
flag_option :verify, negatable: true
|
|
72
|
+
|
|
73
|
+
# Date handling
|
|
74
|
+
flag_option :committer_date_is_author_date
|
|
75
|
+
flag_option :ignore_date
|
|
76
|
+
|
|
77
|
+
# GPG signing
|
|
78
|
+
flag_or_value_option %i[gpg_sign S], inline: true, negatable: true
|
|
79
|
+
|
|
80
|
+
# Execution
|
|
81
|
+
execution_option :chdir
|
|
82
|
+
|
|
83
|
+
end_of_options
|
|
84
|
+
operand :mbox, repeatable: true
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# @!method call(*, **)
|
|
88
|
+
#
|
|
89
|
+
# @overload call(*mbox, **options)
|
|
90
|
+
#
|
|
91
|
+
# Apply patches from one or more mailbox files to the current branch.
|
|
92
|
+
#
|
|
93
|
+
# @param mbox [Array<String>] zero or more mailbox file paths or Maildir
|
|
94
|
+
# directories
|
|
95
|
+
#
|
|
96
|
+
# If omitted, reads from standard input.
|
|
97
|
+
#
|
|
98
|
+
# @param options [Hash] command options
|
|
99
|
+
#
|
|
100
|
+
# @option options [Boolean, nil] :signoff (nil) add Signed-off-by trailer
|
|
101
|
+
#
|
|
102
|
+
# Alias: `:s`
|
|
103
|
+
#
|
|
104
|
+
# @option options [Boolean, nil] :keep (nil) pass -k flag to git-mailinfo,
|
|
105
|
+
# preserving the Subject line intact
|
|
106
|
+
#
|
|
107
|
+
# Alias: `:k`
|
|
108
|
+
#
|
|
109
|
+
# @option options [Boolean, nil] :keep_non_patch (nil) pass -b flag to
|
|
110
|
+
# git-mailinfo
|
|
111
|
+
#
|
|
112
|
+
# @option options [Boolean, nil] :keep_cr (nil) retain CR at end of lines (`--keep-cr`)
|
|
113
|
+
#
|
|
114
|
+
# @option options [Boolean, nil] :no_keep_cr (nil) strip CR at end of lines (`--no-keep-cr`)
|
|
115
|
+
#
|
|
116
|
+
# @option options [Boolean, nil] :scissors (nil) remove everything in the
|
|
117
|
+
# body before a scissors line (`--scissors`)
|
|
118
|
+
#
|
|
119
|
+
# Alias: `:c`
|
|
120
|
+
#
|
|
121
|
+
# @option options [Boolean, nil] :no_scissors (nil) disable scissors mode (`--no-scissors`)
|
|
122
|
+
#
|
|
123
|
+
# @option options [String] :quoted_cr (nil) how to handle CR in quoted
|
|
124
|
+
# text passed to git-mailinfo
|
|
125
|
+
#
|
|
126
|
+
# Valid actions: `'nowarn'`, `'warn'`, `'error'`.
|
|
127
|
+
#
|
|
128
|
+
# @option options [String] :empty (nil) how to handle an e-mail message
|
|
129
|
+
# lacking a patch
|
|
130
|
+
#
|
|
131
|
+
# Valid values: `'stop'` (fail, default), `'drop'` (skip the message),
|
|
132
|
+
# `'keep'` (create an empty commit).
|
|
133
|
+
#
|
|
134
|
+
# @option options [Boolean, nil] :message_id (nil) pass -m flag to
|
|
135
|
+
# git-mailinfo, adding the Message-ID header to the commit message (`--message-id`)
|
|
136
|
+
#
|
|
137
|
+
# Alias: `:m`
|
|
138
|
+
#
|
|
139
|
+
# @option options [Boolean, nil] :no_message_id (nil) do not add the Message-ID header (`--no-message-id`)
|
|
140
|
+
#
|
|
141
|
+
# @option options [Boolean, nil] :quiet (nil) be quiet; only print error
|
|
142
|
+
# messages
|
|
143
|
+
#
|
|
144
|
+
# Alias: `:q`
|
|
145
|
+
#
|
|
146
|
+
# @option options [Boolean, nil] :utf8 (nil) re-code the commit log message
|
|
147
|
+
# in UTF-8 (`--utf8`)
|
|
148
|
+
#
|
|
149
|
+
# Alias: `:u`
|
|
150
|
+
#
|
|
151
|
+
# @option options [Boolean, nil] :no_utf8 (nil) do not re-code the commit log message (`--no-utf8`)
|
|
152
|
+
#
|
|
153
|
+
# @option options [Boolean, nil] :three_way (nil) attempt 3-way merge when
|
|
154
|
+
# context does not match (`--3way`)
|
|
155
|
+
#
|
|
156
|
+
# @option options [Boolean, nil] :no_three_way (nil) disable 3-way merge fallback (`--no-3way`)
|
|
157
|
+
#
|
|
158
|
+
# @option options [Boolean, nil] :rerere_autoupdate (nil) allow rerere to
|
|
159
|
+
# update the index with auto-resolved conflicts (`--rerere-autoupdate`)
|
|
160
|
+
#
|
|
161
|
+
# @option options [Boolean, nil] :no_rerere_autoupdate (nil) prevent rerere from
|
|
162
|
+
# auto-updating the index (`--no-rerere-autoupdate`)
|
|
163
|
+
#
|
|
164
|
+
# @option options [Boolean, nil] :ignore_space_change (nil) ignore whitespace
|
|
165
|
+
# changes when applying (passed to git-apply)
|
|
166
|
+
#
|
|
167
|
+
# @option options [Boolean, nil] :ignore_whitespace (nil) ignore whitespace
|
|
168
|
+
# when applying (passed to git-apply)
|
|
169
|
+
#
|
|
170
|
+
# @option options [String] :whitespace (nil) whitespace error handling
|
|
171
|
+
# (e.g., `'nowarn'`, `'warn'`, `'fix'`, `'error'`)
|
|
172
|
+
#
|
|
173
|
+
# Passed to git-apply.
|
|
174
|
+
#
|
|
175
|
+
# @option options [Integer] :C (nil) ensure at least `<n>` lines of
|
|
176
|
+
# surrounding context match when applying (`-C<n>`)
|
|
177
|
+
#
|
|
178
|
+
# Passed to git-apply.
|
|
179
|
+
#
|
|
180
|
+
# @option options [Integer] :p (nil) strip `<n>` leading path components
|
|
181
|
+
# from file names (`-p<n>`)
|
|
182
|
+
#
|
|
183
|
+
# Passed to git-apply.
|
|
184
|
+
#
|
|
185
|
+
# @option options [String] :directory (nil) prepend `<dir>` to all
|
|
186
|
+
# filenames
|
|
187
|
+
#
|
|
188
|
+
# Passed to git-apply.
|
|
189
|
+
#
|
|
190
|
+
# @option options [Array<String>] :exclude (nil) skip files matching the
|
|
191
|
+
# given path pattern
|
|
192
|
+
#
|
|
193
|
+
# May be repeated. Passed to git-apply.
|
|
194
|
+
#
|
|
195
|
+
# @option options [Array<String>] :include (nil) apply only to files
|
|
196
|
+
# matching the given path pattern
|
|
197
|
+
#
|
|
198
|
+
# May be repeated. Passed to git-apply.
|
|
199
|
+
#
|
|
200
|
+
# @option options [Boolean, nil] :reject (nil) leave rejected hunks in
|
|
201
|
+
# `*.rej` files instead of aborting
|
|
202
|
+
#
|
|
203
|
+
# Passed to git-apply.
|
|
204
|
+
#
|
|
205
|
+
# @option options [String] :patch_format (nil) override patch format
|
|
206
|
+
# detection
|
|
207
|
+
#
|
|
208
|
+
# Valid formats: `'mbox'`, `'mboxrd'`, `'stgit'`, `'stgit-series'`,
|
|
209
|
+
# `'hg'`.
|
|
210
|
+
#
|
|
211
|
+
# @option options [Boolean, nil] :interactive (nil) run interactively,
|
|
212
|
+
# prompting before each patch is applied
|
|
213
|
+
#
|
|
214
|
+
# Alias: `:i`
|
|
215
|
+
#
|
|
216
|
+
# @option options [Boolean, nil] :verify (nil) run pre-applypatch and
|
|
217
|
+
# applypatch-msg hooks (`--verify`)
|
|
218
|
+
#
|
|
219
|
+
# Hooks are run by default when this option is omitted.
|
|
220
|
+
#
|
|
221
|
+
# @option options [Boolean, nil] :no_verify (nil) bypass pre-applypatch and
|
|
222
|
+
# applypatch-msg hooks (`--no-verify`)
|
|
223
|
+
#
|
|
224
|
+
# @option options [Boolean, nil] :committer_date_is_author_date (nil) use the
|
|
225
|
+
# author date as the committer date
|
|
226
|
+
#
|
|
227
|
+
# @option options [Boolean, nil] :ignore_date (nil) use the committer date as
|
|
228
|
+
# the author date
|
|
229
|
+
#
|
|
230
|
+
# @option options [Boolean, String, nil] :gpg_sign (nil) sign commits using
|
|
231
|
+
# GPG (`--gpg-sign`)
|
|
232
|
+
#
|
|
233
|
+
# Pass a key-ID string to select the signing key; pass `true` to use
|
|
234
|
+
# the committer identity. Alias: `:S`
|
|
235
|
+
#
|
|
236
|
+
# @option options [Boolean, nil] :no_gpg_sign (nil) countermand commit.gpgSign
|
|
237
|
+
# configuration (`--no-gpg-sign`)
|
|
238
|
+
#
|
|
239
|
+
# @option options [String] :chdir (nil) change to this directory before
|
|
240
|
+
# running git
|
|
241
|
+
#
|
|
242
|
+
# Not passed to the git CLI.
|
|
243
|
+
#
|
|
244
|
+
# @return [Git::CommandLineResult] the result of calling `git am`
|
|
245
|
+
#
|
|
246
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
247
|
+
#
|
|
248
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Am
|
|
8
|
+
# Implements `git am --continue` to resume after resolving conflicts
|
|
9
|
+
#
|
|
10
|
+
# After the user has resolved a conflict in the working tree and updated
|
|
11
|
+
# the index, this command continues applying the remaining patches.
|
|
12
|
+
#
|
|
13
|
+
# @example Resume an am session after resolving conflicts
|
|
14
|
+
# continue_cmd = Git::Commands::Am::Continue.new(execution_context)
|
|
15
|
+
# continue_cmd.call
|
|
16
|
+
#
|
|
17
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
|
|
18
|
+
#
|
|
19
|
+
# @see Git::Commands::Am
|
|
20
|
+
#
|
|
21
|
+
# @see https://git-scm.com/docs/git-am git-am
|
|
22
|
+
#
|
|
23
|
+
# @api private
|
|
24
|
+
#
|
|
25
|
+
class Continue < Git::Commands::Base
|
|
26
|
+
arguments do
|
|
27
|
+
literal 'am'
|
|
28
|
+
literal '--continue'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @!method call(*, **)
|
|
32
|
+
#
|
|
33
|
+
# @overload call()
|
|
34
|
+
#
|
|
35
|
+
# Resume applying patches after conflicts have been resolved
|
|
36
|
+
#
|
|
37
|
+
# @return [Git::CommandLineResult] the result of calling `git am --continue`
|
|
38
|
+
#
|
|
39
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Am
|
|
8
|
+
# Implements `git am --quit` to abort the in-progress am session
|
|
9
|
+
#
|
|
10
|
+
# Aborts the in-progress patch application but keeps the current HEAD
|
|
11
|
+
# position (does not restore the branch to its pre-am state).
|
|
12
|
+
#
|
|
13
|
+
# @example Quit an am session without restoring HEAD
|
|
14
|
+
# quit_cmd = Git::Commands::Am::Quit.new(execution_context)
|
|
15
|
+
# quit_cmd.call
|
|
16
|
+
#
|
|
17
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
|
|
18
|
+
#
|
|
19
|
+
# @see Git::Commands::Am
|
|
20
|
+
#
|
|
21
|
+
# @see https://git-scm.com/docs/git-am git-am
|
|
22
|
+
#
|
|
23
|
+
# @api private
|
|
24
|
+
#
|
|
25
|
+
class Quit < Git::Commands::Base
|
|
26
|
+
arguments do
|
|
27
|
+
literal 'am'
|
|
28
|
+
literal '--quit'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @!method call(*, **)
|
|
32
|
+
#
|
|
33
|
+
# @overload call()
|
|
34
|
+
#
|
|
35
|
+
# Abort the am session but keep the current HEAD position
|
|
36
|
+
#
|
|
37
|
+
# @return [Git::CommandLineResult] the result of calling `git am --quit`
|
|
38
|
+
#
|
|
39
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Am
|
|
8
|
+
# Implements `git am --retry` to retry the most-recently-failed patch
|
|
9
|
+
#
|
|
10
|
+
# Tries to apply the last conflicting patch again. Generally only useful
|
|
11
|
+
# when retrying with extra options (e.g. `--3way`), or in scripts where
|
|
12
|
+
# stdin is not a tty and the implicit retry heuristic does not trigger.
|
|
13
|
+
#
|
|
14
|
+
# @example Retry the current patch
|
|
15
|
+
# retry_cmd = Git::Commands::Am::Retry.new(execution_context)
|
|
16
|
+
# retry_cmd.call
|
|
17
|
+
#
|
|
18
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
|
|
19
|
+
#
|
|
20
|
+
# @see Git::Commands::Am
|
|
21
|
+
#
|
|
22
|
+
# @see https://git-scm.com/docs/git-am git-am
|
|
23
|
+
#
|
|
24
|
+
# @api private
|
|
25
|
+
#
|
|
26
|
+
class Retry < Git::Commands::Base
|
|
27
|
+
arguments do
|
|
28
|
+
literal 'am'
|
|
29
|
+
literal '--retry'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# git am --retry was introduced in git 2.46.0
|
|
33
|
+
requires_git_version '2.46.0'
|
|
34
|
+
|
|
35
|
+
# @!method call(*, **)
|
|
36
|
+
#
|
|
37
|
+
# @overload call()
|
|
38
|
+
#
|
|
39
|
+
# Retry applying the most-recently-failed patch
|
|
40
|
+
#
|
|
41
|
+
# @return [Git::CommandLineResult] the result of calling `git am --retry`
|
|
42
|
+
#
|
|
43
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Am
|
|
8
|
+
# Implements the `git am --show-current-patch` command
|
|
9
|
+
#
|
|
10
|
+
# Shows the message currently being applied when `git am` has stopped due to
|
|
11
|
+
# conflicts.
|
|
12
|
+
#
|
|
13
|
+
# @example Show the current patch
|
|
14
|
+
# show_cmd = Git::Commands::Am::ShowCurrentPatch.new(execution_context)
|
|
15
|
+
# show_cmd.call
|
|
16
|
+
#
|
|
17
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
|
|
18
|
+
#
|
|
19
|
+
# @see Git::Commands::Am
|
|
20
|
+
#
|
|
21
|
+
# @see https://git-scm.com/docs/git-am git-am
|
|
22
|
+
#
|
|
23
|
+
# @api private
|
|
24
|
+
#
|
|
25
|
+
class ShowCurrentPatch < Git::Commands::Base
|
|
26
|
+
arguments do
|
|
27
|
+
literal 'am'
|
|
28
|
+
flag_or_value_option :show_current_patch, inline: true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @overload call(*, show_current_patch: true, **options)
|
|
32
|
+
#
|
|
33
|
+
# Execute the `git am --show-current-patch` command
|
|
34
|
+
#
|
|
35
|
+
# @param show_current_patch [true, String] patch format selector
|
|
36
|
+
#
|
|
37
|
+
# Pass `true` (default) to emit `--show-current-patch` (git defaults to
|
|
38
|
+
# `raw` format); pass `'diff'` to emit `--show-current-patch=diff` (diff
|
|
39
|
+
# portion only) or `'raw'` for `--show-current-patch=raw` (full raw email).
|
|
40
|
+
# Passing `false` or `nil` raises `ArgumentError`.
|
|
41
|
+
#
|
|
42
|
+
# @param options [Hash] command options
|
|
43
|
+
#
|
|
44
|
+
# @return [Git::CommandLineResult] the result of calling
|
|
45
|
+
# `git am --show-current-patch`
|
|
46
|
+
#
|
|
47
|
+
# @raise [ArgumentError] if `show_current_patch` is `false` or `nil`
|
|
48
|
+
#
|
|
49
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
50
|
+
#
|
|
51
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
52
|
+
#
|
|
53
|
+
def call(*, show_current_patch: true, **)
|
|
54
|
+
unless show_current_patch
|
|
55
|
+
raise ArgumentError,
|
|
56
|
+
":show_current_patch must be true or a non-empty String, got #{show_current_patch.inspect}"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
super
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Am
|
|
8
|
+
# Implements `git am --skip` to skip the current patch
|
|
9
|
+
#
|
|
10
|
+
# Skips the current patch and continues applying remaining patches.
|
|
11
|
+
#
|
|
12
|
+
# @example Skip a conflicting patch
|
|
13
|
+
# skip_cmd = Git::Commands::Am::Skip.new(execution_context)
|
|
14
|
+
# skip_cmd.call
|
|
15
|
+
#
|
|
16
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-am/2.53.0
|
|
17
|
+
#
|
|
18
|
+
# @see Git::Commands::Am
|
|
19
|
+
#
|
|
20
|
+
# @see https://git-scm.com/docs/git-am git-am
|
|
21
|
+
#
|
|
22
|
+
# @api private
|
|
23
|
+
#
|
|
24
|
+
class Skip < Git::Commands::Base
|
|
25
|
+
arguments do
|
|
26
|
+
literal 'am'
|
|
27
|
+
literal '--skip'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @!method call(*, **)
|
|
31
|
+
#
|
|
32
|
+
# @overload call()
|
|
33
|
+
#
|
|
34
|
+
# Skip the current patch and continue with remaining patches
|
|
35
|
+
#
|
|
36
|
+
# @return [Git::CommandLineResult] the result of calling `git am --skip`
|
|
37
|
+
#
|
|
38
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'am/apply'
|
|
4
|
+
require_relative 'am/abort'
|
|
5
|
+
require_relative 'am/continue'
|
|
6
|
+
require_relative 'am/quit'
|
|
7
|
+
require_relative 'am/retry'
|
|
8
|
+
require_relative 'am/show_current_patch'
|
|
9
|
+
require_relative 'am/skip'
|
|
10
|
+
|
|
11
|
+
module Git
|
|
12
|
+
module Commands
|
|
13
|
+
# Commands for applying patches from a mailbox via `git am`
|
|
14
|
+
#
|
|
15
|
+
# This module contains command classes for patch application and session
|
|
16
|
+
# management:
|
|
17
|
+
#
|
|
18
|
+
# - {Am::Apply} — apply a series of patches from a mailbox
|
|
19
|
+
# - {Am::Abort} — abort the current patch application (`--abort`)
|
|
20
|
+
# - {Am::Continue} — resume after resolving conflicts (`--continue`)
|
|
21
|
+
# - {Am::Quit} — drop the current patch session (`--quit`)
|
|
22
|
+
# - {Am::Retry} — retry the current patch
|
|
23
|
+
# - {Am::ShowCurrentPatch} — show the patch being applied (`--show-current-patch`)
|
|
24
|
+
# - {Am::Skip} — skip the current patch (`--skip`)
|
|
25
|
+
#
|
|
26
|
+
# @api private
|
|
27
|
+
#
|
|
28
|
+
# @see https://git-scm.com/docs/git-am git-am documentation
|
|
29
|
+
#
|
|
30
|
+
module Am
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|