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.
Files changed (280) hide show
  1. checksums.yaml +4 -4
  2. data/.github/copilot-instructions.md +67 -2705
  3. data/.github/pull_request_template.md +3 -1
  4. data/.github/skills/breaking-change-analysis/SKILL.md +102 -0
  5. data/.github/skills/ci-cd-troubleshooting/SKILL.md +264 -0
  6. data/.github/skills/command-implementation/REFERENCE.md +993 -0
  7. data/.github/skills/command-implementation/SKILL.md +229 -0
  8. data/.github/skills/command-test-conventions/SKILL.md +660 -0
  9. data/.github/skills/command-yard-documentation/SKILL.md +426 -0
  10. data/.github/skills/dependency-management/SKILL.md +72 -0
  11. data/.github/skills/development-workflow/SKILL.md +506 -0
  12. data/.github/skills/extract-command-from-lib/SKILL.md +487 -0
  13. data/.github/skills/extract-facade-from-base-lib/SKILL.md +586 -0
  14. data/.github/skills/facade-implementation/REFERENCE.md +840 -0
  15. data/.github/skills/facade-implementation/SKILL.md +260 -0
  16. data/.github/skills/facade-test-conventions/SKILL.md +380 -0
  17. data/.github/skills/facade-yard-documentation/SKILL.md +429 -0
  18. data/.github/skills/make-skill-template/SKILL.md +176 -0
  19. data/.github/skills/pr-readiness-review/SKILL.md +185 -0
  20. data/.github/skills/project-context/SKILL.md +313 -0
  21. data/.github/skills/pull-request-review/SKILL.md +168 -0
  22. data/.github/skills/refactor-command-to-commandlineresult/SKILL.md +131 -0
  23. data/.github/skills/release-management/SKILL.md +125 -0
  24. data/.github/skills/review-arguments-dsl/CHECKLIST.md +788 -0
  25. data/.github/skills/review-arguments-dsl/SKILL.md +214 -0
  26. data/.github/skills/review-backward-compatibility/SKILL.md +275 -0
  27. data/.github/skills/review-cross-command-consistency/SKILL.md +139 -0
  28. data/.github/skills/reviewing-skills/SKILL.md +189 -0
  29. data/.github/skills/rspec-unit-testing-standards/SKILL.md +639 -0
  30. data/.github/skills/tdd-refactor-step/SKILL.md +236 -0
  31. data/.github/skills/test-debugging/SKILL.md +160 -0
  32. data/.github/skills/yard-documentation/SKILL.md +793 -0
  33. data/.github/workflows/continuous_integration.yml +3 -2
  34. data/.github/workflows/enforce_conventional_commits.yml +1 -1
  35. data/.github/workflows/experimental_continuous_integration.yml +2 -2
  36. data/.github/workflows/release.yml +3 -4
  37. data/.gitignore +8 -0
  38. data/.husky/pre-commit +13 -0
  39. data/.release-please-manifest.json +1 -1
  40. data/.rspec +3 -0
  41. data/.rubocop.yml +7 -3
  42. data/.rubocop_todo.yml +23 -5
  43. data/.yardopts +1 -0
  44. data/CHANGELOG.md +0 -40
  45. data/CONTRIBUTING.md +694 -53
  46. data/README.md +17 -5
  47. data/Rakefile +61 -9
  48. data/commitlint.test +4 -0
  49. data/git.gemspec +14 -8
  50. data/lib/git/args_builder.rb +0 -8
  51. data/lib/git/base.rb +486 -410
  52. data/lib/git/branch.rb +380 -43
  53. data/lib/git/branch_delete_failure.rb +31 -0
  54. data/lib/git/branch_delete_result.rb +63 -0
  55. data/lib/git/branch_info.rb +178 -0
  56. data/lib/git/branches.rb +130 -24
  57. data/lib/git/command_line/base.rb +245 -0
  58. data/lib/git/command_line/capturing.rb +249 -0
  59. data/lib/git/command_line/result.rb +96 -0
  60. data/lib/git/command_line/streaming.rb +194 -0
  61. data/lib/git/command_line.rb +43 -322
  62. data/lib/git/command_line_result.rb +4 -88
  63. data/lib/git/commands/add.rb +131 -0
  64. data/lib/git/commands/am/abort.rb +43 -0
  65. data/lib/git/commands/am/apply.rb +252 -0
  66. data/lib/git/commands/am/continue.rb +43 -0
  67. data/lib/git/commands/am/quit.rb +43 -0
  68. data/lib/git/commands/am/retry.rb +47 -0
  69. data/lib/git/commands/am/show_current_patch.rb +64 -0
  70. data/lib/git/commands/am/skip.rb +42 -0
  71. data/lib/git/commands/am.rb +33 -0
  72. data/lib/git/commands/apply.rb +237 -0
  73. data/lib/git/commands/archive/list_formats.rb +46 -0
  74. data/lib/git/commands/archive.rb +140 -0
  75. data/lib/git/commands/arguments.rb +3510 -0
  76. data/lib/git/commands/base.rb +403 -0
  77. data/lib/git/commands/branch/copy.rb +94 -0
  78. data/lib/git/commands/branch/create.rb +173 -0
  79. data/lib/git/commands/branch/delete.rb +80 -0
  80. data/lib/git/commands/branch/list.rb +162 -0
  81. data/lib/git/commands/branch/move.rb +94 -0
  82. data/lib/git/commands/branch/set_upstream.rb +86 -0
  83. data/lib/git/commands/branch/show_current.rb +49 -0
  84. data/lib/git/commands/branch/unset_upstream.rb +57 -0
  85. data/lib/git/commands/branch.rb +34 -0
  86. data/lib/git/commands/cat_file/batch.rb +364 -0
  87. data/lib/git/commands/cat_file/filtered.rb +105 -0
  88. data/lib/git/commands/cat_file/raw.rb +210 -0
  89. data/lib/git/commands/cat_file.rb +49 -0
  90. data/lib/git/commands/checkout/branch.rb +151 -0
  91. data/lib/git/commands/checkout/files.rb +115 -0
  92. data/lib/git/commands/checkout.rb +38 -0
  93. data/lib/git/commands/checkout_index.rb +105 -0
  94. data/lib/git/commands/clean.rb +100 -0
  95. data/lib/git/commands/clone.rb +240 -0
  96. data/lib/git/commands/commit.rb +272 -0
  97. data/lib/git/commands/commit_tree.rb +100 -0
  98. data/lib/git/commands/config_option_syntax/add.rb +83 -0
  99. data/lib/git/commands/config_option_syntax/get.rb +117 -0
  100. data/lib/git/commands/config_option_syntax/get_all.rb +115 -0
  101. data/lib/git/commands/config_option_syntax/get_color.rb +91 -0
  102. data/lib/git/commands/config_option_syntax/get_color_bool.rb +93 -0
  103. data/lib/git/commands/config_option_syntax/get_regexp.rb +115 -0
  104. data/lib/git/commands/config_option_syntax/get_urlmatch.rb +102 -0
  105. data/lib/git/commands/config_option_syntax/list.rb +107 -0
  106. data/lib/git/commands/config_option_syntax/remove_section.rb +74 -0
  107. data/lib/git/commands/config_option_syntax/rename_section.rb +78 -0
  108. data/lib/git/commands/config_option_syntax/replace_all.rb +104 -0
  109. data/lib/git/commands/config_option_syntax/set.rb +114 -0
  110. data/lib/git/commands/config_option_syntax/unset.rb +89 -0
  111. data/lib/git/commands/config_option_syntax/unset_all.rb +89 -0
  112. data/lib/git/commands/config_option_syntax.rb +56 -0
  113. data/lib/git/commands/describe.rb +155 -0
  114. data/lib/git/commands/diff.rb +656 -0
  115. data/lib/git/commands/diff_files.rb +518 -0
  116. data/lib/git/commands/diff_index.rb +496 -0
  117. data/lib/git/commands/fetch.rb +352 -0
  118. data/lib/git/commands/fsck.rb +136 -0
  119. data/lib/git/commands/gc.rb +132 -0
  120. data/lib/git/commands/grep.rb +338 -0
  121. data/lib/git/commands/init.rb +99 -0
  122. data/lib/git/commands/log.rb +632 -0
  123. data/lib/git/commands/ls_files.rb +191 -0
  124. data/lib/git/commands/ls_remote.rb +155 -0
  125. data/lib/git/commands/ls_tree.rb +131 -0
  126. data/lib/git/commands/maintenance/register.rb +75 -0
  127. data/lib/git/commands/maintenance/run.rb +104 -0
  128. data/lib/git/commands/maintenance/start.rb +66 -0
  129. data/lib/git/commands/maintenance/stop.rb +55 -0
  130. data/lib/git/commands/maintenance/unregister.rb +79 -0
  131. data/lib/git/commands/maintenance.rb +31 -0
  132. data/lib/git/commands/merge/abort.rb +44 -0
  133. data/lib/git/commands/merge/continue.rb +44 -0
  134. data/lib/git/commands/merge/quit.rb +46 -0
  135. data/lib/git/commands/merge/start.rb +245 -0
  136. data/lib/git/commands/merge.rb +28 -0
  137. data/lib/git/commands/merge_base.rb +86 -0
  138. data/lib/git/commands/mv.rb +77 -0
  139. data/lib/git/commands/name_rev.rb +114 -0
  140. data/lib/git/commands/pull.rb +377 -0
  141. data/lib/git/commands/push.rb +246 -0
  142. data/lib/git/commands/read_tree.rb +149 -0
  143. data/lib/git/commands/remote/add.rb +91 -0
  144. data/lib/git/commands/remote/get_url.rb +66 -0
  145. data/lib/git/commands/remote/list.rb +54 -0
  146. data/lib/git/commands/remote/prune.rb +61 -0
  147. data/lib/git/commands/remote/remove.rb +52 -0
  148. data/lib/git/commands/remote/rename.rb +69 -0
  149. data/lib/git/commands/remote/set_branches.rb +63 -0
  150. data/lib/git/commands/remote/set_head.rb +82 -0
  151. data/lib/git/commands/remote/set_url.rb +71 -0
  152. data/lib/git/commands/remote/set_url_add.rb +61 -0
  153. data/lib/git/commands/remote/set_url_delete.rb +64 -0
  154. data/lib/git/commands/remote/show.rb +71 -0
  155. data/lib/git/commands/remote/update.rb +72 -0
  156. data/lib/git/commands/remote.rb +42 -0
  157. data/lib/git/commands/repack.rb +277 -0
  158. data/lib/git/commands/reset.rb +147 -0
  159. data/lib/git/commands/rev_parse.rb +297 -0
  160. data/lib/git/commands/revert/abort.rb +45 -0
  161. data/lib/git/commands/revert/continue.rb +57 -0
  162. data/lib/git/commands/revert/quit.rb +47 -0
  163. data/lib/git/commands/revert/skip.rb +44 -0
  164. data/lib/git/commands/revert/start.rb +153 -0
  165. data/lib/git/commands/revert.rb +29 -0
  166. data/lib/git/commands/rm.rb +114 -0
  167. data/lib/git/commands/show.rb +632 -0
  168. data/lib/git/commands/show_ref/exclude_existing.rb +120 -0
  169. data/lib/git/commands/show_ref/exists.rb +78 -0
  170. data/lib/git/commands/show_ref/list.rb +145 -0
  171. data/lib/git/commands/show_ref/verify.rb +120 -0
  172. data/lib/git/commands/show_ref.rb +42 -0
  173. data/lib/git/commands/stash/apply.rb +75 -0
  174. data/lib/git/commands/stash/branch.rb +65 -0
  175. data/lib/git/commands/stash/clear.rb +41 -0
  176. data/lib/git/commands/stash/create.rb +58 -0
  177. data/lib/git/commands/stash/drop.rb +67 -0
  178. data/lib/git/commands/stash/list.rb +39 -0
  179. data/lib/git/commands/stash/pop.rb +78 -0
  180. data/lib/git/commands/stash/push.rb +103 -0
  181. data/lib/git/commands/stash/show.rb +149 -0
  182. data/lib/git/commands/stash/store.rb +63 -0
  183. data/lib/git/commands/stash.rb +38 -0
  184. data/lib/git/commands/status.rb +169 -0
  185. data/lib/git/commands/symbolic_ref/delete.rb +68 -0
  186. data/lib/git/commands/symbolic_ref/read.rb +95 -0
  187. data/lib/git/commands/symbolic_ref/update.rb +76 -0
  188. data/lib/git/commands/symbolic_ref.rb +38 -0
  189. data/lib/git/commands/tag/create.rb +139 -0
  190. data/lib/git/commands/tag/delete.rb +55 -0
  191. data/lib/git/commands/tag/list.rb +143 -0
  192. data/lib/git/commands/tag/verify.rb +71 -0
  193. data/lib/git/commands/tag.rb +26 -0
  194. data/lib/git/commands/update_ref/batch.rb +140 -0
  195. data/lib/git/commands/update_ref/delete.rb +92 -0
  196. data/lib/git/commands/update_ref/update.rb +106 -0
  197. data/lib/git/commands/update_ref.rb +42 -0
  198. data/lib/git/commands/version.rb +52 -0
  199. data/lib/git/commands/worktree/add.rb +140 -0
  200. data/lib/git/commands/worktree/list.rb +64 -0
  201. data/lib/git/commands/worktree/lock.rb +58 -0
  202. data/lib/git/commands/worktree/management_base.rb +51 -0
  203. data/lib/git/commands/worktree/move.rb +66 -0
  204. data/lib/git/commands/worktree/prune.rb +67 -0
  205. data/lib/git/commands/worktree/remove.rb +63 -0
  206. data/lib/git/commands/worktree/repair.rb +76 -0
  207. data/lib/git/commands/worktree/unlock.rb +47 -0
  208. data/lib/git/commands/worktree.rb +43 -0
  209. data/lib/git/commands/write_tree.rb +68 -0
  210. data/lib/git/commands.rb +89 -0
  211. data/lib/git/detached_head_info.rb +54 -0
  212. data/lib/git/diff.rb +297 -7
  213. data/lib/git/diff_file_numstat_info.rb +29 -0
  214. data/lib/git/diff_file_patch_info.rb +134 -0
  215. data/lib/git/diff_file_raw_info.rb +127 -0
  216. data/lib/git/diff_info.rb +169 -0
  217. data/lib/git/diff_path_status.rb +78 -19
  218. data/lib/git/diff_result.rb +32 -0
  219. data/lib/git/diff_stats.rb +59 -14
  220. data/lib/git/dirstat_info.rb +86 -0
  221. data/lib/git/errors.rb +65 -2
  222. data/lib/git/execution_context/global.rb +56 -0
  223. data/lib/git/execution_context/repository.rb +147 -0
  224. data/lib/git/execution_context.rb +482 -0
  225. data/lib/git/file_ref.rb +74 -0
  226. data/lib/git/fsck_object.rb +9 -9
  227. data/lib/git/fsck_result.rb +1 -1
  228. data/lib/git/lib.rb +1606 -1028
  229. data/lib/git/log.rb +15 -2
  230. data/lib/git/object.rb +92 -22
  231. data/lib/git/parsers/branch.rb +224 -0
  232. data/lib/git/parsers/cat_file.rb +111 -0
  233. data/lib/git/parsers/diff.rb +585 -0
  234. data/lib/git/parsers/fsck.rb +133 -0
  235. data/lib/git/parsers/grep.rb +42 -0
  236. data/lib/git/parsers/ls_tree.rb +58 -0
  237. data/lib/git/parsers/stash.rb +208 -0
  238. data/lib/git/parsers/tag.rb +257 -0
  239. data/lib/git/remote.rb +133 -9
  240. data/lib/git/repository/branching.rb +572 -0
  241. data/lib/git/repository/committing.rb +191 -0
  242. data/lib/git/repository/configuring.rb +156 -0
  243. data/lib/git/repository/diffing.rb +775 -0
  244. data/lib/git/repository/inspecting.rb +153 -0
  245. data/lib/git/repository/logging.rb +247 -0
  246. data/lib/git/repository/merging.rb +295 -0
  247. data/lib/git/repository/object_operations.rb +1101 -0
  248. data/lib/git/repository/path_resolver.rb +207 -0
  249. data/lib/git/repository/remote_operations.rb +753 -0
  250. data/lib/git/repository/shared_private.rb +51 -0
  251. data/lib/git/repository/staging.rb +390 -0
  252. data/lib/git/repository/stashing.rb +107 -0
  253. data/lib/git/repository/status_operations.rb +180 -0
  254. data/lib/git/repository/worktree_operations.rb +159 -0
  255. data/lib/git/repository.rb +264 -1
  256. data/lib/git/stash.rb +85 -4
  257. data/lib/git/stash_info.rb +104 -0
  258. data/lib/git/stashes.rb +130 -13
  259. data/lib/git/status.rb +224 -18
  260. data/lib/git/tag_delete_failure.rb +31 -0
  261. data/lib/git/tag_delete_result.rb +63 -0
  262. data/lib/git/tag_info.rb +105 -0
  263. data/lib/git/version.rb +109 -2
  264. data/lib/git/version_constraint.rb +81 -0
  265. data/lib/git/worktree.rb +120 -5
  266. data/lib/git/worktrees.rb +107 -7
  267. data/lib/git.rb +114 -18
  268. data/redesign/1_architecture_existing.md +54 -18
  269. data/redesign/2_architecture_redesign.md +365 -46
  270. data/redesign/3_architecture_implementation.md +1451 -54
  271. data/tasks/gem_tasks.rake +4 -0
  272. data/tasks/npm_tasks.rake +7 -0
  273. data/tasks/rspec.rake +48 -0
  274. data/tasks/test.rake +13 -1
  275. data/tasks/yard.rake +34 -7
  276. metadata +349 -20
  277. data/lib/git/index.rb +0 -6
  278. data/lib/git/path.rb +0 -38
  279. data/lib/git/working_directory.rb +0 -6
  280. /data/{release-please-config.json → .release-please-config.json} +0 -0
@@ -0,0 +1,117 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Retrieve a single config value by exact key name
9
+ #
10
+ # Wraps `git config --get` to return the value of the last-matching
11
+ # config entry for the given key name.
12
+ #
13
+ # @example Get a local config value
14
+ # cmd = Git::Commands::ConfigOptionSyntax::Get.new(lib)
15
+ # cmd.call('user.name')
16
+ #
17
+ # @example Get a global config value
18
+ # cmd = Git::Commands::ConfigOptionSyntax::Get.new(lib)
19
+ # cmd.call('user.name', global: true)
20
+ #
21
+ # @example Get a value with a type constraint
22
+ # cmd = Git::Commands::ConfigOptionSyntax::Get.new(lib)
23
+ # cmd.call('core.bare', type: 'bool')
24
+ #
25
+ # @note `arguments` block audited against https://git-scm.com/docs/git-config/2.53.0
26
+ #
27
+ # @see Git::Commands::ConfigOptionSyntax
28
+ #
29
+ # @see https://git-scm.com/docs/git-config git-config documentation
30
+ #
31
+ # @api private
32
+ class Get < Git::Commands::Base
33
+ arguments do
34
+ literal 'config'
35
+ literal '--get'
36
+
37
+ # File-scope options
38
+ flag_option :global
39
+ flag_option :system
40
+ flag_option :local
41
+ flag_option :worktree
42
+ value_option %i[file f]
43
+ value_option :blob
44
+
45
+ # General read options
46
+ flag_option :includes, negatable: true
47
+
48
+ # Type constraint
49
+ value_option :type, inline: true
50
+
51
+ # Output modifiers
52
+ flag_option :show_origin
53
+ flag_option :show_scope
54
+ flag_option %i[null z]
55
+ value_option :default
56
+
57
+ # Operands
58
+ end_of_options
59
+ operand :name, required: true
60
+ operand :value_regex
61
+ end
62
+
63
+ # git config --get exits 1 when the key is not found (not an error)
64
+ allow_exit_status 0..1
65
+
66
+ # @!method call(*, **)
67
+ #
68
+ # @overload call(name, value_regex = nil, **options)
69
+ #
70
+ # Execute the `git config --get` command
71
+ #
72
+ # @param name [String] the config key name to look up
73
+ #
74
+ # @param value_regex [String, nil] (nil) optional regex to filter the value
75
+ #
76
+ # @param options [Hash] command options
77
+ #
78
+ # @option options [Boolean, nil] :global (nil) read from global config (`~/.gitconfig`)
79
+ #
80
+ # @option options [Boolean, nil] :system (nil) read from system config
81
+ #
82
+ # @option options [Boolean, nil] :local (nil) read from repository config (`.git/config`)
83
+ #
84
+ # @option options [Boolean, nil] :worktree (nil) read from worktree config
85
+ #
86
+ # @option options [String] :file (nil) read from the specified file
87
+ #
88
+ # Alias: :f
89
+ #
90
+ # @option options [String] :blob (nil) read from the specified blob
91
+ #
92
+ # @option options [Boolean, nil] :includes (nil) respect include directives in config files (`--includes`)
93
+ #
94
+ # @option options [Boolean, nil] :no_includes (nil) do not respect include directives
95
+ # in config files (`--no-includes`)
96
+ #
97
+ # @option options [String] :type (nil) ensure the value conforms to the given type
98
+ #
99
+ # @option options [Boolean, nil] :show_origin (nil) show the origin of the config value
100
+ #
101
+ # @option options [Boolean, nil] :show_scope (nil) show the scope of the config value
102
+ #
103
+ # @option options [Boolean, nil] :null (nil) terminate values with NUL byte instead of newline
104
+ #
105
+ # Alias: :z
106
+ #
107
+ # @option options [String] :default (nil) default value when the key is not found
108
+ #
109
+ # @return [Git::CommandLineResult] the result of calling `git config --get`
110
+ #
111
+ # @raise [ArgumentError] if unsupported options are provided
112
+ #
113
+ # @raise [Git::FailedError] if git exits outside the allowed status range (0..1)
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Retrieve all values for a multi-valued config key
9
+ #
10
+ # Wraps `git config --get-all` to return all values matching the given
11
+ # key name, one per line.
12
+ #
13
+ # @example Get all values for a key
14
+ # cmd = Git::Commands::ConfigOptionSyntax::GetAll.new(lib)
15
+ # cmd.call('remote.origin.fetch')
16
+ #
17
+ # @example Get all values with a value pattern
18
+ # cmd = Git::Commands::ConfigOptionSyntax::GetAll.new(lib)
19
+ # cmd.call('remote.origin.fetch', '\\+refs/heads/.*')
20
+ #
21
+ # @note `arguments` block audited against https://git-scm.com/docs/git-config/2.53.0
22
+ #
23
+ # @see Git::Commands::ConfigOptionSyntax
24
+ #
25
+ # @see https://git-scm.com/docs/git-config git-config documentation
26
+ #
27
+ # @api private
28
+ class GetAll < Git::Commands::Base
29
+ arguments do
30
+ literal 'config'
31
+ literal '--get-all'
32
+
33
+ # File-scope options
34
+ flag_option :global
35
+ flag_option :system
36
+ flag_option :local
37
+ flag_option :worktree
38
+ value_option %i[file f]
39
+ value_option :blob
40
+
41
+ # General read options
42
+ flag_option :includes, negatable: true
43
+
44
+ # Type constraint
45
+ value_option :type, inline: true
46
+ flag_option :no_type
47
+
48
+ # Output modifiers
49
+ flag_option :show_origin
50
+ flag_option :show_scope
51
+ flag_option %i[null z]
52
+
53
+ # Operands
54
+ end_of_options
55
+ operand :name, required: true
56
+ operand :value_regex
57
+ end
58
+
59
+ # git config --get-all exits 1 when the key is not found (not an error)
60
+ allow_exit_status 0..1
61
+
62
+ # @!method call(*, **)
63
+ #
64
+ # @overload call(name, value_regex = nil, **options)
65
+ #
66
+ # Execute the `git config --get-all` command
67
+ #
68
+ # @param name [String] the config key name to look up
69
+ #
70
+ # @param value_regex [String, nil] (nil) optional regex to filter values
71
+ #
72
+ # @param options [Hash] command options
73
+ #
74
+ # @option options [Boolean, nil] :global (nil) read from global config (`~/.gitconfig`)
75
+ #
76
+ # @option options [Boolean, nil] :system (nil) read from system config
77
+ #
78
+ # @option options [Boolean, nil] :local (nil) read from repository config (`.git/config`)
79
+ #
80
+ # @option options [Boolean, nil] :worktree (nil) read from worktree config
81
+ #
82
+ # @option options [String] :file (nil) read from the specified file
83
+ #
84
+ # Alias: :f
85
+ #
86
+ # @option options [String] :blob (nil) read from the specified blob
87
+ #
88
+ # @option options [Boolean, nil] :includes (nil) follow include directives in config files
89
+ # (`--includes`)
90
+ #
91
+ # @option options [Boolean, nil] :no_includes (nil) suppress include directive processing
92
+ # (`--no-includes`)
93
+ #
94
+ # @option options [String] :type (nil) ensure values conform to the given type
95
+ #
96
+ # @option options [Boolean, nil] :no_type (nil) unset the previously set type specifier;
97
+ # `true` emits `--no-type`
98
+ #
99
+ # @option options [Boolean, nil] :show_origin (nil) show the origin of each config value
100
+ #
101
+ # @option options [Boolean, nil] :show_scope (nil) show the scope of each config value
102
+ #
103
+ # @option options [Boolean, nil] :null (nil) terminate values with NUL byte instead of newline
104
+ #
105
+ # Alias: :z
106
+ #
107
+ # @return [Git::CommandLineResult] the result of calling `git config --get-all`
108
+ #
109
+ # @raise [ArgumentError] if unsupported options are provided
110
+ #
111
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 1)
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Retrieve an ANSI color string from config
9
+ #
10
+ # Wraps `git config --get-color` to look up a color configuration
11
+ # and output the ANSI escape sequence for that color.
12
+ #
13
+ # @example Get a color config value
14
+ # cmd = Git::Commands::ConfigOptionSyntax::GetColor.new(lib)
15
+ # cmd.call('color.diff.new')
16
+ #
17
+ # @example Get a color config value with a default
18
+ # cmd = Git::Commands::ConfigOptionSyntax::GetColor.new(lib)
19
+ # cmd.call('color.diff.new', 'green')
20
+ #
21
+ # @note `arguments` block audited against https://git-scm.com/docs/git-config/2.53.0
22
+ #
23
+ # @see Git::Commands::ConfigOptionSyntax
24
+ #
25
+ # @see https://git-scm.com/docs/git-config git-config documentation
26
+ #
27
+ # @api private
28
+ #
29
+ class GetColor < Git::Commands::Base
30
+ arguments do
31
+ literal 'config'
32
+ literal '--get-color'
33
+
34
+ # File-scope options
35
+ flag_option :global
36
+ flag_option :system
37
+ flag_option :local
38
+ flag_option :worktree
39
+ value_option %i[file f]
40
+ value_option :blob
41
+
42
+ # General read options
43
+ flag_option :includes, negatable: true
44
+
45
+ # Operands
46
+ end_of_options
47
+ operand :name, required: true
48
+ operand :default
49
+ end
50
+
51
+ # @!method call(*, **)
52
+ #
53
+ # @overload call(name, default = nil, **options)
54
+ #
55
+ # Execute the `git config --get-color` command
56
+ #
57
+ # @param name [String] the color config key name to look up
58
+ #
59
+ # @param default [String, nil] (nil) fallback color when the key is not set
60
+ #
61
+ # @param options [Hash] command options
62
+ #
63
+ # @option options [Boolean, nil] :global (nil) read from global config (`~/.gitconfig`)
64
+ #
65
+ # @option options [Boolean, nil] :system (nil) read from system config
66
+ #
67
+ # @option options [Boolean, nil] :local (nil) read from repository config (`.git/config`)
68
+ #
69
+ # @option options [Boolean, nil] :worktree (nil) read from worktree config
70
+ #
71
+ # @option options [String] :file (nil) read from the specified file
72
+ #
73
+ # Alias: :f
74
+ #
75
+ # @option options [String] :blob (nil) read from the specified blob
76
+ #
77
+ # @option options [Boolean, nil] :includes (nil) respect include directives in config files
78
+ # (`--includes`)
79
+ #
80
+ # @option options [Boolean, nil] :no_includes (nil) suppress include directive processing
81
+ # (`--no-includes`)
82
+ #
83
+ # @return [Git::CommandLineResult] the result of calling `git config --get-color`
84
+ #
85
+ # @raise [ArgumentError] if unsupported options are provided
86
+ #
87
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Query whether color output is enabled for a config key
9
+ #
10
+ # Wraps `git config --get-colorbool` to check whether color output
11
+ # should be used. This command has no subcommand equivalent even in
12
+ # git 2.46.0 — it exists only in the option-syntax interface.
13
+ #
14
+ # @example Query whether color is enabled for diff
15
+ # cmd = Git::Commands::ConfigOptionSyntax::GetColorBool.new(lib)
16
+ # cmd.call('color.diff')
17
+ #
18
+ # @example Query with explicit stdout-is-tty hint
19
+ # cmd = Git::Commands::ConfigOptionSyntax::GetColorBool.new(lib)
20
+ # cmd.call('color.diff', 'true')
21
+ #
22
+ # @note `arguments` block audited against https://git-scm.com/docs/git-config/2.53.0
23
+ #
24
+ # @see Git::Commands::ConfigOptionSyntax
25
+ #
26
+ # @see https://git-scm.com/docs/git-config git-config documentation
27
+ #
28
+ # @api private
29
+ #
30
+ class GetColorBool < Git::Commands::Base
31
+ arguments do
32
+ literal 'config'
33
+ literal '--get-colorbool'
34
+
35
+ # File-scope options
36
+ flag_option :global
37
+ flag_option :system
38
+ flag_option :local
39
+ flag_option :worktree
40
+ value_option %i[file f]
41
+ value_option :blob
42
+
43
+ # General read options
44
+ flag_option :includes, negatable: true
45
+
46
+ # Operands
47
+ end_of_options
48
+ operand :name, required: true
49
+ operand :stdout_is_tty
50
+ end
51
+
52
+ # git config --get-colorbool exits 0 for color=yes, 1 for color=no
53
+ allow_exit_status 0..1
54
+
55
+ # @!method call(*, **)
56
+ #
57
+ # @overload call(name, stdout_is_tty = nil, **options)
58
+ #
59
+ # Execute the `git config --get-colorbool` command
60
+ #
61
+ # @param name [String] the color config key name to query
62
+ #
63
+ # @param stdout_is_tty [String, nil] (nil) hint whether stdout is a TTY (`"true"` or `"false"`)
64
+ #
65
+ # @param options [Hash] command options
66
+ #
67
+ # @option options [Boolean, nil] :global (nil) read from global config (`~/.gitconfig`)
68
+ #
69
+ # @option options [Boolean, nil] :system (nil) read from system config
70
+ #
71
+ # @option options [Boolean, nil] :local (nil) read from repository config (`.git/config`)
72
+ #
73
+ # @option options [Boolean, nil] :worktree (nil) read from worktree config
74
+ #
75
+ # @option options [String] :file (nil) read from the specified file
76
+ #
77
+ # Alias: :f
78
+ #
79
+ # @option options [String] :blob (nil) read from the specified blob
80
+ #
81
+ # @option options [Boolean, nil] :includes (nil) respect include directives in config files (`--includes`)
82
+ #
83
+ # @option options [Boolean, nil] :no_includes (nil) disable include directive processing (`--no-includes`)
84
+ #
85
+ # @return [Git::CommandLineResult] the result of calling `git config --get-colorbool`
86
+ #
87
+ # @raise [ArgumentError] if unsupported options are provided
88
+ #
89
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 1)
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Retrieve config entries matching a name regex
9
+ #
10
+ # Wraps `git config --get-regexp` to return all config entries whose
11
+ # key name matches the given regular expression.
12
+ #
13
+ # @example Get all entries matching a pattern
14
+ # cmd = Git::Commands::ConfigOptionSyntax::GetRegexp.new(lib)
15
+ # cmd.call('remote\..*\.url')
16
+ #
17
+ # @example Get matching entries with value filter
18
+ # cmd = Git::Commands::ConfigOptionSyntax::GetRegexp.new(lib)
19
+ # cmd.call('remote\..*\.url', 'github')
20
+ #
21
+ # @note `arguments` block audited against https://git-scm.com/docs/git-config/2.53.0
22
+ #
23
+ # @see Git::Commands::ConfigOptionSyntax
24
+ #
25
+ # @see https://git-scm.com/docs/git-config git-config
26
+ #
27
+ # @api private
28
+ #
29
+ class GetRegexp < Git::Commands::Base
30
+ arguments do
31
+ literal 'config'
32
+ literal '--get-regexp'
33
+
34
+ # File-scope options
35
+ flag_option :global
36
+ flag_option :system
37
+ flag_option :local
38
+ flag_option :worktree
39
+ value_option %i[file f]
40
+ value_option :blob
41
+
42
+ # General read options
43
+ flag_option :includes, negatable: true
44
+
45
+ # Type constraint
46
+ value_option :type, inline: true
47
+
48
+ # Output modifiers
49
+ flag_option :show_origin
50
+ flag_option :show_scope
51
+ flag_option %i[null z]
52
+ flag_option :name_only
53
+
54
+ # Operands
55
+ end_of_options
56
+ operand :name_regex, required: true
57
+ operand :value_regex
58
+ end
59
+
60
+ # git config --get-regexp exits 1 when no match is found (not an error)
61
+ allow_exit_status 0..1
62
+
63
+ # @!method call(*, **)
64
+ #
65
+ # @overload call(name_regex, value_regex = nil, **options)
66
+ #
67
+ # Execute the `git config --get-regexp` command
68
+ #
69
+ # @param name_regex [String] regex pattern to match config key names
70
+ #
71
+ # @param value_regex [String, nil] optional regex to filter values
72
+ #
73
+ # @param options [Hash] command options
74
+ #
75
+ # @option options [Boolean, nil] :global (nil) read from global config (`~/.gitconfig`)
76
+ #
77
+ # @option options [Boolean, nil] :system (nil) read from system config
78
+ #
79
+ # @option options [Boolean, nil] :local (nil) read from repository config (`.git/config`)
80
+ #
81
+ # @option options [Boolean, nil] :worktree (nil) read from worktree config
82
+ #
83
+ # @option options [String] :file (nil) read from the specified file
84
+ #
85
+ # Alias: :f
86
+ #
87
+ # @option options [String] :blob (nil) read from the specified blob
88
+ #
89
+ # @option options [Boolean, nil] :includes (nil) respect include directives in
90
+ # config files (`--includes`)
91
+ #
92
+ # @option options [Boolean, nil] :no_includes (nil) ignore include directives in
93
+ # config files (`--no-includes`)
94
+ #
95
+ # @option options [String] :type (nil) ensure values conform to the given type
96
+ #
97
+ # @option options [Boolean, nil] :show_origin (nil) show the origin of each config entry
98
+ #
99
+ # @option options [Boolean, nil] :show_scope (nil) show the scope of each config entry
100
+ #
101
+ # @option options [Boolean, nil] :null (nil) terminate values with NUL byte instead of newline
102
+ #
103
+ # Alias: :z
104
+ #
105
+ # @option options [Boolean, nil] :name_only (nil) output only the names of config keys
106
+ #
107
+ # @return [Git::CommandLineResult] the result of calling `git config --get-regexp`
108
+ #
109
+ # @raise [ArgumentError] if unsupported options are provided
110
+ #
111
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 1)
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Retrieve config values matching a URL
9
+ #
10
+ # Wraps `git config --get-urlmatch` to return config entries whose
11
+ # key name matches the given name and whose URL pattern matches the
12
+ # given URL.
13
+ #
14
+ # @example Get URL-matched config
15
+ # cmd = Git::Commands::ConfigOptionSyntax::GetUrlmatch.new(lib)
16
+ # cmd.call('http', 'https://example.com')
17
+ #
18
+ # @note `arguments` block audited against https://git-scm.com/docs/git-config/2.53.0
19
+ #
20
+ # @see Git::Commands::ConfigOptionSyntax
21
+ #
22
+ # @see https://git-scm.com/docs/git-config git-config
23
+ #
24
+ # @api private
25
+ #
26
+ class GetUrlmatch < Git::Commands::Base
27
+ arguments do
28
+ literal 'config'
29
+ literal '--get-urlmatch'
30
+
31
+ # File-scope options
32
+ flag_option :global
33
+ flag_option :system
34
+ flag_option :local
35
+ flag_option :worktree
36
+ value_option %i[file f]
37
+ value_option :blob
38
+
39
+ # Type constraint
40
+ value_option :type, inline: true
41
+
42
+ # Output modifier
43
+ flag_option %i[null z]
44
+
45
+ # General read options
46
+ flag_option :includes, negatable: true
47
+
48
+ # Operands
49
+ end_of_options
50
+ operand :name, required: true
51
+ operand :url, required: true
52
+ end
53
+
54
+ # git config --get-urlmatch exits 1 when no match is found (not an error)
55
+ allow_exit_status 0..1
56
+
57
+ # @!method call(*, **)
58
+ #
59
+ # @overload call(name, url, **options)
60
+ #
61
+ # Execute the `git config --get-urlmatch` command
62
+ #
63
+ # @param name [String] the config key name (or section prefix) to look up
64
+ #
65
+ # @param url [String] the URL to match against
66
+ #
67
+ # @param options [Hash] command options
68
+ #
69
+ # @option options [Boolean, nil] :global (nil) read from global config (`~/.gitconfig`)
70
+ #
71
+ # @option options [Boolean, nil] :system (nil) read from system config
72
+ #
73
+ # @option options [Boolean, nil] :local (nil) read from repository config (`.git/config`)
74
+ #
75
+ # @option options [Boolean, nil] :worktree (nil) read from worktree config
76
+ #
77
+ # @option options [String] :file (nil) read from the specified file
78
+ #
79
+ # Alias: :f
80
+ #
81
+ # @option options [String] :blob (nil) read from the specified blob
82
+ #
83
+ # @option options [String] :type (nil) ensure values conform to the given type
84
+ #
85
+ # @option options [Boolean, nil] :null (nil) terminate values with NUL byte instead of newline
86
+ #
87
+ # Alias: :z
88
+ #
89
+ # @option options [Boolean, nil] :includes (nil) respect include directives in config files (`--includes`)
90
+ #
91
+ # @option options [Boolean, nil] :no_includes (nil) disable include directives
92
+ # in config files (`--no-includes`)
93
+ #
94
+ # @return [Git::CommandLineResult] the result of calling `git config --get-urlmatch`
95
+ #
96
+ # @raise [ArgumentError] if unsupported options are provided
97
+ #
98
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 1)
99
+ end
100
+ end
101
+ end
102
+ end