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,237 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
# Implements `git apply` to apply a patch to files and/or to the index
|
|
8
|
+
#
|
|
9
|
+
# Reads the supplied diff output (a patch) and applies it to files.
|
|
10
|
+
# Without options, the command applies the patch only to working tree files.
|
|
11
|
+
# With `index: true`, the patch is also applied to the index.
|
|
12
|
+
# With `cached: true`, the patch is only applied to the index.
|
|
13
|
+
#
|
|
14
|
+
# @example Typical usage
|
|
15
|
+
# apply = Git::Commands::Apply.new(execution_context)
|
|
16
|
+
# apply.call('fix.patch')
|
|
17
|
+
# apply.call('fix.patch', cached: true)
|
|
18
|
+
# apply.call('fix.patch', check: true)
|
|
19
|
+
# apply.call('fix.patch', reverse: true)
|
|
20
|
+
#
|
|
21
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-apply/2.53.0
|
|
22
|
+
#
|
|
23
|
+
# @see https://git-scm.com/docs/git-apply git-apply
|
|
24
|
+
#
|
|
25
|
+
# @see Git::Commands
|
|
26
|
+
#
|
|
27
|
+
# @api private
|
|
28
|
+
#
|
|
29
|
+
class Apply < Git::Commands::Base
|
|
30
|
+
arguments do
|
|
31
|
+
literal 'apply'
|
|
32
|
+
|
|
33
|
+
# Informational flags (turn off actual apply)
|
|
34
|
+
flag_option :stat
|
|
35
|
+
flag_option :numstat
|
|
36
|
+
flag_option :summary
|
|
37
|
+
flag_option :check
|
|
38
|
+
|
|
39
|
+
# Application mode
|
|
40
|
+
flag_option :index
|
|
41
|
+
flag_option %i[intent_to_add N]
|
|
42
|
+
flag_option :three_way, as: '--3way'
|
|
43
|
+
|
|
44
|
+
# 3-way merge conflict resolution
|
|
45
|
+
flag_option :ours
|
|
46
|
+
flag_option :theirs
|
|
47
|
+
flag_option :union
|
|
48
|
+
|
|
49
|
+
# Apply behavior
|
|
50
|
+
flag_option :apply
|
|
51
|
+
flag_option :no_add
|
|
52
|
+
value_option :build_fake_ancestor, inline: true
|
|
53
|
+
flag_option %i[reverse R]
|
|
54
|
+
flag_option %i[allow_binary_replacement binary]
|
|
55
|
+
flag_option :reject
|
|
56
|
+
flag_option :z
|
|
57
|
+
|
|
58
|
+
# Strip/context levels
|
|
59
|
+
value_option :p, inline: true
|
|
60
|
+
value_option :C, inline: true
|
|
61
|
+
|
|
62
|
+
# Patch parsing
|
|
63
|
+
flag_option :unidiff_zero
|
|
64
|
+
flag_option :inaccurate_eof
|
|
65
|
+
flag_option :recount
|
|
66
|
+
|
|
67
|
+
# Application scope
|
|
68
|
+
flag_option :cached
|
|
69
|
+
|
|
70
|
+
# Whitespace handling
|
|
71
|
+
flag_option :ignore_space_change
|
|
72
|
+
flag_option :ignore_whitespace
|
|
73
|
+
value_option :whitespace, inline: true
|
|
74
|
+
|
|
75
|
+
# Path filtering
|
|
76
|
+
value_option :exclude, inline: true
|
|
77
|
+
value_option :include, inline: true
|
|
78
|
+
value_option :directory, inline: true
|
|
79
|
+
|
|
80
|
+
# Verbosity
|
|
81
|
+
flag_option %i[verbose v]
|
|
82
|
+
flag_option %i[quiet q]
|
|
83
|
+
flag_option :unsafe_paths
|
|
84
|
+
flag_option :allow_empty
|
|
85
|
+
|
|
86
|
+
# Execution
|
|
87
|
+
execution_option :chdir
|
|
88
|
+
|
|
89
|
+
end_of_options
|
|
90
|
+
operand :patch, repeatable: true
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# @!method call(*, **)
|
|
94
|
+
#
|
|
95
|
+
# @overload call(*patch, **options)
|
|
96
|
+
#
|
|
97
|
+
# Apply one or more patch files to the working tree or index
|
|
98
|
+
#
|
|
99
|
+
# @param patch [Array<String>] zero or more patch file paths to apply;
|
|
100
|
+
# omit to read from standard input
|
|
101
|
+
#
|
|
102
|
+
# @param options [Hash] command options
|
|
103
|
+
#
|
|
104
|
+
# @option options [Boolean, nil] :stat (nil) show diffstat for the input
|
|
105
|
+
# instead of applying
|
|
106
|
+
#
|
|
107
|
+
# Turns off apply mode.
|
|
108
|
+
#
|
|
109
|
+
# @option options [Boolean, nil] :numstat (nil) show numeric diffstat for
|
|
110
|
+
# the input instead of applying
|
|
111
|
+
#
|
|
112
|
+
# Turns off apply mode. Output is in machine-friendly decimal format.
|
|
113
|
+
#
|
|
114
|
+
# @option options [Boolean, nil] :summary (nil) show a condensed summary of
|
|
115
|
+
# extended header information instead of applying
|
|
116
|
+
#
|
|
117
|
+
# Turns off apply mode.
|
|
118
|
+
#
|
|
119
|
+
# @option options [Boolean, nil] :check (nil) check whether the patch applies
|
|
120
|
+
# cleanly without modifying any files
|
|
121
|
+
#
|
|
122
|
+
# Turns off apply mode.
|
|
123
|
+
#
|
|
124
|
+
# @option options [Boolean, nil] :index (nil) apply the patch to both the
|
|
125
|
+
# index and the working tree
|
|
126
|
+
#
|
|
127
|
+
# @option options [Boolean, nil] :intent_to_add (nil) mark new files added by
|
|
128
|
+
# the patch for later addition to the index
|
|
129
|
+
#
|
|
130
|
+
# Alias: `:N`
|
|
131
|
+
#
|
|
132
|
+
# @option options [Boolean, nil] :three_way (nil) attempt a 3-way merge if
|
|
133
|
+
# the patch does not apply cleanly (`--3way`)
|
|
134
|
+
#
|
|
135
|
+
# @option options [Boolean, nil] :ours (nil) resolve 3-way conflicts by
|
|
136
|
+
# favouring our side of the conflict
|
|
137
|
+
#
|
|
138
|
+
# Requires `:three_way`.
|
|
139
|
+
#
|
|
140
|
+
# @option options [Boolean, nil] :theirs (nil) resolve 3-way conflicts by
|
|
141
|
+
# favouring their side of the conflict
|
|
142
|
+
#
|
|
143
|
+
# Requires `:three_way`.
|
|
144
|
+
#
|
|
145
|
+
# @option options [Boolean, nil] :union (nil) resolve 3-way conflicts by
|
|
146
|
+
# including both sides of the conflict
|
|
147
|
+
#
|
|
148
|
+
# Requires `:three_way`.
|
|
149
|
+
#
|
|
150
|
+
# @option options [Boolean, nil] :apply (nil) re-enable the apply step even
|
|
151
|
+
# when a "turns off apply" flag such as `:stat` is also given
|
|
152
|
+
#
|
|
153
|
+
# @option options [Boolean, nil] :no_add (nil) ignore additions made by the
|
|
154
|
+
# patch; apply only the deletions
|
|
155
|
+
#
|
|
156
|
+
# @option options [String] :build_fake_ancestor (nil) path to a
|
|
157
|
+
# temporary index file for building a fake ancestor from the embedded
|
|
158
|
+
# blob identities in the patch
|
|
159
|
+
#
|
|
160
|
+
# @option options [Boolean, nil] :reverse (nil) apply the patch in reverse
|
|
161
|
+
#
|
|
162
|
+
# Alias: `:R`
|
|
163
|
+
#
|
|
164
|
+
# @option options [Boolean, nil] :allow_binary_replacement (nil) allow
|
|
165
|
+
# binary patch application (no-op in Git 2.28+)
|
|
166
|
+
#
|
|
167
|
+
# Alias: `:binary`
|
|
168
|
+
#
|
|
169
|
+
# @option options [Boolean, nil] :reject (nil) leave rejected hunks in
|
|
170
|
+
# `.rej` files instead of aborting
|
|
171
|
+
#
|
|
172
|
+
# @option options [Boolean, nil] :z (nil) use NUL-terminated output for
|
|
173
|
+
# `--numstat` pathnames (`-z`)
|
|
174
|
+
#
|
|
175
|
+
# @option options [Integer] :p (nil) strip this many leading path
|
|
176
|
+
# components from traditional diff paths (`-p<n>`)
|
|
177
|
+
#
|
|
178
|
+
# @option options [Integer] :C (nil) require at least this many lines
|
|
179
|
+
# of surrounding context before and after each change (`-C<n>`)
|
|
180
|
+
#
|
|
181
|
+
# @option options [Boolean, nil] :unidiff_zero (nil) bypass context-line
|
|
182
|
+
# safety checks for diffs generated with `--unified=0`
|
|
183
|
+
#
|
|
184
|
+
# @option options [Boolean, nil] :inaccurate_eof (nil) work around diffs
|
|
185
|
+
# that do not correctly detect a missing newline at end of file
|
|
186
|
+
#
|
|
187
|
+
# @option options [Boolean, nil] :recount (nil) infer hunk sizes from the
|
|
188
|
+
# patch content rather than trusting the hunk header counts
|
|
189
|
+
#
|
|
190
|
+
# @option options [Boolean, nil] :cached (nil) apply the patch only to the
|
|
191
|
+
# index without touching the working tree
|
|
192
|
+
#
|
|
193
|
+
# @option options [Boolean, nil] :ignore_space_change (nil) ignore changes
|
|
194
|
+
# in the amount of whitespace in context lines
|
|
195
|
+
#
|
|
196
|
+
# @option options [Boolean, nil] :ignore_whitespace (nil) ignore all
|
|
197
|
+
# whitespace differences in context lines
|
|
198
|
+
#
|
|
199
|
+
# @option options [String] :whitespace (nil) whitespace error handling
|
|
200
|
+
# mode: `'nowarn'`, `'warn'`, `'fix'`, `'error'`, or `'error-all'`
|
|
201
|
+
#
|
|
202
|
+
# @option options [String] :exclude (nil) skip changes to files
|
|
203
|
+
# matching this path pattern
|
|
204
|
+
#
|
|
205
|
+
# @option options [String] :include (nil) apply changes only to files
|
|
206
|
+
# matching this path pattern
|
|
207
|
+
#
|
|
208
|
+
# @option options [String] :directory (nil) prepend this root to all
|
|
209
|
+
# filenames in the patch
|
|
210
|
+
#
|
|
211
|
+
# @option options [Boolean, nil] :verbose (nil) report progress to stderr
|
|
212
|
+
#
|
|
213
|
+
# Alias: `:v`
|
|
214
|
+
#
|
|
215
|
+
# @option options [Boolean, nil] :quiet (nil) suppress stderr output
|
|
216
|
+
#
|
|
217
|
+
# Alias: `:q`
|
|
218
|
+
#
|
|
219
|
+
# @option options [Boolean, nil] :unsafe_paths (nil) override the safety
|
|
220
|
+
# check that rejects patches affecting paths outside the working area
|
|
221
|
+
#
|
|
222
|
+
# @option options [Boolean, nil] :allow_empty (nil) do not return an error
|
|
223
|
+
# for patches containing no diff
|
|
224
|
+
#
|
|
225
|
+
# @option options [String] :chdir (nil) change to this directory before
|
|
226
|
+
# running git; not passed to the git CLI
|
|
227
|
+
#
|
|
228
|
+
# @return [Git::CommandLineResult] the result of calling `git apply`
|
|
229
|
+
#
|
|
230
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
231
|
+
#
|
|
232
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
233
|
+
#
|
|
234
|
+
# @api public
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
require 'git/commands/archive'
|
|
5
|
+
|
|
6
|
+
module Git
|
|
7
|
+
module Commands
|
|
8
|
+
class Archive
|
|
9
|
+
# Format lister for `git archive --list`
|
|
10
|
+
#
|
|
11
|
+
# Lists all available archive formats supported by the current git
|
|
12
|
+
# installation. This is a standalone mode of `git archive` that does not
|
|
13
|
+
# require a tree-ish operand.
|
|
14
|
+
#
|
|
15
|
+
# @example List available archive formats
|
|
16
|
+
# cmd = Git::Commands::Archive::ListFormats.new(execution_context)
|
|
17
|
+
# result = cmd.call
|
|
18
|
+
# result.stdout # => "tar\ntgz\ntar.gz\nzip\n"
|
|
19
|
+
#
|
|
20
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-archive/2.53.0
|
|
21
|
+
#
|
|
22
|
+
# @see Git::Commands::Archive Git::Commands::Archive for the full archive command interface
|
|
23
|
+
#
|
|
24
|
+
# @see https://git-scm.com/docs/git-archive git-archive documentation
|
|
25
|
+
#
|
|
26
|
+
# @api private
|
|
27
|
+
#
|
|
28
|
+
class ListFormats < Git::Commands::Base
|
|
29
|
+
arguments do
|
|
30
|
+
literal 'archive'
|
|
31
|
+
literal '--list'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @!method call(*, **)
|
|
35
|
+
#
|
|
36
|
+
# @overload call
|
|
37
|
+
#
|
|
38
|
+
# Execute `git archive --list` to show available formats.
|
|
39
|
+
#
|
|
40
|
+
# @return [Git::CommandLineResult] the result of calling `git archive --list`
|
|
41
|
+
#
|
|
42
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
# Archive creator for files from a named tree via `git archive`
|
|
8
|
+
#
|
|
9
|
+
# Produces an archive of the specified format containing the tree structure
|
|
10
|
+
# for the named tree, and writes it to stdout (or to a file when `out:` or
|
|
11
|
+
# `output:` is given). If `prefix:` is specified it is prepended to the
|
|
12
|
+
# filenames in the archive.
|
|
13
|
+
#
|
|
14
|
+
# @example Archive HEAD as a tar stream to a file
|
|
15
|
+
# cmd = Git::Commands::Archive.new(execution_context)
|
|
16
|
+
# File.open('release.tar', 'wb') do |f|
|
|
17
|
+
# cmd.call('HEAD', format: 'tar', out: f)
|
|
18
|
+
# end
|
|
19
|
+
#
|
|
20
|
+
# @example Archive a tag with a prefix
|
|
21
|
+
# cmd = Git::Commands::Archive.new(execution_context)
|
|
22
|
+
# cmd.call('v1.0', format: 'zip', prefix: 'myproject-1.0/', output: 'release.zip')
|
|
23
|
+
#
|
|
24
|
+
# @example Archive a subdirectory only
|
|
25
|
+
# cmd = Git::Commands::Archive.new(execution_context)
|
|
26
|
+
# cmd.call('HEAD', 'src/', format: 'tar', out: io)
|
|
27
|
+
#
|
|
28
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-archive/2.53.0
|
|
29
|
+
#
|
|
30
|
+
# @see Git::Commands
|
|
31
|
+
#
|
|
32
|
+
# @see https://git-scm.com/docs/git-archive git-archive
|
|
33
|
+
#
|
|
34
|
+
# @api private
|
|
35
|
+
#
|
|
36
|
+
class Archive < Base
|
|
37
|
+
arguments do
|
|
38
|
+
literal 'archive'
|
|
39
|
+
value_option :format, inline: true
|
|
40
|
+
flag_option %i[list l]
|
|
41
|
+
flag_option %i[verbose v]
|
|
42
|
+
value_option :prefix, inline: true
|
|
43
|
+
value_option %i[output o], inline: true
|
|
44
|
+
value_option :add_file, inline: true, repeatable: true
|
|
45
|
+
value_option :add_virtual_file, inline: true, repeatable: true
|
|
46
|
+
flag_option :worktree_attributes
|
|
47
|
+
value_option :mtime, inline: true
|
|
48
|
+
value_option :remote, inline: true
|
|
49
|
+
value_option :exec, inline: true
|
|
50
|
+
execution_option :out
|
|
51
|
+
conflicts :output, :out
|
|
52
|
+
|
|
53
|
+
end_of_options
|
|
54
|
+
operand :tree_ish
|
|
55
|
+
operand :path, repeatable: true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# @!method call(*, **)
|
|
59
|
+
#
|
|
60
|
+
# @overload call(tree_ish = nil, *path, **options)
|
|
61
|
+
#
|
|
62
|
+
# Execute the `git archive` command.
|
|
63
|
+
#
|
|
64
|
+
# Archive output is binary. On the capturing path (no `out:` option),
|
|
65
|
+
# `normalize` and `chomp` are disabled so stdout bytes are returned
|
|
66
|
+
# unchanged. When `out:` is given, the streaming path is used.
|
|
67
|
+
#
|
|
68
|
+
# @param tree_ish [String, nil] (nil) the tree or commit to produce an archive for;
|
|
69
|
+
# omit when using the `:list` option to enumerate available formats
|
|
70
|
+
#
|
|
71
|
+
# @param path [Array<String>] paths within the tree to include in the archive
|
|
72
|
+
#
|
|
73
|
+
# @param options [Hash] command options
|
|
74
|
+
#
|
|
75
|
+
# @option options [String] :format (nil) archive format — `tar`, `zip`, `tar.gz`,
|
|
76
|
+
# `tgz`, or any format defined via `tar.<format>.command`
|
|
77
|
+
#
|
|
78
|
+
# @option options [Boolean, nil] :list (nil) show all available archive formats
|
|
79
|
+
#
|
|
80
|
+
# Alias: :l
|
|
81
|
+
#
|
|
82
|
+
# @option options [Boolean, nil] :verbose (nil) report progress to stderr
|
|
83
|
+
#
|
|
84
|
+
# Alias: :v
|
|
85
|
+
#
|
|
86
|
+
# @option options [String] :prefix (nil) prepend `<prefix>/` to each filename
|
|
87
|
+
# in the archive
|
|
88
|
+
#
|
|
89
|
+
# @option options [String] :output (nil) write the archive to this file instead
|
|
90
|
+
# of stdout
|
|
91
|
+
#
|
|
92
|
+
# Alias: :o
|
|
93
|
+
#
|
|
94
|
+
# @option options [String, Array<String>] :add_file (nil) add one or more
|
|
95
|
+
# non-tracked files to the archive; may be passed multiple times
|
|
96
|
+
#
|
|
97
|
+
# @option options [String, Array<String>] :add_virtual_file (nil) add one or
|
|
98
|
+
# more virtual files by `<path>:<content>`; may be passed multiple times
|
|
99
|
+
#
|
|
100
|
+
# @option options [Boolean, nil] :worktree_attributes (nil) look for attributes in
|
|
101
|
+
# `.gitattributes` files in the working tree as well
|
|
102
|
+
#
|
|
103
|
+
# @option options [String] :mtime (nil) set modification time of archive entries
|
|
104
|
+
#
|
|
105
|
+
# @option options [String] :remote (nil) retrieve a tar archive from a remote
|
|
106
|
+
# repository instead of the local one
|
|
107
|
+
#
|
|
108
|
+
# @option options [String] :exec (nil) path to `git-upload-archive` on the remote
|
|
109
|
+
# side; used with `:remote`
|
|
110
|
+
#
|
|
111
|
+
# @option options [IO, #write] :out (nil) stream archive output to this IO object
|
|
112
|
+
# instead of capturing it; the result's `.stdout` will be `''`
|
|
113
|
+
#
|
|
114
|
+
# @return [Git::CommandLineResult] the result of calling `git archive`
|
|
115
|
+
#
|
|
116
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
117
|
+
#
|
|
118
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
119
|
+
#
|
|
120
|
+
# @api public
|
|
121
|
+
|
|
122
|
+
# Archive output is intrinsically binary (tar, zip, etc.) — opt out of
|
|
123
|
+
# Ruby string normalization and trailing-newline chomping so that
|
|
124
|
+
# `result.stdout` bytes are returned unchanged. Only affects the
|
|
125
|
+
# capturing path; streaming via `out:` is never normalized or chomped
|
|
126
|
+
# regardless of these settings.
|
|
127
|
+
#
|
|
128
|
+
# @return [Boolean] `false`
|
|
129
|
+
#
|
|
130
|
+
def normalize_captured_stdout? = false
|
|
131
|
+
|
|
132
|
+
# Archive output is binary, so preserve captured stdout byte-for-byte
|
|
133
|
+
# even when it ends with a newline.
|
|
134
|
+
#
|
|
135
|
+
# @return [Boolean] `false`
|
|
136
|
+
#
|
|
137
|
+
def chomp_captured_stdout? = false
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|