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
data/lib/git/worktrees.rb
CHANGED
|
@@ -1,47 +1,152 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Git
|
|
2
|
-
#
|
|
4
|
+
# Collection of all Git worktrees in a repository
|
|
5
|
+
#
|
|
6
|
+
# Wraps every linked and main worktree and provides enumeration and
|
|
7
|
+
# path-based lookup.
|
|
8
|
+
#
|
|
9
|
+
# @example Enumerate all worktrees
|
|
10
|
+
# worktrees = repo.worktrees
|
|
11
|
+
# worktrees.each { |wt| puts wt.dir }
|
|
12
|
+
#
|
|
13
|
+
# @deprecated Use {Git::Repository::WorktreeOperations#worktree_list} instead
|
|
14
|
+
#
|
|
15
|
+
# {Git::Repository::WorktreeOperations#worktree_list} returns
|
|
16
|
+
# `Array<Git::WorktreeInfo>` (immutable value objects). Look a worktree up
|
|
17
|
+
# by path with `worktree_list.find { |w| w.path == path }` in place of
|
|
18
|
+
# {#[]}, and call {Git::Repository::WorktreeOperations#worktree_prune} in
|
|
19
|
+
# place of {#prune}. Constructing a `Git::Worktrees` emits a deprecation
|
|
20
|
+
# warning.
|
|
21
|
+
#
|
|
22
|
+
# @api public
|
|
23
|
+
#
|
|
3
24
|
class Worktrees
|
|
4
|
-
|
|
5
25
|
include Enumerable
|
|
6
26
|
|
|
27
|
+
# Creates a new Worktrees collection populated from the given repository
|
|
28
|
+
#
|
|
29
|
+
# @param base [Git::Repository] the repository to enumerate
|
|
30
|
+
# worktrees from
|
|
31
|
+
#
|
|
32
|
+
# @return [void]
|
|
33
|
+
#
|
|
34
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
35
|
+
#
|
|
36
|
+
# @deprecated Use {Git::Repository::WorktreeOperations#worktree_list} instead
|
|
37
|
+
#
|
|
38
|
+
# @see Git::Repository::WorktreeOperations#worktree_list
|
|
39
|
+
#
|
|
7
40
|
def initialize(base)
|
|
41
|
+
Git::Deprecation.warn(
|
|
42
|
+
'Git::Worktrees is deprecated and will be removed in v6.0.0. ' \
|
|
43
|
+
'Use Git::Repository#worktree_list instead.'
|
|
44
|
+
)
|
|
8
45
|
@worktrees = {}
|
|
9
46
|
|
|
10
47
|
@base = base
|
|
11
48
|
|
|
12
|
-
#
|
|
13
|
-
|
|
49
|
+
# worktrees_all is deprecated too; silence it so one Git::Worktrees.new emits one warning
|
|
50
|
+
Git::Deprecation.silence { worktree_repository.worktrees_all }.each do |w|
|
|
14
51
|
@worktrees[w[0]] = Git::Worktree.new(@base, w[0], w[1])
|
|
15
52
|
end
|
|
16
53
|
end
|
|
17
54
|
|
|
18
|
-
#
|
|
19
|
-
|
|
55
|
+
# Returns the number of worktrees in the collection
|
|
56
|
+
#
|
|
57
|
+
# @example Count all worktrees
|
|
58
|
+
# repo.worktrees.size # => 2
|
|
59
|
+
#
|
|
60
|
+
# @return [Integer] the total number of worktrees
|
|
61
|
+
#
|
|
20
62
|
def size
|
|
21
63
|
@worktrees.size
|
|
22
64
|
end
|
|
23
65
|
|
|
24
|
-
|
|
25
|
-
|
|
66
|
+
# Iterates over every worktree in the collection
|
|
67
|
+
#
|
|
68
|
+
# @overload each
|
|
69
|
+
#
|
|
70
|
+
# @example Get an enumerator over all worktrees
|
|
71
|
+
# enum = repo.worktrees.each
|
|
72
|
+
#
|
|
73
|
+
# @return [Enumerator<Git::Worktree>] an enumerator over all worktrees
|
|
74
|
+
#
|
|
75
|
+
# @overload each(&block)
|
|
76
|
+
#
|
|
77
|
+
# @example Print every worktree path
|
|
78
|
+
# repo.worktrees.each { |wt| puts wt.dir }
|
|
79
|
+
#
|
|
80
|
+
# @return [Array<Git::Worktree>] the full list of worktrees
|
|
81
|
+
#
|
|
82
|
+
# @yield [worktree] passes each worktree to the block
|
|
83
|
+
#
|
|
84
|
+
# @yieldparam worktree [Git::Worktree] a worktree in the repository
|
|
85
|
+
#
|
|
86
|
+
# @yieldreturn [void]
|
|
87
|
+
#
|
|
88
|
+
def each(&)
|
|
89
|
+
@worktrees.values.each(&)
|
|
26
90
|
end
|
|
27
91
|
|
|
92
|
+
# Returns the worktree with the given path
|
|
93
|
+
#
|
|
94
|
+
# Supports lookup by the filesystem path of the worktree directory or by
|
|
95
|
+
# the full worktree descriptor (path and optional commitish).
|
|
96
|
+
#
|
|
97
|
+
# @example Look up a worktree by path
|
|
98
|
+
# repo.worktrees['/path/to/linked-worktree']
|
|
99
|
+
#
|
|
100
|
+
# @param worktree_name [#to_s] the path (or full descriptor) of the
|
|
101
|
+
# worktree to retrieve
|
|
102
|
+
#
|
|
103
|
+
# @return [Git::Worktree, nil] the matching worktree, or `nil` if not found
|
|
104
|
+
#
|
|
28
105
|
def [](worktree_name)
|
|
29
|
-
@worktrees.values.
|
|
106
|
+
@worktrees.values.each_with_object(@worktrees) do |worktree, worktrees|
|
|
30
107
|
worktrees[worktree.full] ||= worktree
|
|
31
|
-
worktrees
|
|
32
108
|
end[worktree_name.to_s]
|
|
33
109
|
end
|
|
34
110
|
|
|
111
|
+
# Returns a string listing all worktrees, one per line
|
|
112
|
+
#
|
|
113
|
+
# @example Display all worktrees
|
|
114
|
+
# puts repo.worktrees.to_s
|
|
115
|
+
#
|
|
116
|
+
# @return [String] a newline-separated listing of worktree descriptors
|
|
117
|
+
#
|
|
35
118
|
def to_s
|
|
36
|
-
out = ''
|
|
37
|
-
@worktrees.
|
|
119
|
+
out = +''
|
|
120
|
+
@worktrees.each_value do |b|
|
|
38
121
|
out << b.to_s << "\n"
|
|
39
122
|
end
|
|
40
123
|
out
|
|
41
124
|
end
|
|
42
125
|
|
|
126
|
+
# Removes stale administrative files for worktrees that no longer exist
|
|
127
|
+
#
|
|
128
|
+
# Runs `git worktree prune` to clean up any lingering worktree metadata
|
|
129
|
+
# for linked worktrees whose directories have been deleted.
|
|
130
|
+
#
|
|
131
|
+
# @example Prune stale worktree metadata
|
|
132
|
+
# repo.worktrees.prune
|
|
133
|
+
#
|
|
134
|
+
# @return [String] stdout from the git command (typically empty)
|
|
135
|
+
#
|
|
136
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
137
|
+
#
|
|
43
138
|
def prune
|
|
44
|
-
|
|
139
|
+
worktree_repository.worktree_prune
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
private
|
|
143
|
+
|
|
144
|
+
# @return [Git::Repository] the repository used to enumerate worktrees
|
|
145
|
+
#
|
|
146
|
+
# @api private
|
|
147
|
+
#
|
|
148
|
+
def worktree_repository
|
|
149
|
+
@base
|
|
45
150
|
end
|
|
46
151
|
end
|
|
47
152
|
end
|