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,297 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git rev-parse` command
8
+ #
9
+ # Picks out and massages parameters for other git commands. Most commonly
10
+ # used to resolve a revision specifier (branch name, tag, abbreviated SHA)
11
+ # to its full object name. Also provides repository metadata queries and
12
+ # argument classification for porcelain scripts.
13
+ #
14
+ # The `--parseopt` and `--sq-quote` operation modes are excluded because
15
+ # they require stdin interaction or provide no value in a Ruby library.
16
+ #
17
+ # @example Resolve HEAD to its full SHA
18
+ # rev_parse = Git::Commands::RevParse.new(execution_context)
19
+ # result = rev_parse.call('HEAD', verify: true)
20
+ #
21
+ # @example Query the repository top-level directory
22
+ # rev_parse = Git::Commands::RevParse.new(execution_context)
23
+ # result = rev_parse.call(show_toplevel: true)
24
+ #
25
+ # @example List all branch refs
26
+ # rev_parse = Git::Commands::RevParse.new(execution_context)
27
+ # result = rev_parse.call(branches: true)
28
+ #
29
+ # @note `arguments` block audited against https://git-scm.com/docs/git-rev-parse/2.53.0
30
+ #
31
+ # @see https://git-scm.com/docs/git-rev-parse git-rev-parse
32
+ #
33
+ # @api private
34
+ #
35
+ class RevParse < Git::Commands::Base
36
+ arguments do
37
+ literal 'rev-parse'
38
+
39
+ # Filtering
40
+ flag_option :revs_only
41
+ flag_option :no_revs
42
+ flag_option :flags, negatable: true
43
+
44
+ # Output
45
+ value_option :default
46
+ value_option :prefix
47
+ flag_option :verify
48
+ flag_option %i[quiet q]
49
+ flag_option :sq
50
+ flag_or_value_option :short, inline: true
51
+ flag_option :not
52
+ flag_or_value_option :abbrev_ref, inline: true
53
+ flag_option :symbolic
54
+ flag_option :symbolic_full_name
55
+ value_option :output_object_format, inline: true
56
+
57
+ # Objects
58
+ flag_option :all
59
+ flag_or_value_option :branches, inline: true
60
+ flag_or_value_option :tags, inline: true
61
+ flag_or_value_option :remotes, inline: true
62
+ value_option :glob, inline: true
63
+ value_option :exclude, inline: true, repeatable: true
64
+ value_option :exclude_hidden, inline: true
65
+ value_option :disambiguate, inline: true
66
+
67
+ # Files
68
+ flag_option :local_env_vars
69
+ value_option :path_format, inline: true, repeatable: true
70
+ flag_option :git_dir
71
+ flag_option :absolute_git_dir
72
+ flag_option :git_common_dir
73
+ flag_option :is_inside_git_dir
74
+ flag_option :is_inside_work_tree
75
+ flag_option :is_bare_repository
76
+ flag_option :is_shallow_repository
77
+ value_option :resolve_git_dir
78
+ value_option :git_path
79
+ flag_option :show_cdup
80
+ flag_option :show_prefix
81
+ flag_option :show_toplevel
82
+ flag_option :show_superproject_working_tree
83
+ flag_option :shared_index_path
84
+ flag_or_value_option :show_object_format, inline: true
85
+ flag_option :show_ref_format
86
+
87
+ # Date conversion
88
+ value_option %i[since after], inline: true
89
+ value_option %i[until before], inline: true
90
+
91
+ execution_option :chdir
92
+
93
+ end_of_options as: '--end-of-options'
94
+
95
+ # Positional arguments (revisions, file paths, or mixed).
96
+ #
97
+ # In git rev-parse, `--` separates verified arguments from those
98
+ # echoed back without verification. Because this operand is after
99
+ # the end_of_options boundary, callers can freely include `--` and
100
+ # hyphen-prefixed values (e.g. branch names starting with `-`).
101
+ operand :args, repeatable: true
102
+ end
103
+
104
+ # @!method call(*, **)
105
+ #
106
+ # @overload call(*args, **options)
107
+ #
108
+ # Execute the `git rev-parse` command
109
+ #
110
+ # @param args [Array<String>] zero or more revision specifiers,
111
+ # object names, or file paths to parse. Include `'--'` to
112
+ # separate verified arguments from those echoed back without
113
+ # verification, e.g. `call('HEAD', '--', 'file.txt')`.
114
+ #
115
+ # @param options [Hash] command options
116
+ #
117
+ # @option options [Boolean, nil] :revs_only (nil) do not output flags
118
+ # and parameters not meant for `git rev-list`
119
+ #
120
+ # @option options [Boolean, nil] :no_revs (nil) do not output flags and
121
+ # parameters meant for `git rev-list`
122
+ #
123
+ # @option options [Boolean, nil] :flags (nil) do not output non-flag
124
+ # parameters (`--flags`)
125
+ #
126
+ # @option options [Boolean, nil] :no_flags (nil) do not output flag
127
+ # parameters (`--no-flags`)
128
+ #
129
+ # @option options [String] :default (nil) use this value if no
130
+ # parameter is given by the user
131
+ #
132
+ # @option options [String] :prefix (nil) behave as if invoked from
133
+ # this subdirectory of the working tree
134
+ #
135
+ # @option options [Boolean, nil] :verify (nil) verify that exactly one
136
+ # parameter is provided and that it can be resolved to an object
137
+ #
138
+ # @option options [Boolean, nil] :quiet (nil) do not output an error
139
+ # message if the first argument is not a valid object name;
140
+ # exit with non-zero status silently
141
+ #
142
+ # Only meaningful with `:verify`.
143
+ #
144
+ # Alias: :q
145
+ #
146
+ # @option options [Boolean, nil] :sq (nil) output a single line
147
+ # properly quoted for shell consumption
148
+ #
149
+ # @option options [Boolean, String, nil] :short (nil) shorten the
150
+ # object name to a unique prefix
151
+ #
152
+ # When `true`, emits `--short` (git default length). When a
153
+ # String, emits `--short=<length>`.
154
+ #
155
+ # @option options [Boolean, nil] :not (nil) prefix object names with
156
+ # `^` and strip `^` from names that already have one
157
+ #
158
+ # @option options [Boolean, String, nil] :abbrev_ref (nil) output a
159
+ # non-ambiguous short name of the object
160
+ #
161
+ # When `true`, emits `--abbrev-ref`. When a String (`"strict"`
162
+ # or `"loose"`), emits `--abbrev-ref=<mode>`.
163
+ #
164
+ # @option options [Boolean, nil] :symbolic (nil) output object names
165
+ # in a form as close to the original input as possible
166
+ #
167
+ # @option options [Boolean, nil] :symbolic_full_name (nil) like
168
+ # `:symbolic` but omit non-ref input and show full refnames
169
+ #
170
+ # @option options [String] :output_object_format (nil) translate
171
+ # object identifiers to the specified format
172
+ #
173
+ # Accepted values are `"sha1"`, `"sha256"`, and `"storage"`.
174
+ #
175
+ # @option options [Boolean, nil] :all (nil) show all refs found in
176
+ # `refs/`
177
+ #
178
+ # @option options [Boolean, String, nil] :branches (nil) show all
179
+ # branches
180
+ #
181
+ # When `true`, emits `--branches`. When a String, emits
182
+ # `--branches=<pattern>`.
183
+ #
184
+ # @option options [Boolean, String, nil] :tags (nil) show all tags
185
+ #
186
+ # When `true`, emits `--tags`. When a String, emits
187
+ # `--tags=<pattern>`.
188
+ #
189
+ # @option options [Boolean, String, nil] :remotes (nil) show all
190
+ # remote-tracking branches
191
+ #
192
+ # When `true`, emits `--remotes`. When a String, emits
193
+ # `--remotes=<pattern>`.
194
+ #
195
+ # @option options [String] :glob (nil) show all refs matching
196
+ # the shell glob pattern
197
+ #
198
+ # @option options [String, Array<String>] :exclude (nil) exclude
199
+ # refs matching the glob pattern from the next `--all`,
200
+ # `--branches`, `--tags`, `--remotes`, or `--glob`
201
+ #
202
+ # @option options [String] :disambiguate (nil) show every object
203
+ # whose name begins with the given prefix
204
+ #
205
+ # @option options [String] :exclude_hidden (nil) do not include
206
+ # refs that would be hidden by the specified protocol
207
+ #
208
+ # Accepted values are `"fetch"`, `"receive"`, and `"uploadpack"`.
209
+ # Affects the next `--all` or `--glob` and is cleared after
210
+ # processing them.
211
+ #
212
+ # @option options [Boolean, nil] :local_env_vars (nil) list the
213
+ # `GIT_*` environment variables local to the repository
214
+ #
215
+ # @option options [String, Array<String>] :path_format (nil) control
216
+ # whether paths output by subsequent path-related options are
217
+ # absolute or relative
218
+ #
219
+ # Accepted values are `"absolute"` and `"relative"`. May be
220
+ # given multiple times; each instance affects the arguments
221
+ # that follow it on the command line.
222
+ #
223
+ # @option options [Boolean, nil] :git_dir (nil) show `$GIT_DIR` if
224
+ # defined, otherwise show the path to the `.git` directory
225
+ #
226
+ # @option options [Boolean, nil] :absolute_git_dir (nil) like
227
+ # `:git_dir` but always output the canonicalized absolute path
228
+ #
229
+ # @option options [Boolean, nil] :git_common_dir (nil) show
230
+ # `$GIT_COMMON_DIR` if defined, else `$GIT_DIR`
231
+ #
232
+ # @option options [Boolean, nil] :is_inside_git_dir (nil) print
233
+ # `"true"` when the current working directory is below the
234
+ # repository directory, `"false"` otherwise
235
+ #
236
+ # @option options [Boolean, nil] :is_inside_work_tree (nil) print
237
+ # `"true"` when inside the work tree, `"false"` otherwise
238
+ #
239
+ # @option options [Boolean, nil] :is_bare_repository (nil) print
240
+ # `"true"` when the repository is bare, `"false"` otherwise
241
+ #
242
+ # @option options [Boolean, nil] :is_shallow_repository (nil) print
243
+ # `"true"` when the repository is shallow, `"false"` otherwise
244
+ #
245
+ # @option options [String] :resolve_git_dir (nil) check if the
246
+ # given path is a valid repository or a gitfile that points at
247
+ # one and print the location
248
+ #
249
+ # @option options [String] :git_path (nil) resolve
250
+ # `"$GIT_DIR/<path>"` taking relocation variables into account
251
+ #
252
+ # @option options [Boolean, nil] :show_cdup (nil) show the path of
253
+ # the top-level directory relative to the current directory
254
+ #
255
+ # @option options [Boolean, nil] :show_prefix (nil) show the path of
256
+ # the current directory relative to the top-level directory
257
+ #
258
+ # @option options [Boolean, nil] :show_toplevel (nil) show the
259
+ # absolute path of the top-level directory of the working tree
260
+ #
261
+ # @option options [Boolean, nil] :show_superproject_working_tree (nil)
262
+ # show the absolute path of the root of the superproject's
263
+ # working tree if the current repository is a submodule
264
+ #
265
+ # @option options [Boolean, nil] :shared_index_path (nil) show the
266
+ # path to the shared index file in split index mode
267
+ #
268
+ # @option options [Boolean, String, nil] :show_object_format (nil)
269
+ # show the object format (hash algorithm) used for the
270
+ # repository
271
+ #
272
+ # When `true`, emits `--show-object-format` (defaults to
273
+ # `"storage"`). When a String (`"storage"`, `"input"`, or
274
+ # `"output"`), emits `--show-object-format=<mode>`.
275
+ #
276
+ # @option options [Boolean, nil] :show_ref_format (nil) show the
277
+ # reference storage format used for the repository
278
+ #
279
+ # @option options [String] :since (nil) parse the date string
280
+ # and output the corresponding `--max-age=` parameter
281
+ #
282
+ # Alias: :after
283
+ #
284
+ # @option options [String] :until (nil) parse the date string
285
+ # and output the corresponding `--min-age=` parameter
286
+ #
287
+ # Alias: :before
288
+ #
289
+ # @return [Git::CommandLineResult] the result of calling
290
+ # `git rev-parse`
291
+ #
292
+ # @raise [ArgumentError] if unsupported options are provided
293
+ #
294
+ # @raise [Git::FailedError] if git exits with a non-zero status
295
+ end
296
+ end
297
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Revert
8
+ # Implements `git revert --abort` to cancel an in-progress revert sequence
9
+ #
10
+ # Cancels the in-progress revert and restores the branch to the state it
11
+ # was in before the `git revert` sequence started.
12
+ #
13
+ # @example Abort an in-progress revert
14
+ # abort_cmd = Git::Commands::Revert::Abort.new(execution_context)
15
+ # abort_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-revert/2.53.0
18
+ #
19
+ # @see Git::Commands::Revert
20
+ #
21
+ # @see https://git-scm.com/docs/git-revert git-revert
22
+ #
23
+ # @api private
24
+ #
25
+ class Abort < Git::Commands::Base
26
+ arguments do
27
+ literal 'revert'
28
+ literal '--abort'
29
+ end
30
+
31
+ # @!method call(*, **)
32
+ #
33
+ # @overload call()
34
+ #
35
+ # Cancel the in-progress revert and restore the branch to its
36
+ # pre-revert state
37
+ #
38
+ # @return [Git::CommandLineResult] the result of calling
39
+ # `git revert --abort`
40
+ #
41
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Revert
8
+ # Implements `git revert --continue` to resume after resolving conflicts
9
+ #
10
+ # After the user has resolved a conflict and staged the changes, the
11
+ # revert session can be continued with this command.
12
+ #
13
+ # @example Resume a revert session after resolving conflicts
14
+ # continue_cmd = Git::Commands::Revert::Continue.new(execution_context)
15
+ # continue_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-revert/2.53.0
18
+ #
19
+ # @see Git::Commands::Revert
20
+ #
21
+ # @see https://git-scm.com/docs/git-revert git-revert
22
+ #
23
+ # @api private
24
+ #
25
+ class Continue < Git::Commands::Base
26
+ arguments do
27
+ literal 'revert'
28
+ literal '--continue'
29
+ flag_option %i[edit e], negatable: true
30
+ end
31
+
32
+ # @!method call(*, **)
33
+ #
34
+ # @overload call(**options)
35
+ #
36
+ # Resume the in-progress revert after conflicts have been resolved
37
+ #
38
+ # @param options [Hash] command options
39
+ #
40
+ # @option options [Boolean, nil] :edit (nil) open the editor for the
41
+ # commit message (`--edit`)
42
+ #
43
+ # Alias: `:e`
44
+ #
45
+ # @option options [Boolean, nil] :no_edit (nil) suppress the editor for
46
+ # the commit message (`--no-edit`)
47
+ #
48
+ # @return [Git::CommandLineResult] the result of calling
49
+ # `git revert --continue`
50
+ #
51
+ # @raise [ArgumentError] if unsupported options are provided
52
+ #
53
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Revert
8
+ # Implements `git revert --quit` to forget an in-progress revert sequence
9
+ #
10
+ # Clears the sequencer state without restoring the branch, leaving the
11
+ # working tree and index in their current state. If no revert is in
12
+ # progress, this is a no-op and still succeeds.
13
+ #
14
+ # @example Forget an in-progress revert session
15
+ # quit_cmd = Git::Commands::Revert::Quit.new(execution_context)
16
+ # quit_cmd.call
17
+ #
18
+ # @note `arguments` block audited against https://git-scm.com/docs/git-revert/2.53.0
19
+ #
20
+ # @see Git::Commands::Revert
21
+ #
22
+ # @see https://git-scm.com/docs/git-revert git-revert
23
+ #
24
+ # @api private
25
+ #
26
+ class Quit < Git::Commands::Base
27
+ arguments do
28
+ literal 'revert'
29
+ literal '--quit'
30
+ end
31
+
32
+ # @!method call(*, **)
33
+ #
34
+ # @overload call()
35
+ #
36
+ # Clear any in-progress revert sequencer state, leaving the
37
+ # working tree as-is. If no revert is in progress, this is a
38
+ # no-op and still succeeds.
39
+ #
40
+ # @return [Git::CommandLineResult] the result of calling
41
+ # `git revert --quit`
42
+ #
43
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Revert
8
+ # Implements `git revert --skip` to skip the current commit in a sequence
9
+ #
10
+ # Skips the current commit and continues applying the remaining commits
11
+ # in the revert sequence.
12
+ #
13
+ # @example Skip a conflicting commit during a revert sequence
14
+ # skip_cmd = Git::Commands::Revert::Skip.new(execution_context)
15
+ # skip_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-revert/2.53.0
18
+ #
19
+ # @see Git::Commands::Revert
20
+ #
21
+ # @see https://git-scm.com/docs/git-revert git-revert
22
+ #
23
+ # @api private
24
+ #
25
+ class Skip < Git::Commands::Base
26
+ arguments do
27
+ literal 'revert'
28
+ literal '--skip'
29
+ end
30
+
31
+ # @!method call(*, **)
32
+ #
33
+ # @overload call()
34
+ #
35
+ # Skip the current commit and continue with the remaining sequence
36
+ #
37
+ # @return [Git::CommandLineResult] the result of calling
38
+ # `git revert --skip`
39
+ #
40
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,153 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Revert
8
+ # Implements `git revert` to create commits that undo prior changes
9
+ #
10
+ # Given one or more existing commits, reverts the changes introduced by
11
+ # those commits and records new commits that reverse them. This requires
12
+ # the working tree to be clean.
13
+ #
14
+ # @example Revert the most recent commit
15
+ # revert = Git::Commands::Revert::Start.new(execution_context)
16
+ # revert.call('HEAD')
17
+ #
18
+ # @example Revert a specific commit without committing
19
+ # revert.call('abc123', no_commit: true)
20
+ #
21
+ # @example Revert a range of commits
22
+ # revert.call('HEAD~3..HEAD~1')
23
+ #
24
+ # @example Revert a merge commit specifying the mainline parent
25
+ # revert.call('abc123', mainline: 1)
26
+ #
27
+ # @note `arguments` block audited against https://git-scm.com/docs/git-revert/2.53.0
28
+ #
29
+ # @see Git::Commands::Revert
30
+ #
31
+ # @see https://git-scm.com/docs/git-revert git-revert
32
+ #
33
+ # @api private
34
+ #
35
+ class Start < Git::Commands::Base
36
+ arguments do
37
+ literal 'revert'
38
+
39
+ # Edit commit message (SYNOPSIS: [--[no-]edit])
40
+ flag_option %i[edit e], negatable: true
41
+
42
+ # Commit behavior (SYNOPSIS: [-n])
43
+ flag_option %i[no_commit n]
44
+
45
+ # Parent selection for merge commits (SYNOPSIS: [-m <parent-number>])
46
+ value_option %i[mainline m]
47
+
48
+ # Authorship (SYNOPSIS: [-s])
49
+ flag_option %i[signoff s], negatable: true
50
+
51
+ # GPG signing (SYNOPSIS: [-S[<keyid>]])
52
+ flag_or_value_option %i[gpg_sign S], negatable: true, inline: true
53
+
54
+ # Commit message cleanup
55
+ value_option :cleanup, inline: true
56
+
57
+ # Merge strategy
58
+ value_option :strategy, inline: true
59
+ value_option %i[strategy_option X], inline: true, repeatable: true
60
+
61
+ # Conflict resolution
62
+ flag_option :rerere_autoupdate, negatable: true
63
+
64
+ # Commit log message format
65
+ flag_option :reference
66
+
67
+ end_of_options
68
+
69
+ # Commits to revert
70
+ operand :commit, repeatable: true, required: true
71
+ end
72
+
73
+ # @!method call(*, **)
74
+ #
75
+ # @overload call(*commit, **options)
76
+ #
77
+ # Execute the git revert command
78
+ #
79
+ # @param commit [Array<String>] one or more commit SHAs, refs, or
80
+ # rev ranges to revert
81
+ #
82
+ # @param options [Hash] command options
83
+ #
84
+ # @option options [Boolean, nil] :edit (nil) open the editor for the
85
+ # commit message (`--edit`)
86
+ #
87
+ # Alias: `:e`
88
+ #
89
+ # @option options [Boolean, nil] :no_edit (nil) suppress the editor for
90
+ # the commit message (`--no-edit`)
91
+ #
92
+ # @option options [Boolean, nil] :no_commit (nil) apply changes to index
93
+ # and working tree without committing
94
+ #
95
+ # Alias: `:n`
96
+ #
97
+ # @option options [Integer, String] :mainline (nil) parent number (starting
98
+ # from 1) identifying the mainline when reverting a merge commit
99
+ #
100
+ # Alias: `:m`
101
+ #
102
+ # @option options [Boolean, nil] :signoff (nil) add a `Signed-off-by`
103
+ # trailer to the commit message (`--signoff`)
104
+ #
105
+ # Alias: `:s`
106
+ #
107
+ # @option options [Boolean, nil] :no_signoff (nil) suppress the
108
+ # `Signed-off-by` trailer (`--no-signoff`)
109
+ #
110
+ # @option options [Boolean, String, nil] :gpg_sign (nil) GPG-sign the
111
+ # resulting commit (`--gpg-sign`)
112
+ #
113
+ # When `true`, uses the default key. When a `String`, uses the
114
+ # specified key ID. Alias: `:S`
115
+ #
116
+ # @option options [Boolean, nil] :no_gpg_sign (nil) disable GPG signing
117
+ # (`--no-gpg-sign`)
118
+ #
119
+ # @option options [String] :cleanup (nil) commit message cleanup mode
120
+ #
121
+ # Accepted values include `strip`, `whitespace`, `verbatim`,
122
+ # `scissors`, and `default`. Emits `--cleanup=<mode>`.
123
+ #
124
+ # @option options [String] :strategy (nil) merge strategy to use
125
+ # (e.g., `'ort'`, `'recursive'`, `'resolve'`)
126
+ #
127
+ # Emits `--strategy=<strategy>`.
128
+ #
129
+ # @option options [String, Array<String>] :strategy_option (nil) pass
130
+ # option(s) to the merge strategy (e.g., `'ours'`, `'theirs'`)
131
+ #
132
+ # Can be a single value or an array for multiple `-X` flags.
133
+ # Emits `--strategy-option=<option>`. Alias: `:X`
134
+ #
135
+ # @option options [Boolean, nil] :rerere_autoupdate (nil) allow rerere to
136
+ # update the index with the auto-resolved conflict result
137
+ # (`--rerere-autoupdate`)
138
+ #
139
+ # @option options [Boolean, nil] :no_rerere_autoupdate (nil) prevent rerere
140
+ # from auto-updating the index (`--no-rerere-autoupdate`)
141
+ #
142
+ # @option options [Boolean, nil] :reference (nil) use compact reference
143
+ # format in the revert commit message instead of the full object name
144
+ #
145
+ # @return [Git::CommandLineResult] the result of calling `git revert`
146
+ #
147
+ # @raise [ArgumentError] if unsupported options are provided
148
+ #
149
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'revert/abort'
4
+ require_relative 'revert/continue'
5
+ require_relative 'revert/quit'
6
+ require_relative 'revert/skip'
7
+ require_relative 'revert/start'
8
+
9
+ module Git
10
+ module Commands
11
+ # Commands for reverting commits via `git revert`
12
+ #
13
+ # This module contains command classes for starting a revert and managing
14
+ # in-progress revert sessions:
15
+ #
16
+ # - {Revert::Start} — revert one or more commits
17
+ # - {Revert::Continue} — resume after resolving conflicts (`--continue`)
18
+ # - {Revert::Skip} — skip the current commit (`--skip`)
19
+ # - {Revert::Abort} — abort the in-progress revert (`--abort`)
20
+ # - {Revert::Quit} — forget the in-progress revert (`--quit`)
21
+ #
22
+ # @api private
23
+ #
24
+ # @see https://git-scm.com/docs/git-revert git-revert documentation
25
+ #
26
+ module Revert
27
+ end
28
+ end
29
+ end