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,151 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/execution_context'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
class ExecutionContext
|
|
7
|
+
# Execution context for repository-bound git commands
|
|
8
|
+
#
|
|
9
|
+
# Manages the git environment for commands that operate within an existing
|
|
10
|
+
# repository — setting `GIT_DIR`, `GIT_WORK_TREE`, `GIT_INDEX_FILE`, and
|
|
11
|
+
# `GIT_SSH` — and prepending `--git-dir` / `--work-tree` to every git
|
|
12
|
+
# invocation via {#global_opts}.
|
|
13
|
+
#
|
|
14
|
+
# ### Construction
|
|
15
|
+
#
|
|
16
|
+
# Use {.from_hash} to build from a configuration hash:
|
|
17
|
+
#
|
|
18
|
+
# context = Git::ExecutionContext::Repository.from_hash(repository: '/repo/.git', ...)
|
|
19
|
+
#
|
|
20
|
+
# @example Build from a configuration hash
|
|
21
|
+
# context = Git::ExecutionContext::Repository.from_hash(
|
|
22
|
+
# repository: '/path/to/.git',
|
|
23
|
+
# working_directory: '/path/to'
|
|
24
|
+
# )
|
|
25
|
+
#
|
|
26
|
+
# @api private
|
|
27
|
+
#
|
|
28
|
+
class Repository < ExecutionContext
|
|
29
|
+
# Creates a Repository context from a Hash
|
|
30
|
+
#
|
|
31
|
+
# Expected keys: `:repository`, `:working_directory`, `:index`, `:git_ssh`,
|
|
32
|
+
# `:binary_path`
|
|
33
|
+
#
|
|
34
|
+
# @example Build from a configuration hash
|
|
35
|
+
# context = Git::ExecutionContext::Repository.from_hash(
|
|
36
|
+
# repository: '/path/to/.git',
|
|
37
|
+
# working_directory: '/path/to'
|
|
38
|
+
# )
|
|
39
|
+
#
|
|
40
|
+
# @param base_hash [Hash] the hash of repository configuration values
|
|
41
|
+
#
|
|
42
|
+
# @param logger [Logger, nil] logger forwarded to the CommandLine layer;
|
|
43
|
+
# `nil` uses a null logger (see {Git::ExecutionContext#initialize})
|
|
44
|
+
#
|
|
45
|
+
# @return [Git::ExecutionContext::Repository] the new repository context
|
|
46
|
+
#
|
|
47
|
+
def self.from_hash(base_hash, logger: nil)
|
|
48
|
+
new(
|
|
49
|
+
git_dir: base_hash[:repository],
|
|
50
|
+
git_index_file: base_hash[:index],
|
|
51
|
+
git_work_dir: base_hash[:working_directory],
|
|
52
|
+
git_ssh: base_hash.fetch(:git_ssh, :use_global_config),
|
|
53
|
+
binary_path: base_hash.fetch(:binary_path, :use_global_config),
|
|
54
|
+
logger: logger
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Creates a new repository execution context
|
|
59
|
+
#
|
|
60
|
+
# @example Create with required git_dir
|
|
61
|
+
# Git::ExecutionContext::Repository.new(git_dir: '/path/to/.git')
|
|
62
|
+
#
|
|
63
|
+
# @param git_dir [String, nil] path to the `.git` directory
|
|
64
|
+
#
|
|
65
|
+
# @param git_work_dir [String, nil] path to the working tree
|
|
66
|
+
#
|
|
67
|
+
# @param git_index_file [String, nil] path to the index file
|
|
68
|
+
#
|
|
69
|
+
# @param binary_path [String, :use_global_config] path to the git binary
|
|
70
|
+
#
|
|
71
|
+
# Give `:use_global_config` (the default) to use
|
|
72
|
+
# `Git::Config.instance.binary_path`.
|
|
73
|
+
#
|
|
74
|
+
# Passing `nil` raises `ArgumentError` — there is no "unset the
|
|
75
|
+
# binary" semantic.
|
|
76
|
+
#
|
|
77
|
+
# @param git_ssh [String, nil, :use_global_config] the SSH wrapper path
|
|
78
|
+
#
|
|
79
|
+
# Give `nil` to unset `GIT_SSH`, or `:use_global_config` (default)
|
|
80
|
+
# to use `Git::Config.instance.git_ssh`.
|
|
81
|
+
#
|
|
82
|
+
# @param logger [Logger, nil] the logger to use in the CommandLine layer
|
|
83
|
+
#
|
|
84
|
+
# Give `nil` to use a null logger (`Logger.new(nil)`).
|
|
85
|
+
#
|
|
86
|
+
# @raise [ArgumentError] if `binary_path` is `nil`
|
|
87
|
+
#
|
|
88
|
+
def initialize( # rubocop:disable Metrics/ParameterLists
|
|
89
|
+
git_dir:,
|
|
90
|
+
git_work_dir: nil,
|
|
91
|
+
git_index_file: nil,
|
|
92
|
+
binary_path: :use_global_config,
|
|
93
|
+
git_ssh: :use_global_config,
|
|
94
|
+
logger: nil
|
|
95
|
+
)
|
|
96
|
+
super(binary_path: binary_path, git_ssh: git_ssh, logger: logger)
|
|
97
|
+
@git_dir = git_dir
|
|
98
|
+
@git_work_dir = git_work_dir
|
|
99
|
+
@git_index_file = git_index_file
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# @return [String, nil] path to the `.git` directory
|
|
103
|
+
attr_reader :git_dir
|
|
104
|
+
|
|
105
|
+
# @return [String, nil] path to the working tree
|
|
106
|
+
attr_reader :git_work_dir
|
|
107
|
+
|
|
108
|
+
# @return [String, nil] path to the index file
|
|
109
|
+
attr_reader :git_index_file
|
|
110
|
+
|
|
111
|
+
# Returns a new instance with the same configuration, applying `overrides`
|
|
112
|
+
#
|
|
113
|
+
# Uses raw stored values for `binary_path`, `git_ssh`, and `logger` so
|
|
114
|
+
# that `:use_global_config` sentinels are preserved across rebuilds and
|
|
115
|
+
# future changes to `Git.configure` continue to take effect.
|
|
116
|
+
#
|
|
117
|
+
# @param overrides [Hash] keyword arguments to override in the new instance
|
|
118
|
+
#
|
|
119
|
+
# @option overrides [String, nil] :git_dir path to the `.git` directory
|
|
120
|
+
#
|
|
121
|
+
# @option overrides [String, nil] :git_work_dir path to the working tree
|
|
122
|
+
#
|
|
123
|
+
# @option overrides [String, nil] :git_index_file path to the index file
|
|
124
|
+
#
|
|
125
|
+
# @option overrides [String, :use_global_config] :binary_path path to the git
|
|
126
|
+
# binary
|
|
127
|
+
#
|
|
128
|
+
# @option overrides [String, nil, :use_global_config] :git_ssh the SSH
|
|
129
|
+
# wrapper path
|
|
130
|
+
#
|
|
131
|
+
# @option overrides [Logger, nil] :logger the logger to use in the
|
|
132
|
+
# CommandLine layer
|
|
133
|
+
#
|
|
134
|
+
# @return [Git::ExecutionContext::Repository] the new context
|
|
135
|
+
#
|
|
136
|
+
# @api private
|
|
137
|
+
#
|
|
138
|
+
def dup_with(**overrides)
|
|
139
|
+
self.class.new(
|
|
140
|
+
git_dir: @git_dir,
|
|
141
|
+
git_work_dir: @git_work_dir,
|
|
142
|
+
git_index_file: @git_index_file,
|
|
143
|
+
binary_path: @binary_path,
|
|
144
|
+
git_ssh: @git_ssh,
|
|
145
|
+
logger: @logger,
|
|
146
|
+
**overrides
|
|
147
|
+
)
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|