git 1.19.1 → 5.5.0
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/.yardopts +5 -1
- data/AI_POLICY.md +24 -0
- data/CHANGELOG.md +689 -0
- data/CODE_OF_CONDUCT.md +25 -0
- data/CONTRIBUTING.md +1175 -97
- data/GOVERNANCE.md +106 -0
- data/LICENSE +1 -1
- data/MAINTAINERS.md +17 -4
- data/README.md +476 -320
- data/UPGRADING.md +1138 -0
- data/git.gemspec +124 -36
- data/lib/git/author.rb +39 -7
- data/lib/git/author_info.rb +66 -0
- data/lib/git/branch.rb +615 -65
- data/lib/git/branch_delete_failure.rb +34 -0
- data/lib/git/branch_delete_result.rb +66 -0
- data/lib/git/branch_info.rb +237 -0
- data/lib/git/branches.rb +167 -44
- data/lib/git/command_line/base.rb +247 -0
- data/lib/git/command_line/capturing.rb +308 -0
- data/lib/git/command_line/result.rb +88 -0
- data/lib/git/command_line/streaming.rb +236 -0
- data/lib/git/command_line.rb +52 -0
- data/lib/git/commands/add.rb +139 -0
- data/lib/git/commands/am/abort.rb +43 -0
- data/lib/git/commands/am/apply.rb +263 -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 +49 -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 +242 -0
- data/lib/git/commands/archive/list_formats.rb +46 -0
- data/lib/git/commands/archive.rb +145 -0
- data/lib/git/commands/arguments.rb +4521 -0
- data/lib/git/commands/base.rb +502 -0
- data/lib/git/commands/branch/copy.rb +102 -0
- data/lib/git/commands/branch/create.rb +177 -0
- data/lib/git/commands/branch/delete.rb +88 -0
- data/lib/git/commands/branch/list.rb +178 -0
- data/lib/git/commands/branch/move.rb +102 -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 +53 -0
- data/lib/git/commands/branch.rb +34 -0
- data/lib/git/commands/cat_file/batch.rb +385 -0
- data/lib/git/commands/cat_file/filtered.rb +105 -0
- data/lib/git/commands/cat_file/raw.rb +271 -0
- data/lib/git/commands/cat_file.rb +49 -0
- data/lib/git/commands/checkout/branch.rb +153 -0
- data/lib/git/commands/checkout/files.rb +116 -0
- data/lib/git/commands/checkout.rb +38 -0
- data/lib/git/commands/checkout_index.rb +106 -0
- data/lib/git/commands/clean.rb +102 -0
- data/lib/git/commands/clone.rb +241 -0
- data/lib/git/commands/commit.rb +273 -0
- data/lib/git/commands/commit_tree.rb +101 -0
- data/lib/git/commands/config_option_syntax/add.rb +86 -0
- data/lib/git/commands/config_option_syntax/get.rb +121 -0
- data/lib/git/commands/config_option_syntax/get_all.rb +118 -0
- data/lib/git/commands/config_option_syntax/get_color.rb +95 -0
- data/lib/git/commands/config_option_syntax/get_color_bool.rb +96 -0
- data/lib/git/commands/config_option_syntax/get_regexp.rb +119 -0
- data/lib/git/commands/config_option_syntax/get_urlmatch.rb +111 -0
- data/lib/git/commands/config_option_syntax/list.rb +111 -0
- data/lib/git/commands/config_option_syntax/remove_section.rb +79 -0
- data/lib/git/commands/config_option_syntax/rename_section.rb +83 -0
- data/lib/git/commands/config_option_syntax/replace_all.rb +109 -0
- data/lib/git/commands/config_option_syntax/set.rb +119 -0
- data/lib/git/commands/config_option_syntax/unset.rb +92 -0
- data/lib/git/commands/config_option_syntax/unset_all.rb +94 -0
- data/lib/git/commands/config_option_syntax.rb +56 -0
- data/lib/git/commands/describe.rb +156 -0
- data/lib/git/commands/diff.rb +657 -0
- data/lib/git/commands/diff_files.rb +519 -0
- data/lib/git/commands/diff_index.rb +499 -0
- data/lib/git/commands/fetch.rb +354 -0
- data/lib/git/commands/fsck.rb +138 -0
- data/lib/git/commands/gc.rb +134 -0
- data/lib/git/commands/grep.rb +339 -0
- data/lib/git/commands/init.rb +101 -0
- data/lib/git/commands/log.rb +634 -0
- data/lib/git/commands/ls_files.rb +195 -0
- data/lib/git/commands/ls_remote.rb +161 -0
- data/lib/git/commands/ls_tree.rb +135 -0
- data/lib/git/commands/maintenance/register.rb +77 -0
- data/lib/git/commands/maintenance/run.rb +109 -0
- data/lib/git/commands/maintenance/start.rb +71 -0
- data/lib/git/commands/maintenance/stop.rb +60 -0
- data/lib/git/commands/maintenance/unregister.rb +84 -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 +250 -0
- data/lib/git/commands/merge.rb +28 -0
- data/lib/git/commands/merge_base.rb +91 -0
- data/lib/git/commands/mv.rb +82 -0
- data/lib/git/commands/name_rev.rb +119 -0
- data/lib/git/commands/pull.rb +382 -0
- data/lib/git/commands/push.rb +251 -0
- data/lib/git/commands/read_tree.rb +154 -0
- data/lib/git/commands/remote/add.rb +96 -0
- data/lib/git/commands/remote/get_url.rb +68 -0
- data/lib/git/commands/remote/list.rb +56 -0
- data/lib/git/commands/remote/prune.rb +63 -0
- data/lib/git/commands/remote/remove.rb +52 -0
- data/lib/git/commands/remote/rename.rb +76 -0
- data/lib/git/commands/remote/set_branches.rb +70 -0
- data/lib/git/commands/remote/set_head.rb +89 -0
- data/lib/git/commands/remote/set_url.rb +78 -0
- data/lib/git/commands/remote/set_url_add.rb +70 -0
- data/lib/git/commands/remote/set_url_delete.rb +71 -0
- data/lib/git/commands/remote/show.rb +77 -0
- data/lib/git/commands/remote/update.rb +79 -0
- data/lib/git/commands/remote.rb +42 -0
- data/lib/git/commands/repack.rb +281 -0
- data/lib/git/commands/reset.rb +154 -0
- data/lib/git/commands/rev_parse.rb +304 -0
- data/lib/git/commands/revert/abort.rb +45 -0
- data/lib/git/commands/revert/continue.rb +62 -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 +158 -0
- data/lib/git/commands/revert.rb +29 -0
- data/lib/git/commands/rm.rb +113 -0
- data/lib/git/commands/show.rb +632 -0
- data/lib/git/commands/show_ref/exclude_existing.rb +119 -0
- data/lib/git/commands/show_ref/exists.rb +80 -0
- data/lib/git/commands/show_ref/list.rb +149 -0
- data/lib/git/commands/show_ref/verify.rb +122 -0
- data/lib/git/commands/show_ref.rb +42 -0
- data/lib/git/commands/stash/apply.rb +81 -0
- data/lib/git/commands/stash/branch.rb +67 -0
- data/lib/git/commands/stash/clear.rb +43 -0
- data/lib/git/commands/stash/create.rb +60 -0
- data/lib/git/commands/stash/drop.rb +73 -0
- data/lib/git/commands/stash/list.rb +43 -0
- data/lib/git/commands/stash/pop.rb +87 -0
- data/lib/git/commands/stash/push.rb +112 -0
- data/lib/git/commands/stash/show.rb +158 -0
- data/lib/git/commands/stash/store.rb +72 -0
- data/lib/git/commands/stash.rb +38 -0
- data/lib/git/commands/status.rb +174 -0
- data/lib/git/commands/symbolic_ref/delete.rb +72 -0
- data/lib/git/commands/symbolic_ref/read.rb +99 -0
- data/lib/git/commands/symbolic_ref/update.rb +79 -0
- data/lib/git/commands/symbolic_ref.rb +38 -0
- data/lib/git/commands/tag/create.rb +142 -0
- data/lib/git/commands/tag/delete.rb +57 -0
- data/lib/git/commands/tag/list.rb +146 -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 +145 -0
- data/lib/git/commands/update_ref/delete.rb +90 -0
- data/lib/git/commands/update_ref/update.rb +103 -0
- data/lib/git/commands/update_ref.rb +42 -0
- data/lib/git/commands/version.rb +60 -0
- data/lib/git/commands/worktree/add.rb +139 -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 +88 -0
- data/lib/git/config.rb +72 -5
- data/lib/git/config_entry_info.rb +106 -0
- data/lib/git/configuring.rb +795 -0
- data/lib/git/detached_head_info.rb +57 -0
- data/lib/git/diff.rb +437 -86
- data/lib/git/diff_file_numstat_info.rb +31 -0
- data/lib/git/diff_file_patch_info.rb +136 -0
- data/lib/git/diff_file_raw_info.rb +129 -0
- data/lib/git/diff_info.rb +162 -0
- data/lib/git/diff_path_status.rb +107 -0
- data/lib/git/diff_result.rb +34 -0
- data/lib/git/diff_stats.rb +111 -0
- data/lib/git/dirstat_info.rb +102 -0
- data/lib/git/encoding_utils.rb +32 -1
- data/lib/git/errors.rb +285 -0
- data/lib/git/escaped_path.rb +57 -5
- data/lib/git/execution_context/global.rb +31 -0
- data/lib/git/execution_context/repository.rb +151 -0
- data/lib/git/execution_context.rb +559 -0
- data/lib/git/factories.rb +813 -0
- data/lib/git/file_ref.rb +77 -0
- data/lib/git/fsck_object.rb +56 -0
- data/lib/git/fsck_result.rb +132 -0
- data/lib/git/log.rb +306 -90
- data/lib/git/object.rb +563 -141
- data/lib/git/parsers/branch.rb +240 -0
- data/lib/git/parsers/cat_file.rb +111 -0
- data/lib/git/parsers/config_entry.rb +110 -0
- data/lib/git/parsers/diff.rb +792 -0
- data/lib/git/parsers/fsck.rb +144 -0
- data/lib/git/parsers/grep.rb +42 -0
- data/lib/git/parsers/ls_remote.rb +79 -0
- data/lib/git/parsers/ls_tree.rb +58 -0
- data/lib/git/parsers/remote.rb +162 -0
- data/lib/git/parsers/stash.rb +292 -0
- data/lib/git/parsers/status.rb +251 -0
- data/lib/git/parsers/tag.rb +341 -0
- data/lib/git/parsers/worktree.rb +185 -0
- data/lib/git/path_resolver.rb +206 -0
- data/lib/git/remote.rb +165 -12
- data/lib/git/remote_info.rb +203 -0
- data/lib/git/repository/branching.rb +964 -0
- data/lib/git/repository/committing.rb +246 -0
- data/lib/git/repository/context_helpers.rb +293 -0
- data/lib/git/repository/diffing.rb +785 -0
- data/lib/git/repository/inspecting.rb +252 -0
- data/lib/git/repository/logging.rb +410 -0
- data/lib/git/repository/maintenance.rb +65 -0
- data/lib/git/repository/merging.rb +451 -0
- data/lib/git/repository/object_operations.rb +1551 -0
- data/lib/git/repository/remote_operations.rb +984 -0
- data/lib/git/repository/shared_private.rb +120 -0
- data/lib/git/repository/staging.rb +587 -0
- data/lib/git/repository/stashing.rb +623 -0
- data/lib/git/repository/status_operations.rb +249 -0
- data/lib/git/repository/worktree_operations.rb +339 -0
- data/lib/git/repository.rb +484 -2
- data/lib/git/stash.rb +109 -12
- data/lib/git/stash_info.rb +102 -0
- data/lib/git/stashes.rb +169 -26
- data/lib/git/status.rb +308 -122
- data/lib/git/status_file_info.rb +258 -0
- data/lib/git/status_info.rb +189 -0
- data/lib/git/tag_delete_failure.rb +34 -0
- data/lib/git/tag_delete_result.rb +66 -0
- data/lib/git/tag_info.rb +99 -0
- data/lib/git/url.rb +15 -8
- data/lib/git/version.rb +113 -2
- data/lib/git/version_constraint.rb +85 -0
- data/lib/git/worktree.rb +150 -8
- data/lib/git/worktree_info.rb +128 -0
- data/lib/git/worktrees.rb +118 -13
- data/lib/git.rb +632 -234
- metadata +369 -54
- data/.github/stale.yml +0 -25
- data/.github/workflows/continuous_integration.yml +0 -49
- data/.gitignore +0 -10
- data/Dockerfile.changelog-rs +0 -12
- data/Gemfile +0 -5
- data/ISSUE_TEMPLATE.md +0 -15
- data/PULL_REQUEST_TEMPLATE.md +0 -9
- data/RELEASING.md +0 -70
- data/Rakefile +0 -60
- data/lib/git/base/factory.rb +0 -99
- data/lib/git/base.rb +0 -711
- data/lib/git/command_line_result.rb +0 -86
- data/lib/git/failed_error.rb +0 -53
- data/lib/git/git_execute_error.rb +0 -7
- data/lib/git/index.rb +0 -5
- data/lib/git/lib.rb +0 -1328
- data/lib/git/path.rb +0 -31
- data/lib/git/signaled_error.rb +0 -50
- data/lib/git/working_directory.rb +0 -4
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
# Implements the `git checkout-index` command
|
|
8
|
+
#
|
|
9
|
+
# This command copies all files listed in the index to the working directory
|
|
10
|
+
# (not overwriting existing files). It is typically used to populate a new
|
|
11
|
+
# working directory from the current index, optionally scoped to a specific
|
|
12
|
+
# path or prefix.
|
|
13
|
+
#
|
|
14
|
+
# @example Typical usage
|
|
15
|
+
# checkout_index = Git::Commands::CheckoutIndex.new(execution_context)
|
|
16
|
+
# checkout_index.call(all: true)
|
|
17
|
+
# checkout_index.call(all: true, force: true)
|
|
18
|
+
# checkout_index.call('path/to/file.txt')
|
|
19
|
+
# checkout_index.call(all: true, prefix: 'output/')
|
|
20
|
+
#
|
|
21
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-checkout-index/2.53.0
|
|
22
|
+
#
|
|
23
|
+
# @see https://git-scm.com/docs/git-checkout-index git-checkout-index
|
|
24
|
+
#
|
|
25
|
+
# @see Git::Commands
|
|
26
|
+
#
|
|
27
|
+
# @api private
|
|
28
|
+
#
|
|
29
|
+
class CheckoutIndex < Git::Commands::Base
|
|
30
|
+
arguments do
|
|
31
|
+
literal 'checkout-index'
|
|
32
|
+
flag_option %i[index u]
|
|
33
|
+
flag_option %i[quiet q]
|
|
34
|
+
flag_option %i[all a]
|
|
35
|
+
flag_option %i[force f]
|
|
36
|
+
flag_option %i[no_create n]
|
|
37
|
+
value_option :prefix, inline: true
|
|
38
|
+
value_option :stage, inline: true
|
|
39
|
+
flag_option :temp
|
|
40
|
+
flag_option :ignore_skip_worktree_bits
|
|
41
|
+
end_of_options
|
|
42
|
+
operand :file, required: false, repeatable: true
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @overload call(*file, **options)
|
|
46
|
+
#
|
|
47
|
+
# Execute the `git checkout-index` command
|
|
48
|
+
#
|
|
49
|
+
# @param file [Array<String>] zero or more file paths to check out
|
|
50
|
+
#
|
|
51
|
+
# When empty, no files are checked out individually (use `:all` to check
|
|
52
|
+
# out everything).
|
|
53
|
+
#
|
|
54
|
+
# @param options [Hash] command options
|
|
55
|
+
#
|
|
56
|
+
# @option options [Boolean, nil] :index (nil) update stat information for the
|
|
57
|
+
# checked out entries in the index file
|
|
58
|
+
#
|
|
59
|
+
# Alias: `:u`
|
|
60
|
+
#
|
|
61
|
+
# @option options [Boolean, nil] :quiet (nil) suppress messages when files
|
|
62
|
+
# exist or are not in the index
|
|
63
|
+
#
|
|
64
|
+
# Alias: `:q`
|
|
65
|
+
#
|
|
66
|
+
# @option options [Boolean, nil] :all (nil) check out all files in the index
|
|
67
|
+
#
|
|
68
|
+
# Alias: `:a`
|
|
69
|
+
#
|
|
70
|
+
# @option options [Boolean, nil] :force (nil) force overwrite of existing files
|
|
71
|
+
#
|
|
72
|
+
# Alias: `:f`
|
|
73
|
+
#
|
|
74
|
+
# @option options [Boolean, nil] :no_create (nil) don't checkout new files,
|
|
75
|
+
# only refresh files already checked out
|
|
76
|
+
#
|
|
77
|
+
# Alias: `:n`
|
|
78
|
+
#
|
|
79
|
+
# @option options [String] :prefix (nil) write file content under the given
|
|
80
|
+
# directory prefix instead of the working directory root
|
|
81
|
+
#
|
|
82
|
+
# @option options [String] :stage (nil) check out from the named stage
|
|
83
|
+
#
|
|
84
|
+
# Pass `'1'`, `'2'`, or `'3'` for a specific stage number, or `'all'` to
|
|
85
|
+
# check out all stages (automatically implies `--temp`).
|
|
86
|
+
#
|
|
87
|
+
# @option options [Boolean, nil] :temp (nil) write file content to temporary
|
|
88
|
+
# files near the target location instead of checking them out
|
|
89
|
+
#
|
|
90
|
+
# @option options [Boolean, nil] :ignore_skip_worktree_bits (nil) check out
|
|
91
|
+
# all files, including those with the skip-worktree bit set
|
|
92
|
+
#
|
|
93
|
+
# @return [Git::CommandLine::Result] the result of calling `git checkout-index`
|
|
94
|
+
#
|
|
95
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
96
|
+
#
|
|
97
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
98
|
+
#
|
|
99
|
+
# @api public
|
|
100
|
+
#
|
|
101
|
+
def call(*, **)
|
|
102
|
+
super
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
# Remove untracked files from the working tree
|
|
8
|
+
#
|
|
9
|
+
# Cleans the working tree by recursively removing files that are not under
|
|
10
|
+
# version control. Only files unknown to Git are removed by default; with
|
|
11
|
+
# `:x` also removes ignored files; with `:X` removes only ignored files.
|
|
12
|
+
#
|
|
13
|
+
# @example Typical usage
|
|
14
|
+
# clean = Git::Commands::Clean.new(execution_context)
|
|
15
|
+
# clean.call(force: true)
|
|
16
|
+
# clean.call(force: true, d: true)
|
|
17
|
+
# clean.call(force: 2)
|
|
18
|
+
# clean.call(dry_run: true)
|
|
19
|
+
# clean.call(force: true, exclude: '*.log')
|
|
20
|
+
# clean.call(force: true, X: true)
|
|
21
|
+
# clean.call(force: true, pathspec: ['tmp/', 'build/'])
|
|
22
|
+
#
|
|
23
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-clean/2.53.0
|
|
24
|
+
#
|
|
25
|
+
# @see Git::Commands
|
|
26
|
+
#
|
|
27
|
+
# @see https://git-scm.com/docs/git-clean git-clean
|
|
28
|
+
#
|
|
29
|
+
# @api private
|
|
30
|
+
#
|
|
31
|
+
class Clean < Git::Commands::Base
|
|
32
|
+
arguments do
|
|
33
|
+
literal 'clean'
|
|
34
|
+
flag_option :d
|
|
35
|
+
flag_option %i[force f], max_times: 2
|
|
36
|
+
flag_option %i[dry_run n]
|
|
37
|
+
flag_option %i[quiet q]
|
|
38
|
+
value_option %i[exclude e], inline: true, repeatable: true
|
|
39
|
+
flag_option :x
|
|
40
|
+
flag_option :X
|
|
41
|
+
execution_option :chdir
|
|
42
|
+
end_of_options
|
|
43
|
+
value_option :pathspec, as_operand: true, repeatable: true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @overload call(**options)
|
|
47
|
+
#
|
|
48
|
+
# Execute the git clean command
|
|
49
|
+
#
|
|
50
|
+
# @param options [Hash] command options
|
|
51
|
+
#
|
|
52
|
+
# @option options [Boolean, nil] :d (nil) recurse into untracked directories
|
|
53
|
+
#
|
|
54
|
+
# @option options [Boolean, Integer, nil] :force (nil) force the removal of untracked files
|
|
55
|
+
#
|
|
56
|
+
# When `clean.requireForce` is not set to `false`, git-clean will refuse to
|
|
57
|
+
# delete files or directories unless this option is given.
|
|
58
|
+
#
|
|
59
|
+
# Pass `true` or `1` to emit `--force` once. Pass `2` to emit `--force --force`,
|
|
60
|
+
# which also removes untracked nested git repositories (directories with a
|
|
61
|
+
# `.git` subdirectory).
|
|
62
|
+
#
|
|
63
|
+
# Alias: `:f`
|
|
64
|
+
#
|
|
65
|
+
# @option options [Boolean, nil] :dry_run (nil) don't actually remove anything, just
|
|
66
|
+
# show what would be done
|
|
67
|
+
#
|
|
68
|
+
# Alias: `:n`
|
|
69
|
+
#
|
|
70
|
+
# @option options [Boolean, nil] :quiet (nil) be quiet, only report errors
|
|
71
|
+
#
|
|
72
|
+
# Alias: `:q`
|
|
73
|
+
#
|
|
74
|
+
# @option options [String, Array<String>] :exclude (nil) use the given exclude
|
|
75
|
+
# pattern in addition to the standard ignore rules
|
|
76
|
+
#
|
|
77
|
+
# May be specified multiple times. Alias: `:e`
|
|
78
|
+
#
|
|
79
|
+
# @option options [Boolean, nil] :x (nil) don't use the standard ignore rules
|
|
80
|
+
#
|
|
81
|
+
# @option options [Boolean, nil] :X (nil) remove only files ignored by Git
|
|
82
|
+
#
|
|
83
|
+
# @option options [String, Array<String>] :pathspec (nil) limit cleaning to files
|
|
84
|
+
# matching the given pathspec(s)
|
|
85
|
+
#
|
|
86
|
+
# @option options [String, nil] :chdir (nil) change to this directory before
|
|
87
|
+
# running git; not passed to the git CLI
|
|
88
|
+
#
|
|
89
|
+
# @return [Git::CommandLine::Result] the result of calling `git clean`
|
|
90
|
+
#
|
|
91
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
92
|
+
#
|
|
93
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
94
|
+
#
|
|
95
|
+
# @api public
|
|
96
|
+
#
|
|
97
|
+
def call(*, **)
|
|
98
|
+
super
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
# Implements the `git clone` command
|
|
8
|
+
#
|
|
9
|
+
# Clones a repository into a newly created directory.
|
|
10
|
+
#
|
|
11
|
+
# @example Typical usage
|
|
12
|
+
# clone = Git::Commands::Clone.new(execution_context)
|
|
13
|
+
# clone.call('https://github.com/user/repo.git')
|
|
14
|
+
# clone.call('https://github.com/user/repo.git', 'local-dir')
|
|
15
|
+
# clone.call('https://github.com/user/repo.git', 'local-dir', bare: true)
|
|
16
|
+
# clone.call('https://github.com/user/repo.git', 'local-dir', depth: 1)
|
|
17
|
+
#
|
|
18
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-clone/2.53.0
|
|
19
|
+
#
|
|
20
|
+
# @see https://git-scm.com/docs/git-clone git-clone
|
|
21
|
+
#
|
|
22
|
+
# @see Git::Commands
|
|
23
|
+
#
|
|
24
|
+
# @api private
|
|
25
|
+
#
|
|
26
|
+
class Clone < Git::Commands::Base
|
|
27
|
+
arguments do
|
|
28
|
+
literal 'clone'
|
|
29
|
+
value_option :template, inline: true
|
|
30
|
+
flag_option %i[local l], negatable: true
|
|
31
|
+
flag_option %i[shared s]
|
|
32
|
+
flag_option :no_hardlinks
|
|
33
|
+
flag_option %i[quiet q]
|
|
34
|
+
flag_option %i[verbose v]
|
|
35
|
+
flag_option :progress
|
|
36
|
+
flag_option %i[no_checkout n]
|
|
37
|
+
flag_option :bare
|
|
38
|
+
flag_option :mirror
|
|
39
|
+
value_option %i[origin o]
|
|
40
|
+
value_option %i[branch b]
|
|
41
|
+
value_option :revision, inline: true
|
|
42
|
+
value_option %i[upload_pack u]
|
|
43
|
+
value_option :reference, repeatable: true
|
|
44
|
+
value_option :reference_if_able, repeatable: true
|
|
45
|
+
flag_option :dissociate
|
|
46
|
+
value_option :separate_git_dir, inline: true
|
|
47
|
+
value_option :server_option, inline: true, repeatable: true
|
|
48
|
+
value_option :depth
|
|
49
|
+
value_option :shallow_since, inline: true
|
|
50
|
+
value_option :shallow_exclude, inline: true, repeatable: true
|
|
51
|
+
flag_option :single_branch, negatable: true
|
|
52
|
+
flag_option :tags, negatable: true
|
|
53
|
+
flag_or_value_option :recurse_submodules, inline: true, repeatable: true
|
|
54
|
+
flag_option :shallow_submodules, negatable: true
|
|
55
|
+
flag_option :remote_submodules, negatable: true
|
|
56
|
+
value_option %i[jobs j]
|
|
57
|
+
flag_option :sparse
|
|
58
|
+
flag_option :reject_shallow, negatable: true
|
|
59
|
+
value_option :filter, inline: true
|
|
60
|
+
flag_option :also_filter_submodules
|
|
61
|
+
value_option %i[config c], repeatable: true
|
|
62
|
+
value_option :bundle_uri, inline: true
|
|
63
|
+
value_option :ref_format, inline: true
|
|
64
|
+
end_of_options
|
|
65
|
+
operand :repository, required: true
|
|
66
|
+
operand :directory
|
|
67
|
+
execution_option :timeout
|
|
68
|
+
execution_option :chdir
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# @overload call(repository, directory = nil, **options)
|
|
72
|
+
#
|
|
73
|
+
# Execute the `git clone` command
|
|
74
|
+
#
|
|
75
|
+
# @param repository [String] the URL or path of the repository to clone
|
|
76
|
+
#
|
|
77
|
+
# @param directory [String, nil] the directory to clone into; git derives the
|
|
78
|
+
# name from the repository URL when omitted
|
|
79
|
+
#
|
|
80
|
+
# @param options [Hash] command options
|
|
81
|
+
#
|
|
82
|
+
# @option options [String] :template (nil) directory from which templates
|
|
83
|
+
# will be used
|
|
84
|
+
#
|
|
85
|
+
# @option options [Boolean, nil] :local (nil) bypass the normal Git-aware transport
|
|
86
|
+
# for local clones (`--local`)
|
|
87
|
+
#
|
|
88
|
+
# Alias: `:l`
|
|
89
|
+
#
|
|
90
|
+
# @option options [Boolean, nil] :no_local (nil) disable the local optimization
|
|
91
|
+
# and use the normal transport (`--no-local`)
|
|
92
|
+
#
|
|
93
|
+
# @option options [Boolean, nil] :shared (nil) set up a shared clone using
|
|
94
|
+
# alternates instead of hardlinks
|
|
95
|
+
#
|
|
96
|
+
# Alias: `:s`
|
|
97
|
+
#
|
|
98
|
+
# @option options [Boolean, nil] :no_hardlinks (nil) force file-copy instead of
|
|
99
|
+
# hardlinks when cloning from a local filesystem
|
|
100
|
+
#
|
|
101
|
+
# @option options [Boolean, nil] :quiet (nil) suppress progress output to stderr
|
|
102
|
+
#
|
|
103
|
+
# Alias: `:q`
|
|
104
|
+
#
|
|
105
|
+
# @option options [Boolean, nil] :verbose (nil) run verbosely
|
|
106
|
+
#
|
|
107
|
+
# Alias: `:v`
|
|
108
|
+
#
|
|
109
|
+
# @option options [Boolean, nil] :progress (nil) force progress status even when
|
|
110
|
+
# stderr is not a terminal
|
|
111
|
+
#
|
|
112
|
+
# @option options [Boolean, nil] :no_checkout (nil) skip checking out HEAD after
|
|
113
|
+
# the clone
|
|
114
|
+
#
|
|
115
|
+
# Alias: `:n`
|
|
116
|
+
#
|
|
117
|
+
# @option options [Boolean, nil] :bare (nil) clone as a bare repository
|
|
118
|
+
#
|
|
119
|
+
# @option options [Boolean, nil] :mirror (nil) set up a mirror clone (implies
|
|
120
|
+
# --bare)
|
|
121
|
+
#
|
|
122
|
+
# @option options [String] :origin (nil) name of the remote to use instead of
|
|
123
|
+
# "origin"
|
|
124
|
+
#
|
|
125
|
+
# Alias: `:o`
|
|
126
|
+
#
|
|
127
|
+
# @option options [String] :branch (nil) branch to check out after cloning
|
|
128
|
+
#
|
|
129
|
+
# Alias: `:b`
|
|
130
|
+
#
|
|
131
|
+
# @option options [String] :revision (nil) detach HEAD at the given revision
|
|
132
|
+
# after cloning; incompatible with :branch and :mirror
|
|
133
|
+
#
|
|
134
|
+
# @option options [String] :upload_pack (nil) path to git-upload-pack on the
|
|
135
|
+
# remote (ssh only)
|
|
136
|
+
#
|
|
137
|
+
# Alias: `:u`
|
|
138
|
+
#
|
|
139
|
+
# @option options [String, Array<String>] :reference (nil) borrow objects from
|
|
140
|
+
# one or more reference repositories
|
|
141
|
+
#
|
|
142
|
+
# @option options [String, Array<String>] :reference_if_able (nil) like
|
|
143
|
+
# :reference but skip with a warning when the reference does not exist
|
|
144
|
+
#
|
|
145
|
+
# @option options [Boolean, nil] :dissociate (nil) stop borrowing from reference
|
|
146
|
+
# repositories after the clone is complete
|
|
147
|
+
#
|
|
148
|
+
# @option options [String] :separate_git_dir (nil) place the git directory at
|
|
149
|
+
# the given path and create a gitfile symlink in the working tree
|
|
150
|
+
#
|
|
151
|
+
# @option options [String, Array<String>] :server_option (nil) protocol-v2
|
|
152
|
+
# server options
|
|
153
|
+
#
|
|
154
|
+
# @option options [Integer, String] :depth (nil) create a shallow clone with
|
|
155
|
+
# the specified number of commits
|
|
156
|
+
#
|
|
157
|
+
# @option options [String] :shallow_since (nil) create a shallow clone with
|
|
158
|
+
# history after the specified date
|
|
159
|
+
#
|
|
160
|
+
# @option options [String, Array<String>] :shallow_exclude (nil) exclude
|
|
161
|
+
# commits reachable from the specified remote branch or tag
|
|
162
|
+
#
|
|
163
|
+
# @option options [Boolean, nil] :single_branch (nil) clone only the history for
|
|
164
|
+
# one branch (`--single-branch`)
|
|
165
|
+
#
|
|
166
|
+
# @option options [Boolean, nil] :no_single_branch (nil) clone history for all
|
|
167
|
+
# branches (`--no-single-branch`)
|
|
168
|
+
#
|
|
169
|
+
# @option options [Boolean, nil] :tags (nil) include tags in the clone (`--tags`)
|
|
170
|
+
#
|
|
171
|
+
# @option options [Boolean, nil] :no_tags (nil) exclude tags from the clone
|
|
172
|
+
# (`--no-tags`)
|
|
173
|
+
#
|
|
174
|
+
# @option options [Boolean, String, Array<String>, nil] :recurse_submodules (nil)
|
|
175
|
+
# initialize submodules after cloning; pass true for all submodules or a
|
|
176
|
+
# pathspec string/array for a subset
|
|
177
|
+
#
|
|
178
|
+
# @option options [Boolean, nil] :shallow_submodules (nil) clone submodules with
|
|
179
|
+
# depth 1 (`--shallow-submodules`)
|
|
180
|
+
#
|
|
181
|
+
# @option options [Boolean, nil] :no_shallow_submodules (nil) clone submodules
|
|
182
|
+
# with full history (`--no-shallow-submodules`)
|
|
183
|
+
#
|
|
184
|
+
# @option options [Boolean, nil] :remote_submodules (nil) use submodule
|
|
185
|
+
# remote-tracking branch status (`--remote-submodules`)
|
|
186
|
+
#
|
|
187
|
+
# @option options [Boolean, nil] :no_remote_submodules (nil) use the locally
|
|
188
|
+
# recorded SHA-1 for submodules (`--no-remote-submodules`)
|
|
189
|
+
#
|
|
190
|
+
# @option options [Integer, String] :jobs (nil) number of submodules fetched
|
|
191
|
+
# concurrently
|
|
192
|
+
#
|
|
193
|
+
# Alias: `:j`
|
|
194
|
+
#
|
|
195
|
+
# @option options [Boolean, nil] :sparse (nil) enable sparse checkout with
|
|
196
|
+
# top-level files only
|
|
197
|
+
#
|
|
198
|
+
# @option options [Boolean, nil] :reject_shallow (nil) fail if source is shallow
|
|
199
|
+
# (`--reject-shallow`)
|
|
200
|
+
#
|
|
201
|
+
# @option options [Boolean, nil] :no_reject_shallow (nil) allow cloning from
|
|
202
|
+
# shallow sources (`--no-reject-shallow`)
|
|
203
|
+
#
|
|
204
|
+
# @option options [String] :filter (nil) specify a partial clone filter
|
|
205
|
+
# (e.g., 'blob:none', 'tree:0')
|
|
206
|
+
#
|
|
207
|
+
# @option options [Boolean, nil] :also_filter_submodules (nil) apply the partial
|
|
208
|
+
# clone filter to submodules; requires :filter and :recurse_submodules
|
|
209
|
+
#
|
|
210
|
+
# @option options [String, Array<String>] :config (nil) set configuration
|
|
211
|
+
# variables in the newly-created repository
|
|
212
|
+
#
|
|
213
|
+
# Alias: `:c`
|
|
214
|
+
#
|
|
215
|
+
# @option options [String] :bundle_uri (nil) fetch a bundle from the given URI
|
|
216
|
+
# before fetching from the remote
|
|
217
|
+
#
|
|
218
|
+
# @option options [String] :ref_format (nil) specify the ref storage format
|
|
219
|
+
# (e.g., 'files', 'reftable')
|
|
220
|
+
#
|
|
221
|
+
# @option options [Numeric, nil] :timeout (nil) the number of seconds to wait
|
|
222
|
+
# for the command to complete; if nil, uses the global timeout from
|
|
223
|
+
# {Git::Config}; if 0, no timeout is enforced
|
|
224
|
+
#
|
|
225
|
+
# @option options [String, nil] :chdir (nil) the working directory in which to
|
|
226
|
+
# run the git clone command
|
|
227
|
+
#
|
|
228
|
+
# @return [Git::CommandLine::Result] the result of calling `git clone`
|
|
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
|
+
#
|
|
236
|
+
def call(*, **)
|
|
237
|
+
super
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|