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
data/lib/git/remote.rb
CHANGED
|
@@ -1,39 +1,163 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'git/base'
|
|
4
|
+
require 'git/branch'
|
|
5
|
+
require 'git/branch_info'
|
|
6
|
+
|
|
3
7
|
module Git
|
|
4
8
|
# A remote in a Git repository
|
|
9
|
+
#
|
|
10
|
+
# Remote objects provide access to remote metadata and operations like fetch,
|
|
11
|
+
# merge, and remove. They should be obtained via {Git::Base#remote} or the
|
|
12
|
+
# `remote` factory method on a `Git::Repository` instance, not constructed
|
|
13
|
+
# directly.
|
|
14
|
+
#
|
|
15
|
+
# @example Getting a remote
|
|
16
|
+
# git = Git.open('.')
|
|
17
|
+
# remote = git.remote('origin')
|
|
18
|
+
# remote.fetch
|
|
19
|
+
#
|
|
20
|
+
# @api public
|
|
21
|
+
#
|
|
5
22
|
class Remote
|
|
6
|
-
|
|
23
|
+
# The name of this remote (e.g. `'origin'`)
|
|
24
|
+
#
|
|
25
|
+
# @return [String] the remote name
|
|
26
|
+
#
|
|
27
|
+
attr_accessor :name
|
|
28
|
+
|
|
29
|
+
# The URL of this remote
|
|
30
|
+
#
|
|
31
|
+
# @return [String, nil] the remote URL
|
|
32
|
+
#
|
|
33
|
+
attr_accessor :url
|
|
7
34
|
|
|
35
|
+
# The fetch refspec for this remote
|
|
36
|
+
#
|
|
37
|
+
# @return [String, nil] the fetch options string
|
|
38
|
+
#
|
|
39
|
+
attr_accessor :fetch_opts
|
|
40
|
+
|
|
41
|
+
# Initialize a new Remote object
|
|
42
|
+
#
|
|
43
|
+
# @param base [Git::Base, Git::Repository] the git repository
|
|
44
|
+
#
|
|
45
|
+
# Accepts either a {Git::Base} (legacy) or a {Git::Repository} (new form).
|
|
46
|
+
# The `is_a?(Git::Base)` guard will be removed when {Git::Base} is deleted
|
|
47
|
+
# in Phase 4.
|
|
48
|
+
#
|
|
49
|
+
# @param name [String] the remote name (e.g. `'origin'`)
|
|
50
|
+
#
|
|
51
|
+
# @note Use {Git::Base#remote} or the `remote` factory method on a
|
|
52
|
+
# `Git::Repository` instance instead of constructing directly
|
|
53
|
+
#
|
|
54
|
+
# @api private
|
|
55
|
+
#
|
|
8
56
|
def initialize(base, name)
|
|
9
57
|
@base = base
|
|
10
|
-
config =
|
|
58
|
+
config = remote_repository.config_remote(name)
|
|
11
59
|
@name = name
|
|
12
60
|
@url = config['url']
|
|
13
61
|
@fetch_opts = config['fetch']
|
|
14
62
|
end
|
|
15
63
|
|
|
64
|
+
# Fetches from this remote
|
|
65
|
+
#
|
|
66
|
+
# @example Fetch from origin
|
|
67
|
+
# git.remote('origin').fetch
|
|
68
|
+
#
|
|
69
|
+
# @param opts [Hash] fetch options (see {Git::Base#fetch})
|
|
70
|
+
#
|
|
71
|
+
# @return [String] git's stdout from the fetch
|
|
72
|
+
#
|
|
73
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
74
|
+
#
|
|
16
75
|
def fetch(opts = {})
|
|
17
|
-
|
|
76
|
+
remote_repository.fetch(@name, opts)
|
|
18
77
|
end
|
|
19
78
|
|
|
20
|
-
#
|
|
21
|
-
|
|
79
|
+
# Merges this remote into the given (or current) local branch
|
|
80
|
+
#
|
|
81
|
+
# @example Merge origin/main into the current branch
|
|
82
|
+
# git.remote('origin').merge('main')
|
|
83
|
+
#
|
|
84
|
+
# @param branch [String] the local branch to merge into (defaults to current branch)
|
|
85
|
+
#
|
|
86
|
+
# @return [String] git's stdout from the merge
|
|
87
|
+
#
|
|
88
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
89
|
+
#
|
|
90
|
+
def merge(branch = nil)
|
|
91
|
+
branch ||= remote_repository.current_branch
|
|
22
92
|
remote_tracking_branch = "#{@name}/#{branch}"
|
|
23
|
-
|
|
93
|
+
remote_repository.merge(remote_tracking_branch)
|
|
24
94
|
end
|
|
25
95
|
|
|
26
|
-
|
|
96
|
+
# Returns a {Git::Branch} object for the given branch on this remote
|
|
97
|
+
#
|
|
98
|
+
# @example Get the remote-tracking branch object
|
|
99
|
+
# git.remote('origin').branch('main') #=> #<Git::Branch 'origin/main'>
|
|
100
|
+
#
|
|
101
|
+
# @param branch [String] the branch name on this remote (defaults to current branch)
|
|
102
|
+
#
|
|
103
|
+
# @return [Git::Branch] a branch object representing `<remote>/<branch>`
|
|
104
|
+
#
|
|
105
|
+
def branch(branch = nil)
|
|
106
|
+
branch ||= remote_repository.current_branch
|
|
27
107
|
remote_tracking_branch = "#{@name}/#{branch}"
|
|
28
|
-
|
|
108
|
+
branch_info = build_branch_info(remote_tracking_branch)
|
|
109
|
+
Git::Branch.new(@base, branch_info)
|
|
29
110
|
end
|
|
30
111
|
|
|
112
|
+
# Removes this remote from the repository
|
|
113
|
+
#
|
|
114
|
+
# @example Remove the upstream remote
|
|
115
|
+
# git.remote('upstream').remove
|
|
116
|
+
#
|
|
117
|
+
# @return [Git::CommandLineResult] the result of `git remote remove`
|
|
118
|
+
#
|
|
119
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
120
|
+
#
|
|
31
121
|
def remove
|
|
32
|
-
|
|
122
|
+
remote_repository.remove_remote(@name)
|
|
33
123
|
end
|
|
34
124
|
|
|
125
|
+
# Returns the name of this remote as a string
|
|
126
|
+
#
|
|
127
|
+
# @example Get the remote name as a string
|
|
128
|
+
# git.remote('origin').to_s #=> 'origin'
|
|
129
|
+
#
|
|
130
|
+
# @return [String] the remote name
|
|
131
|
+
#
|
|
35
132
|
def to_s
|
|
36
133
|
@name
|
|
37
134
|
end
|
|
135
|
+
|
|
136
|
+
private
|
|
137
|
+
|
|
138
|
+
# Resolves the {Git::Repository} for this remote
|
|
139
|
+
#
|
|
140
|
+
# Accepts either a {Git::Repository} (new form) or a {Git::Base} (legacy).
|
|
141
|
+
# The `is_a?(Git::Base)` guard will be removed when {Git::Base} is deleted
|
|
142
|
+
# in Phase 4.
|
|
143
|
+
#
|
|
144
|
+
# @return [Git::Repository]
|
|
145
|
+
#
|
|
146
|
+
# @api private
|
|
147
|
+
#
|
|
148
|
+
def remote_repository
|
|
149
|
+
@base.is_a?(Git::Base) ? @base.facade_repository : @base
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def build_branch_info(refname)
|
|
153
|
+
Git::BranchInfo.new(
|
|
154
|
+
refname: refname,
|
|
155
|
+
target_oid: nil,
|
|
156
|
+
current: false,
|
|
157
|
+
worktree: false,
|
|
158
|
+
symref: nil,
|
|
159
|
+
upstream: nil
|
|
160
|
+
)
|
|
161
|
+
end
|
|
38
162
|
end
|
|
39
163
|
end
|