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,107 @@
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
+ # @!method call(*, **)
60
+ #
61
+ # @overload call(**options)
62
+ #
63
+ # Execute the `git config --list` command
64
+ #
65
+ # @param options [Hash] command options
66
+ #
67
+ # @option options [Boolean, nil] :global (nil) list only global config entries
68
+ #
69
+ # @option options [Boolean, nil] :system (nil) list only system config entries
70
+ #
71
+ # @option options [Boolean, nil] :local (nil) list only repository config entries
72
+ #
73
+ # @option options [Boolean, nil] :worktree (nil) list only worktree config entries
74
+ #
75
+ # @option options [String] :file (nil) list entries from the specified file
76
+ #
77
+ # Alias: :f
78
+ #
79
+ # @option options [String] :blob (nil) list entries from the specified blob
80
+ #
81
+ # @option options [Boolean, nil] :includes (nil) respect include directives in config files
82
+ # (`--includes`)
83
+ #
84
+ # @option options [Boolean, nil] :no_includes (nil) suppress include directive processing
85
+ # (`--no-includes`)
86
+ #
87
+ # @option options [Boolean, nil] :show_origin (nil) show the origin of each config entry
88
+ #
89
+ # @option options [Boolean, nil] :show_scope (nil) show the scope of each config entry
90
+ #
91
+ # @option options [Boolean, nil] :null (nil) terminate values with NUL byte instead of newline
92
+ #
93
+ # Alias: :z
94
+ #
95
+ # @option options [Boolean, nil] :name_only (nil) output only the names of config keys
96
+ #
97
+ # @option options [String] :type (nil) ensure values conform to the given type
98
+ #
99
+ # @return [Git::CommandLineResult] the result of calling `git config --list`
100
+ #
101
+ # @raise [ArgumentError] if unsupported options are provided
102
+ #
103
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,74 @@
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(*, **)
43
+ #
44
+ # @overload call(name, **options)
45
+ #
46
+ # Execute the `git config --remove-section` command
47
+ #
48
+ # @param name [String] the section name to remove
49
+ #
50
+ # @param options [Hash] command options
51
+ #
52
+ # @option options [Boolean, nil] :global (nil) remove from global config (`~/.gitconfig`)
53
+ #
54
+ # @option options [Boolean, nil] :system (nil) remove from system config
55
+ #
56
+ # @option options [Boolean, nil] :local (nil) remove from repository config (`.git/config`)
57
+ #
58
+ # @option options [Boolean, nil] :worktree (nil) remove from worktree config
59
+ #
60
+ # @option options [String] :file (nil) remove from the specified file
61
+ #
62
+ # Alias: :f
63
+ #
64
+ # @option options [String] :blob (nil) read from the specified blob
65
+ #
66
+ # @return [Git::CommandLineResult] the result of calling `git config --remove-section`
67
+ #
68
+ # @raise [ArgumentError] if unsupported options are provided
69
+ #
70
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,78 @@
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(*, **)
45
+ #
46
+ # @overload call(old_name, new_name, **options)
47
+ #
48
+ # Execute the `git config --rename-section` command
49
+ #
50
+ # @param old_name [String] the current section name
51
+ #
52
+ # @param new_name [String] the new section name
53
+ #
54
+ # @param options [Hash] command options
55
+ #
56
+ # @option options [Boolean, nil] :global (nil) operate on global config (`~/.gitconfig`)
57
+ #
58
+ # @option options [Boolean, nil] :system (nil) operate on system config
59
+ #
60
+ # @option options [Boolean, nil] :local (nil) operate on repository config (`.git/config`)
61
+ #
62
+ # @option options [Boolean, nil] :worktree (nil) operate on worktree config
63
+ #
64
+ # @option options [String] :file (nil) operate on the specified file
65
+ #
66
+ # Alias: :f
67
+ #
68
+ # @option options [String] :blob (nil) read from the specified blob
69
+ #
70
+ # @return [Git::CommandLineResult] the result of calling `git config --rename-section`
71
+ #
72
+ # @raise [ArgumentError] if unsupported options are provided
73
+ #
74
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Replace all matching values for a config key
9
+ #
10
+ # Wraps `git config --replace-all` to replace all entries matching the
11
+ # given key and optional value regex with a new value.
12
+ #
13
+ # @example Replace all values for a key
14
+ # cmd = Git::Commands::ConfigOptionSyntax::ReplaceAll.new(lib)
15
+ # cmd.call('core.autocrlf', 'true')
16
+ #
17
+ # @example Replace values matching a pattern
18
+ # cmd = Git::Commands::ConfigOptionSyntax::ReplaceAll.new(lib)
19
+ # cmd.call('core.autocrlf', 'true', 'false')
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 ReplaceAll < Git::Commands::Base
30
+ arguments do
31
+ literal 'config'
32
+ literal '--replace-all'
33
+
34
+ # Write modifiers
35
+ value_option :comment
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
+ # Value matching
46
+ flag_option :fixed_value
47
+
48
+ # Type constraint
49
+ value_option :type, inline: true
50
+ flag_option :no_type
51
+
52
+ # Operands
53
+ end_of_options
54
+ operand :name, required: true
55
+ operand :value, required: true
56
+ operand :value_regex
57
+ end
58
+
59
+ # @!method call(*, **)
60
+ #
61
+ # @overload call(name, value, value_regex = nil, **options)
62
+ #
63
+ # Execute the `git config --replace-all` command
64
+ #
65
+ # @param name [String] the config key name
66
+ #
67
+ # @param value [String] the new value to set
68
+ #
69
+ # @param value_regex [String, nil] (nil) optional regex to match existing values to replace
70
+ #
71
+ # @param options [Hash] command options
72
+ #
73
+ # @option options [Boolean, nil] :global (nil) write to global config (`~/.gitconfig`)
74
+ #
75
+ # @option options [Boolean, nil] :system (nil) write to system config
76
+ #
77
+ # @option options [Boolean, nil] :local (nil) write to repository config (`.git/config`)
78
+ #
79
+ # @option options [Boolean, nil] :worktree (nil) write to worktree config
80
+ #
81
+ # @option options [String] :file (nil) write to the specified file
82
+ #
83
+ # Alias: :f
84
+ #
85
+ # @option options [String] :blob (nil) read from the specified blob
86
+ #
87
+ # @option options [String] :comment (nil) append a comment at the end of new or modified lines
88
+ #
89
+ # @option options [Boolean, nil] :fixed_value (nil) treat the value regex as an exact string
90
+ #
91
+ # @option options [String] :type (nil) ensure the value conforms to the given type
92
+ #
93
+ # @option options [Boolean, nil] :no_type (nil) unset the previously set type specifier;
94
+ # `true` emits `--no-type`
95
+ #
96
+ # @return [Git::CommandLineResult] the result of calling `git config --replace-all`
97
+ #
98
+ # @raise [ArgumentError] if unsupported options are provided
99
+ #
100
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,114 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Set a config value
9
+ #
10
+ # Wraps the implicit `git config <name> <value>` set mode to assign
11
+ # a value to a config key, optionally replacing only the entry
12
+ # matching a value regex.
13
+ #
14
+ # @example Set a local config value
15
+ # cmd = Git::Commands::ConfigOptionSyntax::Set.new(lib)
16
+ # cmd.call('user.name', 'Alice')
17
+ #
18
+ # @example Set a global config value
19
+ # cmd = Git::Commands::ConfigOptionSyntax::Set.new(lib)
20
+ # cmd.call('user.name', 'Alice', global: true)
21
+ #
22
+ # @example Set a value with a type constraint
23
+ # cmd = Git::Commands::ConfigOptionSyntax::Set.new(lib)
24
+ # cmd.call('core.bare', 'true', type: 'bool')
25
+ #
26
+ # @note `arguments` block audited against https://git-scm.com/docs/git-config/2.53.0
27
+ #
28
+ # @see Git::Commands::ConfigOptionSyntax
29
+ #
30
+ # @see https://git-scm.com/docs/git-config git-config documentation
31
+ #
32
+ # @api private
33
+ #
34
+ class Set < Git::Commands::Base
35
+ arguments do
36
+ literal 'config'
37
+
38
+ # Write modifiers
39
+ flag_option :replace_all
40
+ flag_option :append
41
+ value_option :comment
42
+
43
+ # File-scope options
44
+ flag_option :global
45
+ flag_option :system
46
+ flag_option :local
47
+ flag_option :worktree
48
+ value_option %i[file f]
49
+ value_option :blob
50
+
51
+ # Value matching
52
+ flag_option :fixed_value
53
+
54
+ # Type constraint
55
+ value_option :type, inline: true
56
+ flag_option :no_type
57
+
58
+ # Operands
59
+ end_of_options
60
+ operand :name, required: true
61
+ operand :value, required: true
62
+ operand :value_regex
63
+ end
64
+
65
+ # @!method call(*, **)
66
+ #
67
+ # @overload call(name, value, value_regex = nil, **options)
68
+ #
69
+ # Execute the `git config <name> <value>` command
70
+ #
71
+ # @param name [String] the config key name to set
72
+ #
73
+ # @param value [String] the value to assign
74
+ #
75
+ # @param value_regex [String, nil] (nil) optional regex to match the existing value to replace
76
+ #
77
+ # @param options [Hash] command options
78
+ #
79
+ # @option options [Boolean, nil] :replace_all (nil) replace all lines matching the key
80
+ #
81
+ # @option options [Boolean, nil] :append (nil) add a new line without altering existing values
82
+ #
83
+ # @option options [String] :comment (nil) append a comment at the end of new or modified lines
84
+ #
85
+ # @option options [Boolean, nil] :global (nil) write to global config (`~/.gitconfig`)
86
+ #
87
+ # @option options [Boolean, nil] :system (nil) write to system config
88
+ #
89
+ # @option options [Boolean, nil] :local (nil) write to repository config (`.git/config`)
90
+ #
91
+ # @option options [Boolean, nil] :worktree (nil) write to worktree config
92
+ #
93
+ # @option options [String] :file (nil) write to the specified file
94
+ #
95
+ # Alias: :f
96
+ #
97
+ # @option options [String] :blob (nil) read from the specified blob
98
+ #
99
+ # @option options [Boolean, nil] :fixed_value (nil) treat the value regex as an exact string
100
+ #
101
+ # @option options [String] :type (nil) ensure the value conforms to the given type
102
+ #
103
+ # @option options [Boolean, nil] :no_type (nil) unset the previously set type specifier;
104
+ # `true` emits `--no-type`
105
+ #
106
+ # @return [Git::CommandLineResult] the result of calling `git config`
107
+ #
108
+ # @raise [ArgumentError] if unsupported options are provided
109
+ #
110
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Remove a single config entry
9
+ #
10
+ # Wraps `git config --unset` to remove the entry matching the given
11
+ # key name and optional value regex.
12
+ #
13
+ # @example Unset a config key
14
+ # cmd = Git::Commands::ConfigOptionSyntax::Unset.new(lib)
15
+ # cmd.call('user.name')
16
+ #
17
+ # @example Unset a global config key
18
+ # cmd = Git::Commands::ConfigOptionSyntax::Unset.new(lib)
19
+ # cmd.call('user.name', global: true)
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 Unset < Git::Commands::Base
29
+ arguments do
30
+ literal 'config'
31
+ literal '--unset'
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
+ # Value matching
42
+ flag_option :fixed_value
43
+
44
+ # Operands
45
+ end_of_options
46
+ operand :name, required: true
47
+ operand :value_regex
48
+ end
49
+
50
+ # git config --unset exits 5 when trying to unset a non-existent or multi-valued key
51
+ allow_exit_status 0..5
52
+
53
+ # @!method call(*, **)
54
+ #
55
+ # @overload call(name, value_regex = nil, **options)
56
+ #
57
+ # Execute the `git config --unset` command
58
+ #
59
+ # @param name [String] the config key name to unset
60
+ #
61
+ # @param value_regex [String, nil] (nil) optional regex to match the value to remove
62
+ #
63
+ # @param options [Hash] command options
64
+ #
65
+ # @option options [Boolean, nil] :global (nil) remove from global config (`~/.gitconfig`)
66
+ #
67
+ # @option options [Boolean, nil] :system (nil) remove from system config
68
+ #
69
+ # @option options [Boolean, nil] :local (nil) remove from repository config (`.git/config`)
70
+ #
71
+ # @option options [Boolean, nil] :worktree (nil) remove from worktree config
72
+ #
73
+ # @option options [String] :file (nil) remove 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] :fixed_value (nil) treat the value regex as an exact string
80
+ #
81
+ # @return [Git::CommandLineResult] the result of calling `git config --unset`
82
+ #
83
+ # @raise [ArgumentError] if unsupported options are provided
84
+ #
85
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 5)
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module ConfigOptionSyntax
8
+ # Remove all matching config entries
9
+ #
10
+ # Wraps `git config --unset-all` to remove all entries matching the
11
+ # given key name and optional value regex.
12
+ #
13
+ # @example Unset all values for a key
14
+ # cmd = Git::Commands::ConfigOptionSyntax::UnsetAll.new(lib)
15
+ # cmd.call('remote.origin.fetch')
16
+ #
17
+ # @example Unset all values matching a pattern
18
+ # cmd = Git::Commands::ConfigOptionSyntax::UnsetAll.new(lib)
19
+ # cmd.call('core.gitproxy', 'for kernel.org$')
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 UnsetAll < Git::Commands::Base
29
+ arguments do
30
+ literal 'config'
31
+ literal '--unset-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
+ # Value matching
42
+ flag_option :fixed_value
43
+
44
+ # Operands
45
+ end_of_options
46
+ operand :name, required: true
47
+ operand :value_regex
48
+ end
49
+
50
+ # git config --unset-all exits 5 when trying to unset a non-existent key
51
+ allow_exit_status 0..5
52
+
53
+ # @!method call(*, **)
54
+ #
55
+ # @overload call(name, value_regex = nil, **options)
56
+ #
57
+ # Execute the `git config --unset-all` command
58
+ #
59
+ # @param name [String] the config key name to unset
60
+ #
61
+ # @param value_regex [String, nil] (nil) optional regex to match values to remove
62
+ #
63
+ # @param options [Hash] command options
64
+ #
65
+ # @option options [Boolean, nil] :global (nil) remove from global config (`~/.gitconfig`)
66
+ #
67
+ # @option options [Boolean, nil] :system (nil) remove from system config
68
+ #
69
+ # @option options [Boolean, nil] :local (nil) remove from repository config (`.git/config`)
70
+ #
71
+ # @option options [Boolean, nil] :worktree (nil) remove from worktree config
72
+ #
73
+ # @option options [String] :file (nil) remove 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] :fixed_value (nil) treat the value regex as an exact string
80
+ #
81
+ # @return [Git::CommandLineResult] the result of calling `git config --unset-all`
82
+ #
83
+ # @raise [ArgumentError] if unsupported options are provided
84
+ #
85
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 5)
86
+ end
87
+ end
88
+ end
89
+ end