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.
Files changed (265) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +5 -1
  3. data/AI_POLICY.md +24 -0
  4. data/CHANGELOG.md +689 -0
  5. data/CODE_OF_CONDUCT.md +25 -0
  6. data/CONTRIBUTING.md +1175 -97
  7. data/GOVERNANCE.md +106 -0
  8. data/LICENSE +1 -1
  9. data/MAINTAINERS.md +17 -4
  10. data/README.md +476 -320
  11. data/UPGRADING.md +1138 -0
  12. data/git.gemspec +124 -36
  13. data/lib/git/author.rb +39 -7
  14. data/lib/git/author_info.rb +66 -0
  15. data/lib/git/branch.rb +615 -65
  16. data/lib/git/branch_delete_failure.rb +34 -0
  17. data/lib/git/branch_delete_result.rb +66 -0
  18. data/lib/git/branch_info.rb +237 -0
  19. data/lib/git/branches.rb +167 -44
  20. data/lib/git/command_line/base.rb +247 -0
  21. data/lib/git/command_line/capturing.rb +308 -0
  22. data/lib/git/command_line/result.rb +88 -0
  23. data/lib/git/command_line/streaming.rb +236 -0
  24. data/lib/git/command_line.rb +52 -0
  25. data/lib/git/commands/add.rb +139 -0
  26. data/lib/git/commands/am/abort.rb +43 -0
  27. data/lib/git/commands/am/apply.rb +263 -0
  28. data/lib/git/commands/am/continue.rb +43 -0
  29. data/lib/git/commands/am/quit.rb +43 -0
  30. data/lib/git/commands/am/retry.rb +49 -0
  31. data/lib/git/commands/am/show_current_patch.rb +64 -0
  32. data/lib/git/commands/am/skip.rb +42 -0
  33. data/lib/git/commands/am.rb +33 -0
  34. data/lib/git/commands/apply.rb +242 -0
  35. data/lib/git/commands/archive/list_formats.rb +46 -0
  36. data/lib/git/commands/archive.rb +145 -0
  37. data/lib/git/commands/arguments.rb +4521 -0
  38. data/lib/git/commands/base.rb +502 -0
  39. data/lib/git/commands/branch/copy.rb +102 -0
  40. data/lib/git/commands/branch/create.rb +177 -0
  41. data/lib/git/commands/branch/delete.rb +88 -0
  42. data/lib/git/commands/branch/list.rb +178 -0
  43. data/lib/git/commands/branch/move.rb +102 -0
  44. data/lib/git/commands/branch/set_upstream.rb +86 -0
  45. data/lib/git/commands/branch/show_current.rb +49 -0
  46. data/lib/git/commands/branch/unset_upstream.rb +53 -0
  47. data/lib/git/commands/branch.rb +34 -0
  48. data/lib/git/commands/cat_file/batch.rb +385 -0
  49. data/lib/git/commands/cat_file/filtered.rb +105 -0
  50. data/lib/git/commands/cat_file/raw.rb +271 -0
  51. data/lib/git/commands/cat_file.rb +49 -0
  52. data/lib/git/commands/checkout/branch.rb +153 -0
  53. data/lib/git/commands/checkout/files.rb +116 -0
  54. data/lib/git/commands/checkout.rb +38 -0
  55. data/lib/git/commands/checkout_index.rb +106 -0
  56. data/lib/git/commands/clean.rb +102 -0
  57. data/lib/git/commands/clone.rb +241 -0
  58. data/lib/git/commands/commit.rb +273 -0
  59. data/lib/git/commands/commit_tree.rb +101 -0
  60. data/lib/git/commands/config_option_syntax/add.rb +86 -0
  61. data/lib/git/commands/config_option_syntax/get.rb +121 -0
  62. data/lib/git/commands/config_option_syntax/get_all.rb +118 -0
  63. data/lib/git/commands/config_option_syntax/get_color.rb +95 -0
  64. data/lib/git/commands/config_option_syntax/get_color_bool.rb +96 -0
  65. data/lib/git/commands/config_option_syntax/get_regexp.rb +119 -0
  66. data/lib/git/commands/config_option_syntax/get_urlmatch.rb +111 -0
  67. data/lib/git/commands/config_option_syntax/list.rb +111 -0
  68. data/lib/git/commands/config_option_syntax/remove_section.rb +79 -0
  69. data/lib/git/commands/config_option_syntax/rename_section.rb +83 -0
  70. data/lib/git/commands/config_option_syntax/replace_all.rb +109 -0
  71. data/lib/git/commands/config_option_syntax/set.rb +119 -0
  72. data/lib/git/commands/config_option_syntax/unset.rb +92 -0
  73. data/lib/git/commands/config_option_syntax/unset_all.rb +94 -0
  74. data/lib/git/commands/config_option_syntax.rb +56 -0
  75. data/lib/git/commands/describe.rb +156 -0
  76. data/lib/git/commands/diff.rb +657 -0
  77. data/lib/git/commands/diff_files.rb +519 -0
  78. data/lib/git/commands/diff_index.rb +499 -0
  79. data/lib/git/commands/fetch.rb +354 -0
  80. data/lib/git/commands/fsck.rb +138 -0
  81. data/lib/git/commands/gc.rb +134 -0
  82. data/lib/git/commands/grep.rb +339 -0
  83. data/lib/git/commands/init.rb +101 -0
  84. data/lib/git/commands/log.rb +634 -0
  85. data/lib/git/commands/ls_files.rb +195 -0
  86. data/lib/git/commands/ls_remote.rb +161 -0
  87. data/lib/git/commands/ls_tree.rb +135 -0
  88. data/lib/git/commands/maintenance/register.rb +77 -0
  89. data/lib/git/commands/maintenance/run.rb +109 -0
  90. data/lib/git/commands/maintenance/start.rb +71 -0
  91. data/lib/git/commands/maintenance/stop.rb +60 -0
  92. data/lib/git/commands/maintenance/unregister.rb +84 -0
  93. data/lib/git/commands/maintenance.rb +31 -0
  94. data/lib/git/commands/merge/abort.rb +44 -0
  95. data/lib/git/commands/merge/continue.rb +44 -0
  96. data/lib/git/commands/merge/quit.rb +46 -0
  97. data/lib/git/commands/merge/start.rb +250 -0
  98. data/lib/git/commands/merge.rb +28 -0
  99. data/lib/git/commands/merge_base.rb +91 -0
  100. data/lib/git/commands/mv.rb +82 -0
  101. data/lib/git/commands/name_rev.rb +119 -0
  102. data/lib/git/commands/pull.rb +382 -0
  103. data/lib/git/commands/push.rb +251 -0
  104. data/lib/git/commands/read_tree.rb +154 -0
  105. data/lib/git/commands/remote/add.rb +96 -0
  106. data/lib/git/commands/remote/get_url.rb +68 -0
  107. data/lib/git/commands/remote/list.rb +56 -0
  108. data/lib/git/commands/remote/prune.rb +63 -0
  109. data/lib/git/commands/remote/remove.rb +52 -0
  110. data/lib/git/commands/remote/rename.rb +76 -0
  111. data/lib/git/commands/remote/set_branches.rb +70 -0
  112. data/lib/git/commands/remote/set_head.rb +89 -0
  113. data/lib/git/commands/remote/set_url.rb +78 -0
  114. data/lib/git/commands/remote/set_url_add.rb +70 -0
  115. data/lib/git/commands/remote/set_url_delete.rb +71 -0
  116. data/lib/git/commands/remote/show.rb +77 -0
  117. data/lib/git/commands/remote/update.rb +79 -0
  118. data/lib/git/commands/remote.rb +42 -0
  119. data/lib/git/commands/repack.rb +281 -0
  120. data/lib/git/commands/reset.rb +154 -0
  121. data/lib/git/commands/rev_parse.rb +304 -0
  122. data/lib/git/commands/revert/abort.rb +45 -0
  123. data/lib/git/commands/revert/continue.rb +62 -0
  124. data/lib/git/commands/revert/quit.rb +47 -0
  125. data/lib/git/commands/revert/skip.rb +44 -0
  126. data/lib/git/commands/revert/start.rb +158 -0
  127. data/lib/git/commands/revert.rb +29 -0
  128. data/lib/git/commands/rm.rb +113 -0
  129. data/lib/git/commands/show.rb +632 -0
  130. data/lib/git/commands/show_ref/exclude_existing.rb +119 -0
  131. data/lib/git/commands/show_ref/exists.rb +80 -0
  132. data/lib/git/commands/show_ref/list.rb +149 -0
  133. data/lib/git/commands/show_ref/verify.rb +122 -0
  134. data/lib/git/commands/show_ref.rb +42 -0
  135. data/lib/git/commands/stash/apply.rb +81 -0
  136. data/lib/git/commands/stash/branch.rb +67 -0
  137. data/lib/git/commands/stash/clear.rb +43 -0
  138. data/lib/git/commands/stash/create.rb +60 -0
  139. data/lib/git/commands/stash/drop.rb +73 -0
  140. data/lib/git/commands/stash/list.rb +43 -0
  141. data/lib/git/commands/stash/pop.rb +87 -0
  142. data/lib/git/commands/stash/push.rb +112 -0
  143. data/lib/git/commands/stash/show.rb +158 -0
  144. data/lib/git/commands/stash/store.rb +72 -0
  145. data/lib/git/commands/stash.rb +38 -0
  146. data/lib/git/commands/status.rb +174 -0
  147. data/lib/git/commands/symbolic_ref/delete.rb +72 -0
  148. data/lib/git/commands/symbolic_ref/read.rb +99 -0
  149. data/lib/git/commands/symbolic_ref/update.rb +79 -0
  150. data/lib/git/commands/symbolic_ref.rb +38 -0
  151. data/lib/git/commands/tag/create.rb +142 -0
  152. data/lib/git/commands/tag/delete.rb +57 -0
  153. data/lib/git/commands/tag/list.rb +146 -0
  154. data/lib/git/commands/tag/verify.rb +71 -0
  155. data/lib/git/commands/tag.rb +26 -0
  156. data/lib/git/commands/update_ref/batch.rb +145 -0
  157. data/lib/git/commands/update_ref/delete.rb +90 -0
  158. data/lib/git/commands/update_ref/update.rb +103 -0
  159. data/lib/git/commands/update_ref.rb +42 -0
  160. data/lib/git/commands/version.rb +60 -0
  161. data/lib/git/commands/worktree/add.rb +139 -0
  162. data/lib/git/commands/worktree/list.rb +64 -0
  163. data/lib/git/commands/worktree/lock.rb +58 -0
  164. data/lib/git/commands/worktree/management_base.rb +51 -0
  165. data/lib/git/commands/worktree/move.rb +66 -0
  166. data/lib/git/commands/worktree/prune.rb +67 -0
  167. data/lib/git/commands/worktree/remove.rb +63 -0
  168. data/lib/git/commands/worktree/repair.rb +76 -0
  169. data/lib/git/commands/worktree/unlock.rb +47 -0
  170. data/lib/git/commands/worktree.rb +43 -0
  171. data/lib/git/commands/write_tree.rb +68 -0
  172. data/lib/git/commands.rb +88 -0
  173. data/lib/git/config.rb +72 -5
  174. data/lib/git/config_entry_info.rb +106 -0
  175. data/lib/git/configuring.rb +795 -0
  176. data/lib/git/detached_head_info.rb +57 -0
  177. data/lib/git/diff.rb +437 -86
  178. data/lib/git/diff_file_numstat_info.rb +31 -0
  179. data/lib/git/diff_file_patch_info.rb +136 -0
  180. data/lib/git/diff_file_raw_info.rb +129 -0
  181. data/lib/git/diff_info.rb +162 -0
  182. data/lib/git/diff_path_status.rb +107 -0
  183. data/lib/git/diff_result.rb +34 -0
  184. data/lib/git/diff_stats.rb +111 -0
  185. data/lib/git/dirstat_info.rb +102 -0
  186. data/lib/git/encoding_utils.rb +32 -1
  187. data/lib/git/errors.rb +285 -0
  188. data/lib/git/escaped_path.rb +57 -5
  189. data/lib/git/execution_context/global.rb +31 -0
  190. data/lib/git/execution_context/repository.rb +151 -0
  191. data/lib/git/execution_context.rb +559 -0
  192. data/lib/git/factories.rb +813 -0
  193. data/lib/git/file_ref.rb +77 -0
  194. data/lib/git/fsck_object.rb +56 -0
  195. data/lib/git/fsck_result.rb +132 -0
  196. data/lib/git/log.rb +306 -90
  197. data/lib/git/object.rb +563 -141
  198. data/lib/git/parsers/branch.rb +240 -0
  199. data/lib/git/parsers/cat_file.rb +111 -0
  200. data/lib/git/parsers/config_entry.rb +110 -0
  201. data/lib/git/parsers/diff.rb +792 -0
  202. data/lib/git/parsers/fsck.rb +144 -0
  203. data/lib/git/parsers/grep.rb +42 -0
  204. data/lib/git/parsers/ls_remote.rb +79 -0
  205. data/lib/git/parsers/ls_tree.rb +58 -0
  206. data/lib/git/parsers/remote.rb +162 -0
  207. data/lib/git/parsers/stash.rb +292 -0
  208. data/lib/git/parsers/status.rb +251 -0
  209. data/lib/git/parsers/tag.rb +341 -0
  210. data/lib/git/parsers/worktree.rb +185 -0
  211. data/lib/git/path_resolver.rb +206 -0
  212. data/lib/git/remote.rb +165 -12
  213. data/lib/git/remote_info.rb +203 -0
  214. data/lib/git/repository/branching.rb +964 -0
  215. data/lib/git/repository/committing.rb +246 -0
  216. data/lib/git/repository/context_helpers.rb +293 -0
  217. data/lib/git/repository/diffing.rb +785 -0
  218. data/lib/git/repository/inspecting.rb +252 -0
  219. data/lib/git/repository/logging.rb +410 -0
  220. data/lib/git/repository/maintenance.rb +65 -0
  221. data/lib/git/repository/merging.rb +451 -0
  222. data/lib/git/repository/object_operations.rb +1551 -0
  223. data/lib/git/repository/remote_operations.rb +984 -0
  224. data/lib/git/repository/shared_private.rb +120 -0
  225. data/lib/git/repository/staging.rb +587 -0
  226. data/lib/git/repository/stashing.rb +623 -0
  227. data/lib/git/repository/status_operations.rb +249 -0
  228. data/lib/git/repository/worktree_operations.rb +339 -0
  229. data/lib/git/repository.rb +484 -2
  230. data/lib/git/stash.rb +109 -12
  231. data/lib/git/stash_info.rb +102 -0
  232. data/lib/git/stashes.rb +169 -26
  233. data/lib/git/status.rb +308 -122
  234. data/lib/git/status_file_info.rb +258 -0
  235. data/lib/git/status_info.rb +189 -0
  236. data/lib/git/tag_delete_failure.rb +34 -0
  237. data/lib/git/tag_delete_result.rb +66 -0
  238. data/lib/git/tag_info.rb +99 -0
  239. data/lib/git/url.rb +15 -8
  240. data/lib/git/version.rb +113 -2
  241. data/lib/git/version_constraint.rb +85 -0
  242. data/lib/git/worktree.rb +150 -8
  243. data/lib/git/worktree_info.rb +128 -0
  244. data/lib/git/worktrees.rb +118 -13
  245. data/lib/git.rb +632 -234
  246. metadata +369 -54
  247. data/.github/stale.yml +0 -25
  248. data/.github/workflows/continuous_integration.yml +0 -49
  249. data/.gitignore +0 -10
  250. data/Dockerfile.changelog-rs +0 -12
  251. data/Gemfile +0 -5
  252. data/ISSUE_TEMPLATE.md +0 -15
  253. data/PULL_REQUEST_TEMPLATE.md +0 -9
  254. data/RELEASING.md +0 -70
  255. data/Rakefile +0 -60
  256. data/lib/git/base/factory.rb +0 -99
  257. data/lib/git/base.rb +0 -711
  258. data/lib/git/command_line_result.rb +0 -86
  259. data/lib/git/failed_error.rb +0 -53
  260. data/lib/git/git_execute_error.rb +0 -7
  261. data/lib/git/index.rb +0 -5
  262. data/lib/git/lib.rb +0 -1328
  263. data/lib/git/path.rb +0 -31
  264. data/lib/git/signaled_error.rb +0 -50
  265. data/lib/git/working_directory.rb +0 -4
@@ -0,0 +1,95 @@
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
+ # @overload call(name, default = nil, **options)
52
+ #
53
+ # Execute the `git config --get-color` command
54
+ #
55
+ # @param name [String] the color config key name to look up
56
+ #
57
+ # @param default [String, nil] (nil) fallback color when the key is not set
58
+ #
59
+ # @param options [Hash] command options
60
+ #
61
+ # @option options [Boolean, nil] :global (nil) read from global config (`~/.gitconfig`)
62
+ #
63
+ # @option options [Boolean, nil] :system (nil) read from system config
64
+ #
65
+ # @option options [Boolean, nil] :local (nil) read from repository config (`.git/config`)
66
+ #
67
+ # @option options [Boolean, nil] :worktree (nil) read from worktree config
68
+ #
69
+ # @option options [String] :file (nil) read from the specified file
70
+ #
71
+ # Alias: :f
72
+ #
73
+ # @option options [String] :blob (nil) read from the specified blob
74
+ #
75
+ # @option options [Boolean, nil] :includes (nil) respect include directives in config files
76
+ # (`--includes`)
77
+ #
78
+ # @option options [Boolean, nil] :no_includes (nil) suppress include directive processing
79
+ # (`--no-includes`)
80
+ #
81
+ # @return [Git::CommandLine::Result] the result of calling `git config --get-color`
82
+ #
83
+ # @raise [ArgumentError] if unsupported options are provided
84
+ #
85
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
86
+ #
87
+ # @api public
88
+ #
89
+ def call(*, **)
90
+ super
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,96 @@
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
+ # @overload call(name, stdout_is_tty = nil, **options)
56
+ #
57
+ # Execute the `git config --get-colorbool` command
58
+ #
59
+ # @param name [String] the color config key name to query
60
+ #
61
+ # @param stdout_is_tty [String, nil] (nil) hint whether stdout is a TTY (`"true"` or `"false"`)
62
+ #
63
+ # @param options [Hash] command options
64
+ #
65
+ # @option options [Boolean, nil] :global (nil) read from global config (`~/.gitconfig`)
66
+ #
67
+ # @option options [Boolean, nil] :system (nil) read from system config
68
+ #
69
+ # @option options [Boolean, nil] :local (nil) read from repository config (`.git/config`)
70
+ #
71
+ # @option options [Boolean, nil] :worktree (nil) read from worktree config
72
+ #
73
+ # @option options [String] :file (nil) read from the specified file
74
+ #
75
+ # Alias: :f
76
+ #
77
+ # @option options [String] :blob (nil) read from the specified blob
78
+ #
79
+ # @option options [Boolean, nil] :includes (nil) respect include directives in config files (`--includes`)
80
+ #
81
+ # @option options [Boolean, nil] :no_includes (nil) disable include directive processing (`--no-includes`)
82
+ #
83
+ # @return [Git::CommandLine::Result] the result of calling `git config --get-colorbool`
84
+ #
85
+ # @raise [ArgumentError] if unsupported options are provided
86
+ #
87
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 1)
88
+ #
89
+ # @api public
90
+ def call(*, **)
91
+ super
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,119 @@
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
+ # @overload call(name_regex, value_regex = nil, **options)
64
+ #
65
+ # Execute the `git config --get-regexp` command
66
+ #
67
+ # @param name_regex [String] regex pattern to match config key names
68
+ #
69
+ # @param value_regex [String, nil] optional regex to filter values
70
+ #
71
+ # @param options [Hash] command options
72
+ #
73
+ # @option options [Boolean, nil] :global (nil) read from global config (`~/.gitconfig`)
74
+ #
75
+ # @option options [Boolean, nil] :system (nil) read from system config
76
+ #
77
+ # @option options [Boolean, nil] :local (nil) read from repository config (`.git/config`)
78
+ #
79
+ # @option options [Boolean, nil] :worktree (nil) read from worktree config
80
+ #
81
+ # @option options [String] :file (nil) read from the specified file
82
+ #
83
+ # Alias: :f
84
+ #
85
+ # @option options [String] :blob (nil) read from the specified blob
86
+ #
87
+ # @option options [Boolean, nil] :includes (nil) respect include directives in
88
+ # config files (`--includes`)
89
+ #
90
+ # @option options [Boolean, nil] :no_includes (nil) ignore include directives in
91
+ # config files (`--no-includes`)
92
+ #
93
+ # @option options [String] :type (nil) ensure values conform to the given type
94
+ #
95
+ # @option options [Boolean, nil] :show_origin (nil) show the origin of each config entry
96
+ #
97
+ # @option options [Boolean, nil] :show_scope (nil) show the scope of each config entry
98
+ #
99
+ # @option options [Boolean, nil] :null (nil) terminate values with NUL byte instead of newline
100
+ #
101
+ # Alias: :z
102
+ #
103
+ # @option options [Boolean, nil] :name_only (nil) output only the names of config keys
104
+ #
105
+ # @return [Git::CommandLine::Result] the result of calling `git config --get-regexp`
106
+ #
107
+ # @raise [ArgumentError] if unsupported options are provided
108
+ #
109
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 1)
110
+ #
111
+ # @api public
112
+ #
113
+ def call(*, **)
114
+ super
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,111 @@
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
+ # Output modifiers
49
+ flag_option :show_scope
50
+
51
+ # Operands
52
+ end_of_options
53
+ operand :name, required: true
54
+ operand :url, required: true
55
+ end
56
+
57
+ # git config --get-urlmatch exits 1 when no match is found (not an error)
58
+ allow_exit_status 0..1
59
+
60
+ # @overload call(name, url, **options)
61
+ #
62
+ # Execute the `git config --get-urlmatch` command
63
+ #
64
+ # @param name [String] the config key name (or section prefix) to look up
65
+ #
66
+ # @param url [String] the URL to match against
67
+ #
68
+ # @param options [Hash] command options
69
+ #
70
+ # @option options [Boolean, nil] :global (nil) read from global config (`~/.gitconfig`)
71
+ #
72
+ # @option options [Boolean, nil] :system (nil) read from system config
73
+ #
74
+ # @option options [Boolean, nil] :local (nil) read from repository config (`.git/config`)
75
+ #
76
+ # @option options [Boolean, nil] :worktree (nil) read from worktree config
77
+ #
78
+ # @option options [String] :file (nil) read from the specified file
79
+ #
80
+ # Alias: :f
81
+ #
82
+ # @option options [String] :blob (nil) read from the specified blob
83
+ #
84
+ # @option options [String] :type (nil) ensure values conform to the given type
85
+ #
86
+ # @option options [Boolean, nil] :null (nil) terminate values with NUL byte instead of newline
87
+ #
88
+ # Alias: :z
89
+ #
90
+ # @option options [Boolean, nil] :includes (nil) respect include directives in config files (`--includes`)
91
+ #
92
+ # @option options [Boolean, nil] :no_includes (nil) disable include directives
93
+ # in config files (`--no-includes`)
94
+ #
95
+ # @option options [Boolean, nil] :show_scope (nil) show the scope of each config entry
96
+ #
97
+ # @return [Git::CommandLine::Result] the result of calling `git config --get-urlmatch`
98
+ #
99
+ # @raise [ArgumentError] if unsupported options are provided
100
+ #
101
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 1)
102
+ #
103
+ # @api public
104
+ #
105
+ def call(*, **)
106
+ super
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # List all config entries
9
+ #
10
+ # Wraps `git config --list` to output all config entries visible
11
+ # from the current scope.
12
+ #
13
+ # @example List all config entries
14
+ # cmd = Git::Commands::ConfigOptionSyntax::List.new(lib)
15
+ # cmd.call
16
+ #
17
+ # @example List global config entries
18
+ # cmd = Git::Commands::ConfigOptionSyntax::List.new(lib)
19
+ # cmd.call(global: true)
20
+ #
21
+ # @example List entries from a specific file
22
+ # cmd = Git::Commands::ConfigOptionSyntax::List.new(lib)
23
+ # cmd.call(file: '/path/to/config')
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
30
+ #
31
+ # @api private
32
+ #
33
+ class List < Git::Commands::Base
34
+ arguments do
35
+ literal 'config'
36
+ literal '--list'
37
+
38
+ # File-scope options
39
+ flag_option :global
40
+ flag_option :system
41
+ flag_option :local
42
+ flag_option :worktree
43
+ value_option %i[file f]
44
+ value_option :blob
45
+
46
+ # General read options
47
+ flag_option :includes, negatable: true
48
+
49
+ # Output modifiers
50
+ flag_option :show_origin
51
+ flag_option :show_scope
52
+ flag_option %i[null z]
53
+ flag_option :name_only
54
+
55
+ # Type constraint
56
+ value_option :type, inline: true
57
+ end
58
+
59
+ # @overload call(**options)
60
+ #
61
+ # Execute the `git config --list` command
62
+ #
63
+ # @param options [Hash] command options
64
+ #
65
+ # @option options [Boolean, nil] :global (nil) list only global config entries
66
+ #
67
+ # @option options [Boolean, nil] :system (nil) list only system config entries
68
+ #
69
+ # @option options [Boolean, nil] :local (nil) list only repository config entries
70
+ #
71
+ # @option options [Boolean, nil] :worktree (nil) list only worktree config entries
72
+ #
73
+ # @option options [String] :file (nil) list entries from the specified file
74
+ #
75
+ # Alias: :f
76
+ #
77
+ # @option options [String] :blob (nil) list entries from the specified blob
78
+ #
79
+ # @option options [Boolean, nil] :includes (nil) respect include directives in config files
80
+ # (`--includes`)
81
+ #
82
+ # @option options [Boolean, nil] :no_includes (nil) suppress include directive processing
83
+ # (`--no-includes`)
84
+ #
85
+ # @option options [Boolean, nil] :show_origin (nil) show the origin of each config entry
86
+ #
87
+ # @option options [Boolean, nil] :show_scope (nil) show the scope of each config entry
88
+ #
89
+ # @option options [Boolean, nil] :null (nil) terminate values with NUL byte instead of newline
90
+ #
91
+ # Alias: :z
92
+ #
93
+ # @option options [Boolean, nil] :name_only (nil) output only the names of config keys
94
+ #
95
+ # @option options [String] :type (nil) ensure values conform to the given type
96
+ #
97
+ # @return [Git::CommandLine::Result] the result of calling `git config --list`
98
+ #
99
+ # @raise [ArgumentError] if unsupported options are provided
100
+ #
101
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
102
+ #
103
+ # @api public
104
+ #
105
+ def call(*, **)
106
+ super
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Remove a config section
9
+ #
10
+ # Wraps `git config --remove-section` to remove an entire section
11
+ # from the config file.
12
+ #
13
+ # @example Remove a section
14
+ # cmd = Git::Commands::ConfigOptionSyntax::RemoveSection.new(lib)
15
+ # cmd.call('old-section')
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-config/2.53.0
18
+ #
19
+ # @see Git::Commands::ConfigOptionSyntax
20
+ #
21
+ # @see https://git-scm.com/docs/git-config git-config
22
+ #
23
+ # @api private
24
+ class RemoveSection < Git::Commands::Base
25
+ arguments do
26
+ literal 'config'
27
+ literal '--remove-section'
28
+
29
+ # File-scope options
30
+ flag_option :global
31
+ flag_option :system
32
+ flag_option :local
33
+ flag_option :worktree
34
+ value_option %i[file f]
35
+ value_option :blob
36
+
37
+ # Operands
38
+ end_of_options
39
+ operand :name, required: true
40
+ end
41
+
42
+ # @!method call(*, **options)
43
+ #
44
+ # @param options [Hash] command options
45
+ #
46
+ # @option options [Boolean, nil] :global (nil) command option key; see
47
+ # overload docs for the full option list
48
+ #
49
+ # @overload call(name, **options)
50
+ #
51
+ # Execute the `git config --remove-section` command
52
+ #
53
+ # @param name [String] the section name to remove
54
+ #
55
+ # @param options [Hash] command options
56
+ #
57
+ # @option options [Boolean, nil] :global (nil) remove from global config (`~/.gitconfig`)
58
+ #
59
+ # @option options [Boolean, nil] :system (nil) remove from system config
60
+ #
61
+ # @option options [Boolean, nil] :local (nil) remove from repository config (`.git/config`)
62
+ #
63
+ # @option options [Boolean, nil] :worktree (nil) remove from worktree config
64
+ #
65
+ # @option options [String] :file (nil) remove from the specified file
66
+ #
67
+ # Alias: :f
68
+ #
69
+ # @option options [String] :blob (nil) read from the specified blob
70
+ #
71
+ # @return [Git::CommandLine::Result] the result of calling `git config --remove-section`
72
+ #
73
+ # @raise [ArgumentError] if unsupported options are provided
74
+ #
75
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Rename a config section
9
+ #
10
+ # Wraps `git config --rename-section` to rename a section in the
11
+ # config file.
12
+ #
13
+ # @example Rename a section
14
+ # cmd = Git::Commands::ConfigOptionSyntax::RenameSection.new(lib)
15
+ # cmd.call('old-section', 'new-section')
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-config/2.53.0
18
+ #
19
+ # @see Git::Commands::ConfigOptionSyntax
20
+ #
21
+ # @see https://git-scm.com/docs/git-config git-config
22
+ #
23
+ # @api private
24
+ #
25
+ class RenameSection < Git::Commands::Base
26
+ arguments do
27
+ literal 'config'
28
+ literal '--rename-section'
29
+
30
+ # File-scope options
31
+ flag_option :global
32
+ flag_option :system
33
+ flag_option :local
34
+ flag_option :worktree
35
+ value_option %i[file f]
36
+ value_option :blob
37
+
38
+ # Operands
39
+ end_of_options
40
+ operand :old_name, required: true
41
+ operand :new_name, required: true
42
+ end
43
+
44
+ # @!method call(*, **options)
45
+ #
46
+ # @param options [Hash] command options
47
+ #
48
+ # @option options [Boolean, nil] :global (nil) command option key; see
49
+ # overload docs for the full option list
50
+ #
51
+ # @overload call(old_name, new_name, **options)
52
+ #
53
+ # Execute the `git config --rename-section` command
54
+ #
55
+ # @param old_name [String] the current section name
56
+ #
57
+ # @param new_name [String] the new section name
58
+ #
59
+ # @param options [Hash] command options
60
+ #
61
+ # @option options [Boolean, nil] :global (nil) operate on global config (`~/.gitconfig`)
62
+ #
63
+ # @option options [Boolean, nil] :system (nil) operate on system config
64
+ #
65
+ # @option options [Boolean, nil] :local (nil) operate on repository config (`.git/config`)
66
+ #
67
+ # @option options [Boolean, nil] :worktree (nil) operate on worktree config
68
+ #
69
+ # @option options [String] :file (nil) operate on the specified file
70
+ #
71
+ # Alias: :f
72
+ #
73
+ # @option options [String] :blob (nil) read from the specified blob
74
+ #
75
+ # @return [Git::CommandLine::Result] the result of calling `git config --rename-section`
76
+ #
77
+ # @raise [ArgumentError] if unsupported options are provided
78
+ #
79
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
80
+ end
81
+ end
82
+ end
83
+ end