git 4.3.2 → 5.0.0.beta.2
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 +73 -2705
- data/.github/prompts/iteratively-address-copilot-reviews.prompt.md +188 -0
- 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/KEYWORD_ARG_REMEDIATION.md +22 -0
- data/.github/skills/extract-facade-from-base-lib/SKILL.md +600 -0
- data/.github/skills/facade-implementation/REFERENCE.md +840 -0
- data/.github/skills/facade-implementation/SKILL.md +274 -0
- data/.github/skills/facade-test-conventions/SKILL.md +394 -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 +12 -3
- data/.rubocop_todo.yml +23 -5
- data/.yardopts +1 -0
- data/CHANGELOG.md +0 -40
- data/CONTRIBUTING.md +694 -53
- data/README.md +67 -15
- data/Rakefile +61 -9
- data/UPGRADING.md +141 -0
- data/commitlint.test +4 -0
- data/git.gemspec +18 -7
- data/lib/git/args_builder.rb +0 -8
- data/lib/git/branch.rb +369 -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 +122 -24
- data/lib/git/command_line/base.rb +255 -0
- data/lib/git/command_line/capturing.rb +251 -0
- data/lib/git/command_line/result.rb +96 -0
- data/lib/git/command_line/streaming.rb +196 -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 +404 -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 +369 -0
- data/lib/git/commands/cat_file/filtered.rb +105 -0
- data/lib/git/commands/cat_file/raw.rb +216 -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 +107 -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 +57 -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 +87 -0
- data/lib/git/config.rb +17 -0
- data/lib/git/config_entry_info.rb +106 -0
- data/lib/git/configuring.rb +665 -0
- data/lib/git/deprecation.rb +9 -0
- data/lib/git/detached_head_info.rb +54 -0
- data/lib/git/diff.rb +293 -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 +67 -19
- data/lib/git/diff_result.rb +32 -0
- data/lib/git/diff_stats.rb +51 -14
- data/lib/git/dirstat_info.rb +86 -0
- data/lib/git/errors.rb +65 -2
- data/lib/git/execution_context/global.rb +31 -0
- data/lib/git/execution_context/repository.rb +136 -0
- data/lib/git/execution_context.rb +501 -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/log.rb +9 -2
- data/lib/git/object.rb +90 -27
- data/lib/git/parsers/branch.rb +224 -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 +585 -0
- data/lib/git/parsers/fsck.rb +133 -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/stash.rb +208 -0
- data/lib/git/parsers/tag.rb +257 -0
- data/lib/git/remote.rb +120 -9
- data/lib/git/repository/branching.rb +743 -0
- data/lib/git/repository/committing.rb +187 -0
- data/lib/git/repository/configuring.rb +351 -0
- data/lib/git/repository/context_helpers.rb +264 -0
- data/lib/git/repository/diffing.rb +775 -0
- data/lib/git/repository/factories.rb +682 -0
- data/lib/git/repository/inspecting.rb +252 -0
- data/lib/git/repository/logging.rb +247 -0
- data/lib/git/repository/maintenance.rb +65 -0
- data/lib/git/repository/merging.rb +357 -0
- data/lib/git/repository/object_operations.rb +1199 -0
- data/lib/git/repository/path_resolver.rb +207 -0
- data/lib/git/repository/remote_operations.rb +898 -0
- data/lib/git/repository/shared_private.rb +51 -0
- data/lib/git/repository/staging.rb +554 -0
- data/lib/git/repository/stashing.rb +143 -0
- data/lib/git/repository/status_operations.rb +201 -0
- data/lib/git/repository/worktree_operations.rb +159 -0
- data/lib/git/repository.rb +203 -1
- data/lib/git/stash.rb +78 -4
- data/lib/git/stash_info.rb +104 -0
- data/lib/git/stashes.rb +125 -13
- data/lib/git/status.rb +215 -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 +108 -6
- data/lib/git/worktrees.rb +94 -7
- data/lib/git.rb +260 -61
- data/redesign/1_architecture_existing.md +54 -18
- data/redesign/2_architecture_redesign.md +365 -46
- data/redesign/3_architecture_implementation.md +1497 -63
- data/redesign/Phase 4 - Step A.md +360 -0
- data/redesign/beta_release.md +107 -0
- data/redesign/c1c2_audit.md +566 -0
- data/redesign/c1c2_bucket6_lib_orphans.md +626 -0
- data/redesign/config_design.rb +501 -0
- 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 +365 -22
- data/lib/git/base.rb +0 -1128
- data/lib/git/index.rb +0 -6
- data/lib/git/lib.rb +0 -2277
- 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,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
# Implements the `git write-tree` command
|
|
8
|
+
#
|
|
9
|
+
# Creates a tree object using the current index and prints the SHA-1 name of
|
|
10
|
+
# the new tree object to standard output. The index must be in a fully
|
|
11
|
+
# merged state.
|
|
12
|
+
#
|
|
13
|
+
# @example Write the current index as a tree object
|
|
14
|
+
# write_tree = Git::Commands::WriteTree.new(execution_context)
|
|
15
|
+
# result = write_tree.call
|
|
16
|
+
# sha = result.stdout # => "abc123..."
|
|
17
|
+
#
|
|
18
|
+
# @example Write only a subdirectory as a tree object
|
|
19
|
+
# write_tree = Git::Commands::WriteTree.new(execution_context)
|
|
20
|
+
# result = write_tree.call(prefix: 'lib/')
|
|
21
|
+
#
|
|
22
|
+
# @example Allow missing objects in the object database
|
|
23
|
+
# write_tree = Git::Commands::WriteTree.new(execution_context)
|
|
24
|
+
# result = write_tree.call(missing_ok: true)
|
|
25
|
+
#
|
|
26
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-write-tree/2.53.0
|
|
27
|
+
#
|
|
28
|
+
# @see https://git-scm.com/docs/git-write-tree git-write-tree
|
|
29
|
+
#
|
|
30
|
+
# @see Git::Commands
|
|
31
|
+
#
|
|
32
|
+
# @api private
|
|
33
|
+
#
|
|
34
|
+
class WriteTree < Git::Commands::Base
|
|
35
|
+
arguments do
|
|
36
|
+
literal 'write-tree'
|
|
37
|
+
flag_option :missing_ok
|
|
38
|
+
value_option :prefix, inline: true
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# @!method call(*, **)
|
|
42
|
+
#
|
|
43
|
+
# @overload call(**options)
|
|
44
|
+
#
|
|
45
|
+
# Execute the `git write-tree` command
|
|
46
|
+
#
|
|
47
|
+
# @param options [Hash] command options
|
|
48
|
+
#
|
|
49
|
+
# @option options [Boolean, nil] :missing_ok (nil) disable the check that
|
|
50
|
+
# all objects referenced by the directory exist in the object
|
|
51
|
+
# database
|
|
52
|
+
#
|
|
53
|
+
# @option options [String] :prefix (nil) write a tree object that
|
|
54
|
+
# represents a subdirectory
|
|
55
|
+
#
|
|
56
|
+
# The prefix path should end with `/` (e.g., `'lib/'`).
|
|
57
|
+
#
|
|
58
|
+
# @return [Git::CommandLineResult] the result of calling `git write-tree`
|
|
59
|
+
#
|
|
60
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
61
|
+
#
|
|
62
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
63
|
+
#
|
|
64
|
+
# @api public
|
|
65
|
+
#
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
data/lib/git/commands.rb
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'commands/base'
|
|
4
|
+
require_relative 'commands/add'
|
|
5
|
+
require_relative 'commands/am'
|
|
6
|
+
require_relative 'commands/apply'
|
|
7
|
+
require_relative 'commands/archive'
|
|
8
|
+
require_relative 'commands/branch'
|
|
9
|
+
require_relative 'commands/cat_file'
|
|
10
|
+
require_relative 'commands/checkout'
|
|
11
|
+
require_relative 'commands/checkout_index'
|
|
12
|
+
require_relative 'commands/clean'
|
|
13
|
+
require_relative 'commands/clone'
|
|
14
|
+
require_relative 'commands/commit'
|
|
15
|
+
require_relative 'commands/commit_tree'
|
|
16
|
+
require_relative 'commands/config_option_syntax'
|
|
17
|
+
require_relative 'commands/describe'
|
|
18
|
+
require_relative 'commands/diff'
|
|
19
|
+
require_relative 'commands/diff_files'
|
|
20
|
+
require_relative 'commands/diff_index'
|
|
21
|
+
require_relative 'commands/fetch'
|
|
22
|
+
require_relative 'commands/fsck'
|
|
23
|
+
require_relative 'commands/gc'
|
|
24
|
+
require_relative 'commands/grep'
|
|
25
|
+
require_relative 'commands/init'
|
|
26
|
+
require_relative 'commands/log'
|
|
27
|
+
require_relative 'commands/ls_files'
|
|
28
|
+
require_relative 'commands/ls_remote'
|
|
29
|
+
require_relative 'commands/ls_tree'
|
|
30
|
+
require_relative 'commands/maintenance'
|
|
31
|
+
require_relative 'commands/merge'
|
|
32
|
+
require_relative 'commands/merge_base'
|
|
33
|
+
require_relative 'commands/mv'
|
|
34
|
+
require_relative 'commands/name_rev'
|
|
35
|
+
require_relative 'commands/pull'
|
|
36
|
+
require_relative 'commands/push'
|
|
37
|
+
require_relative 'commands/read_tree'
|
|
38
|
+
require_relative 'commands/remote'
|
|
39
|
+
require_relative 'commands/repack'
|
|
40
|
+
require_relative 'commands/reset'
|
|
41
|
+
require_relative 'commands/rev_parse'
|
|
42
|
+
require_relative 'commands/revert'
|
|
43
|
+
require_relative 'commands/rm'
|
|
44
|
+
require_relative 'commands/show'
|
|
45
|
+
require_relative 'commands/show_ref'
|
|
46
|
+
require_relative 'commands/stash'
|
|
47
|
+
require_relative 'commands/status'
|
|
48
|
+
require_relative 'commands/symbolic_ref'
|
|
49
|
+
require_relative 'commands/tag'
|
|
50
|
+
require_relative 'commands/update_ref'
|
|
51
|
+
require_relative 'commands/version'
|
|
52
|
+
require_relative 'commands/worktree'
|
|
53
|
+
require_relative 'commands/write_tree'
|
|
54
|
+
|
|
55
|
+
module Git
|
|
56
|
+
# Internal command layer for the git gem
|
|
57
|
+
#
|
|
58
|
+
# Each git operation is represented by a class within this namespace. Command
|
|
59
|
+
# classes define the CLI contract via the {Arguments} DSL, bind caller-supplied
|
|
60
|
+
# parameters to command-line flags and operands, execute the subprocess through
|
|
61
|
+
# {Git::CommandLine}, and return a raw {Git::CommandLineResult}.
|
|
62
|
+
#
|
|
63
|
+
# Commands do **not** parse output — that responsibility belongs to the
|
|
64
|
+
# {Git::Parsers} layer, orchestrated by the facade ({Git::Repository}).
|
|
65
|
+
#
|
|
66
|
+
# All classes in this namespace are internal (`@api private`). End users
|
|
67
|
+
# should interact with the public API on {Git::Repository} instead.
|
|
68
|
+
#
|
|
69
|
+
# ## Architecture
|
|
70
|
+
#
|
|
71
|
+
# ```
|
|
72
|
+
# Git::Repository (public API / facade — orchestrates commands + parsers)
|
|
73
|
+
# └── Git::Commands::* (defines CLI API, binds args, executes)
|
|
74
|
+
# └── Git::CommandLine (subprocess execution)
|
|
75
|
+
# ```
|
|
76
|
+
#
|
|
77
|
+
# Simple commands inherit from {Commands::Base} and only need an `arguments`
|
|
78
|
+
# block. Multi-mode git commands (e.g., `git branch`, `git stash`) are split
|
|
79
|
+
# into namespace modules with one class per mode.
|
|
80
|
+
#
|
|
81
|
+
# @api private
|
|
82
|
+
#
|
|
83
|
+
# @see Git::Commands::Base
|
|
84
|
+
# @see Git::Commands::Arguments
|
|
85
|
+
#
|
|
86
|
+
module Commands; end
|
|
87
|
+
end
|
data/lib/git/config.rb
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
3
3
|
module Git
|
|
4
4
|
# The global configuration for this gem
|
|
5
5
|
class Config
|
|
6
|
+
# Returns the process-wide singleton {Git::Config} instance
|
|
7
|
+
#
|
|
8
|
+
# All calls to {Git.configure}, {Git.config}, and the {Git::ExecutionContext}
|
|
9
|
+
# classes resolve global configuration through this method.
|
|
10
|
+
#
|
|
11
|
+
# @example Read the configured binary path
|
|
12
|
+
# Git::Config.instance.binary_path #=> "git"
|
|
13
|
+
#
|
|
14
|
+
# @example Mutate the singleton (same as Git.configure { |c| ... })
|
|
15
|
+
# Git::Config.instance.binary_path = '/usr/local/bin/git'
|
|
16
|
+
#
|
|
17
|
+
# @return [Git::Config] the singleton config object
|
|
18
|
+
#
|
|
19
|
+
def self.instance
|
|
20
|
+
@instance ||= new
|
|
21
|
+
end
|
|
22
|
+
|
|
6
23
|
attr_writer :binary_path, :git_ssh, :timeout
|
|
7
24
|
|
|
8
25
|
def initialize
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Git
|
|
4
|
+
# Represents a single Git configuration entry
|
|
5
|
+
#
|
|
6
|
+
# Returned by {Git::Configuring} read operations such as {Git::Configuring#config_get},
|
|
7
|
+
# {Git::Configuring#config_get_all}, {Git::Configuring#config_list}, and their
|
|
8
|
+
# related methods.
|
|
9
|
+
#
|
|
10
|
+
# @example Create a ConfigEntryInfo
|
|
11
|
+
# entry = Git::ConfigEntryInfo.new(
|
|
12
|
+
# scope: 'local',
|
|
13
|
+
# origin: 'file:.git/config',
|
|
14
|
+
# key: 'remote.origin.url',
|
|
15
|
+
# value: 'https://github.com/ruby-git/ruby-git'
|
|
16
|
+
# )
|
|
17
|
+
# entry.section # => "remote"
|
|
18
|
+
# entry.subsection # => "origin"
|
|
19
|
+
# entry.variable # => "url"
|
|
20
|
+
#
|
|
21
|
+
# @api public
|
|
22
|
+
#
|
|
23
|
+
# @!attribute [r] scope
|
|
24
|
+
#
|
|
25
|
+
# The scope of the configuration entry
|
|
26
|
+
#
|
|
27
|
+
# May be one of `"system"`, `"global"`, `"local"`, `"worktree"`, `"command"`,
|
|
28
|
+
# `"file"`, or `"blob"`. The `"command"` scope is used for values supplied
|
|
29
|
+
# via the command line (including default values from `--default`).
|
|
30
|
+
#
|
|
31
|
+
# @return [String] the config scope string (e.g. `"local"`, `"global"`)
|
|
32
|
+
#
|
|
33
|
+
# @!attribute [r] origin
|
|
34
|
+
#
|
|
35
|
+
# Where the configuration entry originates
|
|
36
|
+
#
|
|
37
|
+
# The origin is in the format `<origin-type>:<actual-origin>` and is never
|
|
38
|
+
# blank. The origin type prefix is one of `file:`, `blob:`, `command line:`,
|
|
39
|
+
# or `standard input:`.
|
|
40
|
+
#
|
|
41
|
+
# `nil` when the git command used to retrieve this entry does not support
|
|
42
|
+
# `--show-origin` (currently only `--get-urlmatch`).
|
|
43
|
+
#
|
|
44
|
+
# @return [String, nil] the origin path in the format `<type>:<path>`, or `nil`
|
|
45
|
+
#
|
|
46
|
+
# @!attribute [r] key
|
|
47
|
+
#
|
|
48
|
+
# The full dotted key name of the configuration entry (e.g., `remote.origin.url`)
|
|
49
|
+
#
|
|
50
|
+
# @return [String] the full dotted key name (e.g. `remote.origin.url`)
|
|
51
|
+
#
|
|
52
|
+
# @!attribute [r] value
|
|
53
|
+
#
|
|
54
|
+
# The value of the configuration entry
|
|
55
|
+
#
|
|
56
|
+
# @return [String] the string value of this entry
|
|
57
|
+
#
|
|
58
|
+
ConfigEntryInfo = Data.define(:scope, :origin, :key, :value) do
|
|
59
|
+
# Returns the section component of the key (everything before the first dot)
|
|
60
|
+
#
|
|
61
|
+
# Returns an empty string when the key contains no dot.
|
|
62
|
+
#
|
|
63
|
+
# @example Section component of a dotted key
|
|
64
|
+
# entry.section # => "remote"
|
|
65
|
+
#
|
|
66
|
+
# @return [String] the section name, or an empty string when the key has no dot
|
|
67
|
+
#
|
|
68
|
+
def section = first_dot ? key[0...first_dot] : ''
|
|
69
|
+
|
|
70
|
+
# Returns the subsection component of the key (everything between the first and last dot)
|
|
71
|
+
#
|
|
72
|
+
# Returns an empty string when the key has zero or one dot (no subsection).
|
|
73
|
+
#
|
|
74
|
+
# @example Subsection component of a dotted key
|
|
75
|
+
# entry.subsection # => "origin"
|
|
76
|
+
#
|
|
77
|
+
# @return [String] the subsection name, or an empty string when there is no subsection
|
|
78
|
+
#
|
|
79
|
+
def subsection = first_dot && first_dot != last_dot ? key[(first_dot + 1)...last_dot] : ''
|
|
80
|
+
|
|
81
|
+
# Returns the variable component of the key (everything after the last dot)
|
|
82
|
+
#
|
|
83
|
+
# Returns the full key when the key contains no dot.
|
|
84
|
+
#
|
|
85
|
+
# @example Variable component of a dotted key
|
|
86
|
+
# entry.variable # => "url"
|
|
87
|
+
#
|
|
88
|
+
# @return [String] the variable name (everything after the last dot)
|
|
89
|
+
#
|
|
90
|
+
def variable = last_dot ? key[(last_dot + 1)..] : key
|
|
91
|
+
|
|
92
|
+
private
|
|
93
|
+
|
|
94
|
+
# Returns the index of the first dot in the key, or nil if none exists
|
|
95
|
+
#
|
|
96
|
+
# @return [Integer, nil] the zero-based index of the first dot, or `nil`
|
|
97
|
+
#
|
|
98
|
+
def first_dot = key.index('.')
|
|
99
|
+
|
|
100
|
+
# Returns the index of the last dot in the key, or nil if none exists
|
|
101
|
+
#
|
|
102
|
+
# @return [Integer, nil] the zero-based index of the last dot, or `nil`
|
|
103
|
+
#
|
|
104
|
+
def last_dot = key.rindex('.')
|
|
105
|
+
end
|
|
106
|
+
end
|